汇编语言shl和shr指令

shl是逻辑左移指令,它的功能为:

(1)将一个寄存器或内存单元中的数据向左移位;
(2)将最后移出的一位写入CF中;
(3)最低位用0补充。

指令:

mov al,01001000b
shl al,1 ;将al中数据左移一位

执行后(al)=10010000b,CF=0
我们来看一下shl al,l的操作过程。
(1)左移

  原数据:  01001000
  左移后: 01001000

(2)将最后移出的一位写入CF中

  原数据:  01001000
  左移后:  1001000   CF=0

(3)最低位用0补充

  原数据:  01001000
  左移后:  10010000   

如果接着上面,继续执行一条shl a1,1,则执行后:(al)=OO100000b. CF=1 shl指令的操作过程如下。
(1)左移

  原数据:  10010000
  左移后: 10010000

(2)将最后移出的一位写入CF中

  原数据:  10010000
  左移后:  0010000    CF=1

(3)最低位用0补充

  原数据:  10010000
  左移后:  00100000   

注意:

如果移动位数大于1时,必须将移动位数放在cl中。

比如,指令:

mov al,01010001b
mov cl,3
shl al,cl

执行后(al)=10001000b,因为最后移出的一位是0,所以CF=0。
可以看出,将x逻辑左移一位,相当于执行x=x*2
比如:

  mov  al,00000001b           ;执行后(al)=00000001b=1
  shl  al,1                   ;执行后(al)=00000010b=2
  shl  al,1                   ;执行后(al)=00000100b=4
  shl  al,1                   ;执行后(al)=00001000b=8
  mov  cl,3
  shl  al,cl                   ;执行后(al)=0100000b=67

Shr是逻辑右移指令,它和shl所进行的操作刚好相反。
(1)将一个寄存器或内存单元中的数据向右移位;
(2)将最后移出的一位写入CF中;
(3)最高位用0补充。
指令:

mov a1,10000001b
shr al,1        ;将al中的数据右移一位

执行后(al)=01000000b, CF=1
如果接着上面,继续执行一条shr al, l,则执行后:(al)=00100000b, CF=0
如果移动位数大于1时,必须将移动位数放在cl中
比如 指令:

mov al,01010001b
mov cl,3
shr al,cl

执行后(al)=00001010b,因为最后移出的一位是0,所以CF=0
可以看出将x逻辑右移一位,相当于执行x=x/2


发布日期:

所属分类: 编程 标签:  


没有相关文章!