Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 不带后缀的汇编mov指令_Assembly_X86_Att - Fatal编程技术网

Assembly 不带后缀的汇编mov指令

Assembly 不带后缀的汇编mov指令,assembly,x86,att,Assembly,X86,Att,我有以下来自反汇编程序的mov指令(不带后缀) mov %dx,(%eax) 指令后缀是什么?首先我认为目标寄存器决定后缀,但是根据我正在读的书,我猜它是由“最小”寄存器决定的。所以在这种情况下 movw %dx, (%eax) 因为%dx(16位字寄存器)是最小的。 我的推理正确吗?(有时CSAPP手册有点混乱,没有清楚地解释细节)。在您的示例中,目的地不是寄存器,而是源寄存器。因此操作数大小为16位,因此AT&T将使用movw 目标是内存中的2个字节,由32位寻址模式选择mov要求源和目

我有以下来自反汇编程序的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位的,并且4字节目标由16位寻址模式选择


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

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

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

mov$123、(%eax)
这样的东西需要一个显式后缀,因为两个操作数都不是寄存器


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


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

正确。我认为其他任何东西都没有多大意义。很好的解释。谢谢!正确。我认为其他任何东西都没有多大意义。很好的解释。谢谢!一般来说,如果要传输的值的大小可以通过操作数明确确定,则不需要后缀。如果无法确定(例如mov$123,(someaddrmode),其中$123可以是8位、16位、32位甚至64位),您必须添加后缀。%dx是一个16位寄存器,因此很明显您将传输16位。明白了!谢谢。通常,如果要传输的值的大小可以通过操作数明确确定,则不需要后缀。如果无法确定,则不需要后缀(例如mov$123,(someaddrmode),其中$123可以是8位、16位、32位甚至64位),您必须添加后缀。%dx是一个16位寄存器,因此很明显您将传输16位。明白了!谢谢。