汇编指令sar与shr

本文介绍了汇编语言中的SAR和SHR指令,两者都是右移指令,SAR保留符号位,SHR用0填充。以16进制数0xD5为例,通过内嵌汇编演示了SAR右移2位的过程,解释了为何最终结果为0xF5。
摘要由CSDN通过智能技术生成

首先说下理论:

汇编语言中SAR和SHR指令都是右移指令,SAR是算数右移指令(shift arithmetic right),而SHR是逻辑右移指令(shift logical right)。

两者的区别在于SAR右移时保留操作数的符号,即用符号位来补足,而SHR右移时总是用0来补足。

例如10000000算数右移(SAR)一位是11000000,而逻辑右移(SHR)一位是01000000。

 那么:

#include "stdio.h"

int main()

{

// int a=10;

// printf("%d\n",a>>2);

__asm

{

mov al,0xD5

sar al,2

}

return 0;

}


中的我们的内嵌汇编

mov al,0xD5

sar al,2
执行完之后是什么?

 

0xD5即 16进制D5,换算成二进制为1101 0101;sar右移2位,即相当于右移1次,再右移1次;每次补符号位1,2次右移后结果为二进制1111 0101,即为16进制F5。

执行:

mov al,0xD5

再执行:

sar al,2

这里一定要清楚,右移2次,相当于右移了2个1次,这样就容易理解为什么左边补了2个1了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值