nasm - 无效的段覆盖

时间:2012-03-11 05:22:49

标签: nasm

我试图将edx的最左边的字节存储,然后将eax的内容存储到内存中的5字节点,并使用以下行:

mov numh, [dl:eax]

我收到错误"无效的段覆盖"。

这是什么意思,我该如何解决?

1 个答案:

答案 0 :(得分:2)

首先,“无效段覆盖”是指您表达[dl:eax]的方式。在这个表达式中,'dl'充当一个称为段寄存器的东西。问题是dl不是有效的段寄存器。在这种情况下,段寄存器不是您想要使用的。

我想澄清你在问题中提出的问题:

  • numh引用了一些5字节的内存区域
  • edx包含,例如,0x12345678,以及“edx的最左边的字节”,您要存储0x12

如果以上情况属实,则需要保存edx(如果关心其内容),向右移24位以将0x12转换为dl,然后存储它。

这是我头脑中的一些ASM:

push edx          ; save initial value
shr edx, 24       ; get the leftmost byte down to the 'dl' portion of edx
mov [numh], dl    ; write the byte to the memory referenced by numh
mov [numh+1], eax ; write eax
pop edx           ; restore original edx value

注意:我不记得“mov [numh + 1]”是否有效。但我希望这会让你朝着正确的方向前进。