汇编移位指令笔记

本文介绍了汇编语言中的两种位移操作——逻辑位移和算术位移。逻辑位移(SHL,SHR)用于无符号数,空位由0填充,而算术位移(SAL,SAR)在处理有符号数时考虑符号位。SHL和SAL对于左移操作等价,而SAR在右移时会根据符号位填充1或0。这些位移操作常用于实现快速的乘法(左移)和除法(右移)运算。
摘要由CSDN通过智能技术生成

汇编移位有两种方法

第一种逻辑位移:

简单来讲就是空出来的用0填充

SHL 是目的操作数算术左移,最高位移入进位标志位CF

格式   reg,imm8 ;mem,imm8;reg,cl;mem,cl  (这个cl寄存器不太懂,大佬指点下)

mov al,11110 000b
SHL al,1
;al==1110 0000b  cf=1
SHL al,2
;al==1000 0000b cf=1
;如果多次左移,则标志位为最后一次的MSB(最高位)
;再移动一次
SHL al,1
;al==0000 0000b cf=0

有逻辑左移就有右移 SHR

与SHL相同点:都用0填充 。不同点:最低位移到CF

两个位移实现无符号数2次方的乘除

乘法:

mov al,5
;al==0000 0101b
SHL al,1
;al ==0000 1010b
相当于乘了个2
不考虑进位情况下,左移n次就乘了2的n次方

除法

mov al,24
;al==0001 1000b
shr al,2
;al =0000 0110b=6
相当于除了个2的2次方



第二种算术位移 

SAL 和SAR两个指令操作格式与SAL一致

SAL和SHL一样(书上是这么说的),有不同见解可以提出就不说了

SAR与SHL都是LSB复制CF中,不同在于填充是看符号位(为1则填充1,为0则填充0)

mov al,1100 0000b;al=192
SAR al,1;
;最低位0 cf=0 最高位1 填充1
;cf=0  al=1110 0000b;al=224
mov al,0011 0001b;al=49
SAR al,1
;最低位0 cf=0 最高位0 填充0
;al=0001 1000b=24 cf=0   

SAR还可有符

mov al,-128;1000 0000b
shl al,3;al=1110 0000b=-16
;实现了有符号除法
;因为正负有符号位决定,填充也填充符号位,所以正负就没变

号数除2次幂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值