请问这段代码什么意思?

[复制链接]
查看11 | 回复5 | 2021-1-27 06:42:58 | 显示全部楼层 |阅读模式
.data
ldw(2)
rdw(3)
.code
start:
movAX,l
movBX,r
shrBX,1
movCX,AX
shlCX,15
shrAX,1
orBX,CX
shlEAX,16
orAX,BX
endstart
这段代码到底实现了什么运算?
谢谢
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:42:58 | 显示全部楼层
.data
ldw(2)
rdw(3)
.code
start:
movAX,l;AX==2
movBX,r;BX==3
shrBX,1;BX==1
movCX,AX;CX==2
shlCX,15;CX==0
shrAX,1;AX==1
orBX,CX;BX==0x0001
shlEAX,16;EAX==0x00010000
orAX,BX;EAX==0x00010001
endstart
回复

使用道具 举报

千问 | 2021-1-27 06:42:58 | 显示全部楼层
;对应的32位程序好像是这个意思
.code
start:
movzxeax,l
shleax,15
movzxebx,r
shrebx,1
oreax,ebx
endstart
回复

使用道具 举报

千问 | 2021-1-27 06:42:58 | 显示全部楼层
l,r都是16个bit数。它们合起来是一个32bit数。
这个程序就是把(lr)右移1个bit。
回复

使用道具 举报

千问 | 2021-1-27 06:42:58 | 显示全部楼层
.data;数据段
ldw(2)
rdw(3)
.code;代码段
start:
movAX,l
movBX,r
shrBX,1;SHR是逻辑右移,每移一位,用0补足。对于无符号来说。SHR等于除2
movCX,AX
shlCX,15;shl逻辑左移每移一位,用0补足,移出的最高位进入CF.
shrAX,1
orBX,CX;or是逻辑或,有1则1
shlEAX,16;我记得移位的位数如果是多个,那移位位数要放在CL中,
;不知道为什么你这里是16
orAX,BX
endstart
初学汇编,希望我的解释对你有帮助。QQ64878641有意可以一起交流
回复

使用道具 举报

千问 | 2021-1-27 06:42:58 | 显示全部楼层
引用3楼gogdizzy的回复:l,r都是16个bit数。它们合起来是一个32bit数。
这个程序就是把(lr)右移1个bit。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行