最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第四周 算術(shù)運算、邏輯運算與移位操作指令

2021-01-04 21:15 作者:康康Loong  | 我要投稿

大家好,又是我,沉迷學(xué)習(xí)無法自拔的小笨蛋康sir。 這個文集將會同步更新我觀看吳寧老師的《微機原理與接口技術(shù)》教學(xué)視頻寫的筆記,學(xué)習(xí)筆記,大概每周一章。 有問題大家可以在評論下面留言討論,歡迎糾錯! 歡迎收藏閱讀,動動小手給個硬幣點個贊。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?——@正能量的康sir??


也可移步我的博客(https://blog.csdn.net/qq_33956508)獲得更好的閱讀體驗(暫不更新),也會更新一些其它技術(shù)類文章。



第19講 加法運算類指令

算術(shù)運算類指令:

加法運算指令

減法運算指令

乘法指令

除法指令


算術(shù)運算指令的執(zhí)行大多對狀態(tài)標(biāo)志位會產(chǎn)生影響。


  1. 加法運算指令

加法指令

普通加法指令A(yù)DD

帶進位位的加法指令A(yù)DC

加1指令I(lǐng)NC


前面兩種雙操作數(shù)的加法指令對操作數(shù)的要求與MOV相同.

回顧MOV的要求:

兩操作數(shù)字長必須相同;

兩操作數(shù)不允許同時為存儲器操作數(shù);

兩操作數(shù)不允許同時為段寄存器;

在源操作數(shù)時立即數(shù)時,目標(biāo)操作數(shù)不能是段寄存器;

IP和CS不作為目標(biāo)操作數(shù),F(xiàn)LAGS一般也不作為操作數(shù)在指令中出現(xiàn)。


  1. ADD指令

格式:ADD OPRD1,OPRD2

操作:OPRD1+OPRD2——>OPRD1

ADD指令的執(zhí)行對全部6個狀態(tài)標(biāo)志位都產(chǎn)生影響


例子:

MOV AL,78H

ADD AL,99H

指令執(zhí)行后6個狀態(tài)標(biāo)志位的狀態(tài)

01111000+10011001=100010001

標(biāo)志位:CF=1,SF=0,AF=1,ZF=0,PF=1,OF=0


2.ADC指令

指令格式、對操作數(shù)的要求、對標(biāo)志位的影響與ADD指令完全一樣

指令的操作:OPRD1+OPRD2+CF——>OPRD1

ADC指令多用于多字節(jié)數(shù)相加,使用前要先將CF清零

3.INC指令

格式:INC OPRD (OPRD不能是段寄存器,不能是立即數(shù))

操作: OPRD+1——>OPRD

INC指令的執(zhí)行不影響CF,但會影響其余5個狀態(tài)標(biāo)志位。

(即使是FFH再加1,也不會影響CF。INC后面不能跟基于CF狀態(tài)轉(zhuǎn)移的條件轉(zhuǎn)移指令)

常用于在程序中修改地址指針。

例子:

求內(nèi)存數(shù)據(jù)段中M1為首和M2為首的兩個20字節(jié)數(shù)之和,并將結(jié)果寫入M2為首的區(qū)域中。

LEA SI,M1

LEA DI,M2

MOV CX,20

CLC ;使CF=0

NEXT:MOV AL,[SI]

ADC [DI],AL;因為ADC的結(jié)果就是OPRD1+OPRD2+CF,所以上一次運算如果進位使CF=1,這次會被加上

INC SI

INC DI

DEC CX

JNZ NEXT

HLT


按“字“運算

LEA SI,M1

LEA DI,M2

MOV CX,10

CLC

NEXT:MOV AX,[SI]

ADC [DI],AX

ADD SI,2

ADD DI,2

DEC CX

JNZ NEXT

HLT




第20講 減法運算類指令

減法指令:

普通減法指令SUB

? 考慮借位的減法指令SBB

? 減1指令DEC

? 比較指令CMP

? 求補指令NEG


減法指令對操作數(shù)的要求與對應(yīng)的加法指令相同


  1. SUB指令

格式:SUB OPRD1,OPRD2

操作:OPRD1-OPRD2——>OPRD1

對標(biāo)志位的影響與ADD指令同

  1. SBB指令

指令格式、對操作數(shù)的要求、對標(biāo)志位的影響與SUB指令完全一樣

指令的操作:OPRD1-OPRD2-CF——>OPRD1

  1. DEC指令

格式:DEC OPRD

操作:OPRD-1——>OPRD

指令對操作數(shù)的要求與INC相同

指令常用于在程序中修改數(shù)值


應(yīng)用程序例

程序功能:延時(定時)

MOV BL,2

NEXT1:MOV CX,0FFFFH;關(guān)于前面的0:指令中,立即數(shù)16位最高位是A-F的符號時,前面必須加0,為了編譯器識別。

NEXT2:DEC CX

JNZ NEXT2;ZF=0轉(zhuǎn)NEXT2

DEC BL

JNZ NEXT1;ZF=0轉(zhuǎn)NEXT1

HLT;暫停執(zhí)行

  1. NEG指令(這條命令用得少)

格式:NEG OPRD ;OPRD指8/16位寄存器或存儲器操作數(shù)

操作:0-OPRD——>OPRD

對一個負(fù)數(shù)取補碼就相當(dāng)于用零減去此數(shù)


說明:執(zhí)行NEG指令后,一般情況下都會使CF為1,除非給定的操作數(shù)為零才會使CF為0.

當(dāng)指令的操作數(shù)的值為80H(-128)或為8000H(-32768),則執(zhí)行NEG指令后,結(jié)果不變,但0F置1,其它情況下OF均置0.

用0減去操作數(shù),可以得到負(fù)數(shù)的絕對值。

  1. CMP指令

格式:CMP OPRD1,OPRD2

操作:OPRD1-OPRD2

指令執(zhí)行的結(jié)果不影響目標(biāo)操作數(shù),僅影響標(biāo)志位

用途:用于比較兩個數(shù)的大小,可作為條件轉(zhuǎn)移指令轉(zhuǎn)移的條件

指令對操作數(shù)的要求及對標(biāo)志位的影響與SUB指令相同


CMP指令

兩個無符號數(shù)的比較:CMP AX,BX

若AX>=BX ——>CF=0

若AX<BX——>CF=1

若AX=BX——>CF=0,ZF=1


CMP指令

兩個帶符號數(shù)的比較

CMP AX,BX

兩個數(shù)的大小由OF和SF共同決定

OF和SF狀態(tài)相同 AX>=BX

OF和SF狀態(tài)不同 AX<BX


CMP指令例:

程序功能 在20個數(shù)中找到最大的數(shù),并將其存放在MAX單元中。

LEA BX,MAX

LEA SI,BUF

MOV CL,20

MOV AL,[SI]

NEXT:INC SI

CMP AL,[SI]

JNC GOON ;CF=0轉(zhuǎn)移

XCHS [SI],AL

GOON:DEC CL

JNZ NEXT

MOV [BX],AL

HLT



第21講 乘除運算指令

  1. 乘法指令

無符號的乘法指令MUL

帶符號的乘法指令I(lǐng)MUL

注意:乘法指令采用隱含尋址,隱含的是存放被乘數(shù)的累加器AL或AX及存放結(jié)果的AX,DX;


無符號數(shù)的乘法指令

格式: MUL OPRD ;OPRD不能是立即數(shù)

操作:OPRD為字節(jié)數(shù) AL x OPRD——>AX

?OPRD為16位數(shù)AXxOPRD——>DXAX

舉例:MUL BYTE PTR[BX];BYTE PTR說明后面的偏移地址指向的內(nèi)存單元是字節(jié)長(8位)。WORD PTR是字長(8086來說就是16位)。

ALxXXH——>AX ? ? ?



有符號數(shù)乘法指令

格式:IMUL OPRD

指令格式及對操作數(shù)的要求與MUL指令相同。

指令執(zhí)行原理:

將兩個操作數(shù)取補碼(對負(fù)數(shù)按位取反加1,正數(shù)不變);

做乘法運算

將乘積取補碼(按位取反加1)


2、除法指令

無符號除法指令

格式:DIV OPRD

有符號除法指令

格式:IDIV OPRD


操作

指令要求被除數(shù)是除數(shù)的雙倍字長

若OPRD是字節(jié)數(shù)

執(zhí)行AX/OPRD

結(jié)果AL=商 AH=余數(shù)


若OPRD是雙字節(jié)數(shù)

執(zhí)行:DXAX/OPRD

結(jié)果:AX=商 DX=余數(shù)


算術(shù)運算指令小結(jié)

算術(shù)運算指令執(zhí)行影響狀態(tài)標(biāo)志位

乘法指令執(zhí)行結(jié)果為相乘的雙倍字長;除法指令要求被除數(shù)是除數(shù)的雙倍字長

例:

MOV SI,1200H

MOV WORD PTR[SI],8765H

MOV AL,[SI]

INC SI;指向高八位 也就是87H

MUL BYTE PTR[SI];計算ALx[SI]=65H x 87H——>AX=3543H

修改一下

?????? MOV SI,1200H

?????? MOV WORD PTR[SI],8765H

?????? MOV AX,[SI];所以AX=8765H

?????? MUL WORD PTR[SI];計算AXx[SI]——>DX AX

第22講 邏輯運算指令

邏輯運算

基本邏輯運算

與或非

異或

邏輯運算指令——實現(xiàn)邏輯操作的指令

與、或、非、異或


邏輯運算指令

對操作數(shù)的要求:

大多(與 或 異或)與MOV指令相同。特例:

?非”運算指令要求操作數(shù)不能是立即數(shù);需要說明字長(PTR)

對標(biāo)志位的影響

除“非”運算指令,其余指令的執(zhí)行都會影響除AF外的5個狀態(tài)標(biāo)志(CF、OF、ZF、SF、PF),如何影響:無論執(zhí)行結(jié)果如何,都會使標(biāo)志位CF=OF=0。ZF、SF、PF正常影響。

“非”運算指令的執(zhí)行不影響標(biāo)志位。

1、“與”指令

格式:AND OPRD1,OPRE2

操作:兩操作數(shù)相“與”,結(jié)果送目標(biāo)地址

應(yīng)用:

實現(xiàn)兩操作數(shù)按位相與的運算AND BL,[SI]

使目標(biāo)操作數(shù)的某些位不變,某些位清零AND AL,0FH (AL的高四位變0,低四位不變)

在操作數(shù)不變的情況下使CF和OF清零AND AX,AX

舉例:

從地址為3F8H端口中讀入一個字節(jié)數(shù)(狀態(tài)字),如果該數(shù)bit1位為1,則可從38FH端口將DATA為首地址的1個字輸出,否則就不能進行數(shù)據(jù)傳送。

要求:編寫相應(yīng)的程序段


MOV DX,3F8H

WATT:IN AL,DX

AND AL,02H ;把AL和00000010相與,然后判斷結(jié)果是0還是非0,由此判斷bit1位不是1還是1

JZ WATT ;ZF=1轉(zhuǎn)移

MOV DX,38FH

MOV AX,DATA

OUT DX,AX

2、“或”運算指令

格式:OR OPRD1,OPRD2

操作:兩操作數(shù)相“或”,結(jié)果送目標(biāo)地址

應(yīng)用:

實現(xiàn)兩操作數(shù)相“或”的運算OR AX,[DI]

使某些位不變,某些位置“1”: OR CL,0FH

在不改變操作數(shù)的情況下使OF=CF=0 : OR AX,AX

例子:

OR AL,AL

JPE GOON ;PF=1轉(zhuǎn)移

OR AL,80H

GOON:…

“或”指令的應(yīng)用

將一個二進制數(shù)9變?yōu)樽址?’

二進制9? 00001001? 09H

字符9 ASCII碼00111001? 39H

MOV AL,9

OR AL,30H

也可以用ADD AL,30H,只是運算速度和標(biāo)志位影響上的差別


3、“非”運算指令

格式:NOT OPRD

操作:操作數(shù)按位取反再送回原地址

注:指令的執(zhí)行對標(biāo)志位無影響

例:NOT BYTE PTR[BX]


4、“異或”運算指令

格式:XOR OPRD1,OPRD2

操作:兩操作數(shù)“異或”,結(jié)果送目標(biāo)地址

例子

XOR BL,80H;最高位取反,低7位不變

異或:不同為1,相同為0.所以:和0異或,狀態(tài)不變;和1異或,狀態(tài)取反。

XOR AX,AX;使AX清零(用異或的方法效率最高)

其它清零AX的方法:

AND AX,0

SUB AX,AX

MOV AX,0000H


5、“測試“指令

格式:TEST OPRD1,OPRD2

操作:執(zhí)行“與”運算,但運算的結(jié)果不送回目標(biāo)地址

應(yīng)用:常用于測試某些位的狀態(tài)

例:從地址位3F8H的端口中讀入一個字節(jié)數(shù),當(dāng)該數(shù)的bit1,bit3,bit5位同時為1時,可從38FH端口將DATA為首地址的一個字輸出,否則就不能進行數(shù)據(jù)傳送

編寫相應(yīng)的程序段。

源程序代碼:

LEA SI,DATA

MOV DX,3F8H

WATT:IN AL,DX

TEST AL,02H

JZ WATT ;ZF=1轉(zhuǎn)移

TEST AL,08H

JZ WATT

TEST AL,20H

JZ WATT

MOV DX,38FH

MOV AX,[SI]

OUT DX,AX


優(yōu)化后:

LEA SI,DATA

MOV DX,3F8H

WATT:IN AL,DX

AND AL,2AH

CMP AL,2AH

JNZ WATT

MOV DX,38FH

MOV AX,[SI]

OUT DX,AX


再優(yōu)化:

優(yōu)化后:

LEA SI,DATA

MOV DX,3F8H

WATT:IN AL,DX

AND AL,2AH

XOR AL,2AH

JNZ WATT

MOV DX,38FH

MOV AX,[SI]

OUT DX,AX




第23講 移位操作指令

控制二進制位向左或向右移動的指令

分類:非循環(huán)移位指令、循環(huán)移位指令

移位操作指令說明

指令格式在形式上為雙操作數(shù),本質(zhì)上為單操作數(shù);

指令的目標(biāo)操作數(shù)為被移動對象,源操作數(shù)為移動次數(shù)

當(dāng)目標(biāo)為存儲器操作數(shù)時,需要說明其字長

移動移動1位時由指令直接給出;移動兩位及以上時,移位次數(shù)必須由CL指定。

指令源操作數(shù) 只能是1或CL

1.非循環(huán)移位指令

邏輯左移

算術(shù)左移

邏輯右移

算術(shù)右移

左移和右移的原理不一樣,

邏輯左移和算數(shù)左移原理相同:左移最高位移入CF,最低位補零;

邏輯右移和算數(shù)右移原理不同:邏輯右移最低位移入CF,最高位補零;算術(shù)右移最低位移入CF,符號位會復(fù)制到最高位。(所以如果一個8位數(shù)算術(shù)右移8次會每一位都是原來符號位的數(shù)。)

左移一位乘2,右移一位除以2


算術(shù)左移和邏輯左移

(算術(shù)移位指令針對有符號數(shù),邏輯移位指令針對無符號數(shù))

算術(shù)左移指令:(有符號數(shù))

SAL OPRD,1

SAL OPRD,CL

邏輯左移指令:(無符號數(shù))

SHL OPRD,1

SHL OPRD,CL


邏輯右移:(無符號數(shù))

SHR OPRD,1

SHR OPRD,CL


邏輯右移例:

MOV AL,68H

MOV CL,2

SHR AL,CL



算術(shù)右移:(有符號數(shù))

格式:

SAR OPRD,1

SAR OPRD,CL



非循環(huán)移位指令的應(yīng)用:

左移可實現(xiàn)乘法運算(左移1位 乘以2)

右移可實現(xiàn)除法運算(右移1位 除以2)


2.循環(huán)移位指令

不帶進位位的循環(huán)指令:左移ROL、右移ROR

帶進位位的循環(huán)移位:左移RCL、右移RCR

指令格式、對操作數(shù)的要求與非循環(huán)移位指令相同


不帶進位位的循環(huán)移位

左移:最高位移動到CF,同時移動到最低位

右移:最低位移動到CF,同時移動到最高位



帶進位位的循環(huán)移位

左移:CF移動到最低位,最高位移動到CF

右移:CF移動到最高位,最低位移動到CF



循環(huán)移位指令的應(yīng)用:

用于對某些位狀態(tài)的測試;

高位部分和低位部分的交換;

與非循環(huán)移位指令一起組成32位或更長字長數(shù)的移位。


例:

在內(nèi)存數(shù)據(jù)段 M 1為首地 址的 4個單元中存放了 4個壓縮 BCD 碼 。

要求:將這4個壓縮BCD碼分別轉(zhuǎn)換為ASCII碼,并將轉(zhuǎn)換結(jié)果存放在同一邏輯段、M2為首的單元中。



例:

題目分析:

壓縮BCD碼是用4位二進制碼表示1位十進制數(shù)

轉(zhuǎn)換ASCII碼時需要分別轉(zhuǎn)換高4位(十位數(shù))和低4位(個位數(shù))

0~9的ASCII碼的高4位均為0011(30H)

轉(zhuǎn)換低4位應(yīng)先使高4位清零,轉(zhuǎn)換高4位時須先將高4位移動到低4位的位置


程序例

LEA SI,M1

LEA DI,M2

MOV CH,4

Next:MOV AL,[SI]

MOV BL,AL

AND AL,0FH;高四位清零

OR AL,30H;高四位變0011,轉(zhuǎn)化為ASCII

MOV [DI],AL;表示個位的8位ASCII存入[DI]

INC DI

MOV AL,BL

MOV CL,4

SHR AL,CL;邏輯右移4次。高四位移動到低四位

OR AL,30H;高四位變0011,轉(zhuǎn)化為ASCII

MOV [DI],AL;十位的8位ASCII存入上個[DI]加一的地方

INC DI

INC SI

DEC CH

JNZ NExt;如果CH不為0,則跳轉(zhuǎn)到Next

HLT




第四周 算術(shù)運算、邏輯運算與移位操作指令的評論 (共 條)

分享到微博請遵守國家法律
江达县| 澎湖县| 陇南市| 吴忠市| 措美县| 高雄市| 台湾省| 沾化县| 繁昌县| 连州市| 乐陵市| 新化县| 克什克腾旗| 普兰店市| 乐都县| 弋阳县| 保德县| 西乡县| 延川县| 庄浪县| 明光市| 永吉县| 徐闻县| 镶黄旗| 铜鼓县| 新蔡县| 图们市| 沈丘县| 金平| 荣成市| 瑞丽市| 通海县| 泽库县| 岳阳市| 泰和县| 鲜城| 涟水县| 丹东市| 怀柔区| 曲水县| 崇明县|