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