邏輯運(yùn)算和移位指令
1.邏輯運(yùn)算指令
(1)不是OPRD
此指令否定操作數(shù),然后將結(jié)果返回給。操作數(shù)可以是寄存器或內(nèi)存的內(nèi)容。該指令對(duì)標(biāo)志位沒有影響。
例子:不全是
(2)與指令
該指令按階段對(duì)兩個(gè)操作數(shù)執(zhí)行“與”的邏輯運(yùn)算。即只有當(dāng)階段中的兩個(gè)參與者都為“1”時(shí),階段AND結(jié)果才為“1”;否則,“與”的結(jié)果為“0”?!芭c”的結(jié)果被發(fā)回。
“與”指令可以執(zhí)行字節(jié)操作或字操作。
“與”指令的一般格式是
和OPRD1,OPRD2
目標(biāo)操作數(shù)OPRD1可以是累加器、任何通用寄存器或內(nèi)存操作數(shù)。源操作數(shù)OPRD2可以是立即操作數(shù)、寄存器或存儲(chǔ)器操作數(shù)。
示例:
和a1,0FH
BX安達(dá)克斯
英國石油公司
數(shù)據(jù)字
緩沖區(qū)[國際BX]
數(shù)據(jù)字,00FFH
英國石油公司,DX
(3)測試說明
該指令的運(yùn)算功能與AND指令相同,結(jié)果會(huì)反映在標(biāo)志位,但結(jié)果不會(huì)發(fā)回,即TEST指令不會(huì)改變操作數(shù)的值。這個(gè)指令通常是在你不想改變操作數(shù)的前提下。
用于檢測某個(gè)或某些位的狀態(tài)。
測試指令的一般格式是
測試OPRD,im;Im是一個(gè)即時(shí)號(hào)碼。
立即數(shù)中的哪個(gè)位是1表示要測試哪個(gè)位。
例如,如果要檢查AL中的最低位是否為1,如果為1,則傳輸。在這種情況下
您可以使用以下說明:
測試鋁,01H
那里
…那里:MOV BL,05H
(4)或指令
“或”指令允許對(duì)字節(jié)或字進(jìn)行異或運(yùn)算?!盎颉敝噶钍箻?biāo)志位cf=0,of=0;“或”運(yùn)算的結(jié)果反映在標(biāo)志位PF、SF和ZF中;自動(dòng)對(duì)焦標(biāo)志位未定義。
or指令的一般格式是
或操作數(shù)1,操作數(shù)2
目標(biāo)操作數(shù)OPRD1可以是累加器、任何通用寄存器或內(nèi)存操作數(shù)。源操作數(shù)OPRD2可以是立即操作數(shù)、寄存器或存儲(chǔ)器操作數(shù)。
示例:
或鋁,30H
或AX,00FFH
或BX,SI
或BX,數(shù)據(jù)字
或緩沖器
或緩沖器[BX國際標(biāo)準(zhǔn)],8000小時(shí)
操作數(shù)本身的“或”不會(huì)改變操作數(shù)的值,但可以將進(jìn)位標(biāo)志CF清零。
(5)異或指令
該指令對(duì)兩個(gè)操作數(shù)進(jìn)行按位異或運(yùn)算,即異或運(yùn)算的兩個(gè)值不同時(shí),結(jié)果為“1”;否則為0,返回運(yùn)算結(jié)果。
異或指令的一般形式是
異或OPRD 1,運(yùn)算2
目標(biāo)操作數(shù)OPRD1可以是累加器、任何通用寄存器或內(nèi)存操作數(shù)。源操作數(shù)可以是立即操作數(shù)、寄存器或內(nèi)存操作數(shù)。
示例:
異或a1,0FH
BX異或
異或DX,SI
CX異或
異或緩沖器
異或緩沖器[BX系統(tǒng)],AX
當(dāng)操作數(shù)本身為異或時(shí),由于每一位都相同,異或結(jié)果必須為0,進(jìn)位標(biāo)志位也必須為0。這是將操作數(shù)清零的常用方法。
示例:
異或AX,AX
異或硅,硅
2.移位指令
088有三個(gè)換擋指令。算術(shù)左移和邏輯左移指令:SAL/SHL OPRD,m;m是移位數(shù),可以是1,也可以是寄存器CL中的內(nèi)容算術(shù)右移位指令:
OPRD特區(qū)
邏輯移位指令:OPRD,碩士
(1) SAL/SHL指令
這兩條指令的運(yùn)算結(jié)果完全一樣。每移位一次,右邊最低位加一個(gè)零,左邊最高位移入標(biāo)志位CF,如圖3.16所示。
(2)合成孔徑雷達(dá)指令
每次指令執(zhí)行移位操作時(shí),都會(huì)將操作數(shù)向右移位一位,但符號(hào)位保持不變,最低移位到標(biāo)志位CF,如圖3.17所示。
合成孔徑雷達(dá)可以移動(dòng)m指定的次數(shù),結(jié)果會(huì)影響標(biāo)志位CF、OF、PF、SF和ZF。
每次指令執(zhí)行移位操作時(shí),操作數(shù)向右移位一位,最低位移位到標(biāo)志位CF,與SAR不同,左邊最高位將填充0,如圖3.18所示。該指令可以執(zhí)行m指定的班次。
3.循環(huán)移位指令
088有四個(gè)循環(huán)移位指令:
左循環(huán)移位指令ROLOPRD,m
右循環(huán)移位指令ROROPRD,m
帶進(jìn)位的左循環(huán)移位指令
帶進(jìn)位的右循環(huán)移位指令
(1) ROL指令
每次指令移位時(shí),總是將最高位移入進(jìn)位位CF,同時(shí)也將操作數(shù)的最高位移入最低位,這樣就形成了一個(gè)環(huán),如圖3.19(a)所示。
(2) ROR指令
每次指令移位時(shí),總是將最低位移入進(jìn)位標(biāo)志位CF,也將最低位移入操作數(shù)的最高位,從而形成一個(gè)循環(huán),如圖3.19(b)所示。
(3) RCL指令
該指令是包含標(biāo)志位CF的循環(huán)左移指令,每次移位,操作數(shù)的最高位被移位到進(jìn)位標(biāo)志位CF,而原始CF的內(nèi)容被移位到操作數(shù)的最低位,從而形成一個(gè)大循環(huán)。
如圖3.19(c)所示。
(4)RCR指令
該指令是包含進(jìn)位標(biāo)志位CF的右循環(huán)指令,每次移位時(shí),標(biāo)志位CF中的原始內(nèi)容移入操作數(shù)的最高位,而操作數(shù)的最低位移入標(biāo)志位CF,如圖3.19(c)所示。
向左移動(dòng)一位,只要左移后的數(shù)字不超過一個(gè)字節(jié)或一個(gè)字可以表示的范圍,就相當(dāng)于原來的數(shù)字乘以2;向右移動(dòng)一位相當(dāng)于除以2,
示例:
MOV航空公司,08H
SALAL,1歲;向左移動(dòng)一個(gè)位置,相當(dāng)于乘以2;該指令執(zhí)行后,AL中的內(nèi)容為16。
MOVAL,16歲
SARAL,1;向右移動(dòng)一位,相當(dāng)于除以2;該指令執(zhí)行后,AL中的內(nèi)容為8。