【发布时间】:2018-10-01 15:20:07
【问题描述】:
我有以下来自反汇编程序的 mov 指令(不带后缀)。
mov %dx,(%eax)
指令后缀是什么?首先我认为目标寄存器决定了后缀,但是根据我正在阅读的书,我猜它是由“最小”寄存器决定的。所以在这种情况下会是
movw %dx, (%eax)
因为 %dx(16 位字寄存器)是最小的。 我的推理正确吗? (CSAPP的书有时候有点混乱,没有解释清楚)。
【问题讨论】:
-
一般情况下,如果要传输的值的大小可以从操作数中明确确定,则不需要后缀。如果无法确定(例如 mov $123,(someaddrmode),其中 $123 可以是 8bit、16bit、32bit 甚至 64bit),则必须添加后缀。 %dx 是一个 16 位寄存器,因此很明显您将传输 16 位。
-
知道了!谢谢。