繁体   English   中英

汇编mov指令不带后缀

[英]Assembly mov instruction without suffix

我有以下来自反汇编程序的mov指令(不带后缀)。

mov %dx,(%eax)

指令后缀是什么? 首先,我认为目标寄存器确定了后缀,但是根据我正在阅读的书,我猜它是由“最小”寄存器确定的。 所以在这种情况下

movw %dx, (%eax)

因为%dx(16位字寄存器)是最小的寄存器。 我的推理正确吗? (有时CSAPP的书有些混乱,没有清楚地说明细节)。

目标不是您的示例中的寄存器,而是源是寄存器。 因此,操作数大小为16位,因此AT&T将使用movw

目标是存储器中的2个字节,由32位寻址模式选择。 mov要求源和目标的宽度相同。 如果至少一个操作数是一个寄存器,则唯一确定操作数的大小。

您需要为mov $123, (%eax)类的后缀,因为两个操作数都不是寄存器。


您关于“最小”的想法完全是虚假的。 movl %eax, (%bx)movl因为寄存器操作数为32位,并且通过16位寻址模式选择4字节目标。

寻址模式下的一个或多个寄存器对操作数大小的影响为零。 地址大小和操作数大小是独立的,您可以覆盖其中一个,但不能覆盖另一个。 (这就是为什么操作数大小( 0x66 )和地址大小( 0x67 )有单独的机器代码前缀字节的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM