例題
思路
選擇移位語句,右移,將AL移出的送入DX左端,將BL移出的送入DX左端。循環八次
MOV AL,01100101B;
MOV BL,11011010B;
XOR DX,DX;兩個值相同,異或結果為0。等效:MOV DX,0
MOV CX,8;count
L1: SHR AL,1;邏輯右移,左邊補0, RCR DX,1;帶進位循環右移,右端被舍棄掉的補回左端SHR BL,1;右移 RCR DX,1;右移; LOOP L1 ;AL的1被移出,送入CF中;DX的左端被CF填入,然后右端0送入CF中;;BL的0被移出,送入CF中 ;DX的左端被CF填入,然后右端0送入CF中;;至此,一個循環結束,進行八次循環完成數據轉移
指令講解
移位操作分為三類:算術移位,邏輯移位,循環移位
邏輯移位是指邏輯左移和邏輯右移,移出的空位都用0來補。
SHL(shift logical left):邏輯左移
SHR(shift logical right):邏輯右移
算術移位
對于無符號型值,算術移位等同于邏輯移位。
對于有符號型值 ,算術左移等同于邏輯左移。
算術右移補的是符號位,正數補0,負數補1。
SAL(shift arithmetic left) :算術左移
SAR(shift arithmetic right) :算術右移
循環移位
ROL(rotat left) 循環左移
ROR(rotat right) 循環右移
帶進位循環移位
注意順序!!!先移位,再將CF(進位標志位)復制到LSB(MSB),最后將被移除的值送入CF。
所以這里作為轉存的寄存器是有兩個的,一個是CF,一個我不知道是啥,設為X吧。
此時,我們反過來推導一波例題:
總結
通過例題學習了常見的幾種移位操作。