我在理解以下汇编代码时遇到了问题 . 如果你能给我一个数字的例子,这将是一个很好的例子 .
movl $0, %ecx
movl $0, %eax
addl $1, %eax
movl %eax, %edx
sarl $31, %edx
idivl $7
movl %edx, %eax
movl (%esp, %eax, 4), %eax
movl %eax, (%esp, %ecx, 4)
我想我可能误解了萨尔和偶像,因为我的结果毫无意义 .
非常感谢你的帮助!!我已经坐在那段代码前3个小时了^^
我认为:
ecx = 0
eax = 0
eax = 0 1 = 1
edx = eax = 1
现在转移edx => edx = 0
现在edx:eax除以7?
为什么我不能设置edx = 0并离开sarl?那不一样吗?
1 回答
不是签署的部门,这是
idiv
. 这两条指令模拟CDQ
指令的作用:那是,
注意
sarl
更新了一些状态标志,而cdq
没有,所以movl
sarl
与cdq
不完全相同 . 它's not clear from the question why the code doesn'吨只需使用cdq
.