汇编sal和sar同时移位相同位数有什么作用
1个回答
展开全部
sal是有符号数左移
sar是右移
例如:
mov eax,-2
sal eax,1
//执行后eax = -4,eax最高位也就是符号位移位到cf标志位,cf=1;
//其实sal和shl的操作是等价的,上面的操作使用shr操作是一样的结果,都是左移源操作数n位,每次移位将最高位移入cf标志位
注意sar和shl就不同了:
mov eax,-2
sar eax,1//有符号右移,高位保持符号位不变,此处为1,操作后eax =0xffff ffff = -1;
shr eax,1//无符号右移,高位补0,操作后eax= 0x7fff ffff;//变为正数了
//----------------------------------------------------------
所以:
同一个数,sal左移n位后,再sar右移n位,结果还是这个数;
但是,sar右移n位,再sal左移n位,如果(源操作数/ 2^n) <= -1 ,结果还是这个数,
否则结果为-2^n;
例如 :
mov eax,-4
sar eax,8//注意操作后,eax还是-1
sal eax,8//操作后,eax就是-2^8了
sar是右移
例如:
mov eax,-2
sal eax,1
//执行后eax = -4,eax最高位也就是符号位移位到cf标志位,cf=1;
//其实sal和shl的操作是等价的,上面的操作使用shr操作是一样的结果,都是左移源操作数n位,每次移位将最高位移入cf标志位
注意sar和shl就不同了:
mov eax,-2
sar eax,1//有符号右移,高位保持符号位不变,此处为1,操作后eax =0xffff ffff = -1;
shr eax,1//无符号右移,高位补0,操作后eax= 0x7fff ffff;//变为正数了
//----------------------------------------------------------
所以:
同一个数,sal左移n位后,再sar右移n位,结果还是这个数;
但是,sar右移n位,再sal左移n位,如果(源操作数/ 2^n) <= -1 ,结果还是这个数,
否则结果为-2^n;
例如 :
mov eax,-4
sar eax,8//注意操作后,eax还是-1
sal eax,8//操作后,eax就是-2^8了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |