nasm - неверное переопределение сегмента - PullRequest
2 голосов
/ 11 марта 2012

Я пытаюсь сохранить самый левый байт edx, а затем содержимое eax в 5-байтовом месте в памяти со следующей строкой:

mov numh, [dl:eax]

и я получаю ошибку "переопределение недопустимого сегмента".

Что это значит и как я могу это исправить?

1 Ответ

2 голосов
/ 11 марта 2012

Во-первых, «недопустимое переопределение сегмента» относится к тому, как вы выразили [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]".Но я надеюсь, что это заставит вас двигаться в правильном направлении.

...