Понимание слова 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.