由nasm插入的冗余DS段覆盖前缀?

时间:2015-02-19 15:57:01

标签: assembly x86 nasm disassembly

我正在研究x86反汇编程序用于教育目的。我一直在使用nasm来组装不同的指令。

目前我正在研究具有ModR / M字节的16位寻址形式。 " Intel 64和IA-32架构软件开发人员手册:第2A卷指令集参考,A-M" (我认为我的版本已过时,但此信息仍应成立)说明"默认段寄存器为SS,用于包含BP索引的有效地址,DS用于其他有效地址"。

因此,如果我理解正确,以下说明应该完全相同:

mov [bx], eax
mov [ds:bx], eax

但是,当我使用nasm编译上述指令并查看生成的字节时,我得到以下内容:

67 89 07      mov [bx], eax
3e 67 89 07   mov [ds:bx], eax

我理解所有字节的含义,但我不明白为什么nasm会将ds段覆盖前缀(3e)添加到第二条指令。我似乎没有必要,因为ds已经是默认段。

我的问题是:我在这里遗漏了什么,或者不需要ds段覆盖前缀?

1 个答案:

答案 0 :(得分:2)

如果您输入mov [ds:bx], eax,汇编程序应汇编mov [ds:bx], eax。 NASM不是(也不应该!)一个优化汇编器来纠正您的输入。也许您确实需要四个字节的空间来修改程序代码。