使用nasm在有效地址中忽略段

时间:2015-04-01 17:15:23

标签: assembly nasm

我正在尝试使用nasm在x86程序集中编写一个简单的引导程序。在代码中的几个地方,我必须使用[es:di]形式的有效地址。代码编译时没有错误,但在运行时,段被忽略。例如,

mov ax, 0x07C0
mov es, ax
mov di, 0x10
lea eax, [es:di]

lea之后,寄存器看起来像:

EAX=00000010 
EDI=00000010
ES =07c0 00007c00 0000ffff 00009300

但是EAX应该是7C10。问题发生在程序的任何一点(包括以前什么也没做过),程序以实模式运行。

我的问题是:这是正常的吗?我错过了什么吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

英特尔的手册可能不是很清楚。或者至少在哪里看起来可能并不明显。但如果您阅读第7.3.16.1节(Address Computation Instruction),则说:

  

LEA(加载有效地址)指令计算内存中的有效地址(段内的偏移量)   源操作数的一部分,并将其放在通用寄存器中。

所以,是的,我说你的结果是预期的结果。