前言
吐槽一下下,彙編的指令真的好多呀,學了這麼多可是記住的卻沒幾個,所以寫下這篇文章加深對彙編移位指令的理解和記憶
1、邏輯移位指令
邏輯移位指令適用於帶符號數運算
邏輯左移 SHL
指令格式:SHL OPR,CNT
PR:是指被移位的運算元 CNT:是指移位次數
比如將二進位制數 1100 1111 左移 1 位,該數就變為 1001 1110,cf=1:
程式碼
MOV AL,0CFh
SHL AL,1
邏輯右移 SHR
指令格式:SHR OPR,CNT
下圖所示為二進位制數 1100 1111 邏輯右移一位,得到 0110011,最低位移入進位標誌位,cf=1:
程式碼
MOV AL,0CFH
SHR AL,1
2、算術移位指令
算術移位指令適用於無符號數運算
算數左移 SAL
指令格式:SAL OPR,CNT
算數左移和邏輯左移完全一樣噠,這裡就不多說了
算術右移 SAR
指令格式:SAR OPR,CNT
例如,二進位制數 1100 1111,符號位為 1。算術右移一位後,得到 1110 0111:
程式碼
MOV AL,0CFH
SAR AL,1
3、迴圈移位指令
迴圈左移 ROL
指令格式:ROL OPR,CNT
比如將二進位制數 1100 1111 迴圈左移 4 位,該數就變為1111 1100,cf=1:
程式碼
MOV CL,4
MOV AL,0CFH ;AL = 11001111b
ROL AL,4 ;左移1位:10011111b, cf=1
;左移2位: 00111111b, cf=1
;左移3位:01111110b, cf=0
;左移4位:11111100b, cf=1
迴圈右移 ROR
指令格式:ROR OPR,CNT
比如將二進位制數 1100 1111 迴圈右移 4 位,該數就變為 11111100,cf=1:
程式碼
MOV CL,4
MOV AL,0CFH ;AL = 11001111b
ROR AL,4 ;右移1位:11100111b, cf=1
;右移2位: 11110011b, cf=1
;右移3位:11111001b, cf=1
;右移4位:11111100b, cf=1
4、注意點
移位次數由CNT決定,它的取值為1或者CL
(1)CNT=1時,只移動一位
MOV BL,8Fh ; BL = 10001111b
SHL BL,1 ;移位後 BL = 00011110b
(2)CNT > 1時,則在使用移位指令前,應首先將移位次數送給CL暫存器
MOV BL,8Fh ; BL = 10001111b
MOV CL,2
SHL BL,CL ;移位後 BL = 00111100b
本作品採用《CC 協議》,轉載必須註明作者和本文連結