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