Понимание слова PTR

У меня есть 16-битный исходный код, который я пытаюсь понять.

Я имею.

unsigned short addr, d;

addr = &d;

8D46FA // LEA AX,WORD PTR [d]
8946FC // MOV WORD PTR [addr],AX

адрес становится 0x159A

Почему addr = 0x159A, а не 0xFA46?

Этот вопрос был отложен, но ответ был дан, и я принял его. Я не спрашивал, как работают регистры (кажется, что люди так думали, мой вопрос был простым и понятным, почему он компилирует вышеприведенный ASM так, а не то, что я мог бы ожидать в противном случае).

1 ответ

Решение

Разборка немного сбивает с толку. Эти адреса были на самом деле относительно BP, что нормально для локальных переменных. lea имеет мод R/M байт и мод R/M байт 46 в 16-битных средствах адресацииBP+sbyte,

Весь смысл lea в том, что он использует кодировку операнда памяти, поэтому ему определенно нужен мод R/M.

Другие вопросы по тегам