【发布时间】:2015-06-25 23:23:37
【问题描述】:
我正在课堂上学习 x86 汇编,我很不知道如何区分寄存器操作数和内存引用的作用。我有几个困惑,我希望能解决。
以下代码是我的教科书所说的分别进行 push 和 pop 的漫长方法:
subl $4, %esp
movl %ebp, (%esp)
movl (%esp), %eax
addl $4, %esp
那么在 subl 指令中,我们可以一直期望 %esp 保存一个地址值吗?
另外两个 movl 函数有什么区别?第一个可以写成
movl (%ebp), %esp
?而对于第二个movl,是移动%esp的地址还是移动%esp指向的值?
那么作为后续,为什么我们不能像这样将源和目标设为内存引用?
movw (%eax), 4(%esp)
最后,对于以下代码:
movb (%esp, %edx, 4), %dh
如果源超过 1 个字节(%dh 的大小),那么会发生什么?它只是截断值吗?
抱歉,这是一大堆问题,但我们将不胜感激。
【问题讨论】: