переменную длинной в 2 байта, некое число, назвал ее num, а значение 0x45: num dw 0x45. В секции .text пишу: mov rax, [num]. Я знаю, что размеры операндов должны быть равны. После компиляции эта строка превращается в mov rax, qword [num], что означает скопировать 8 байт, начиная с адреса num, в регистр rax. При выполнении этой инструкции я затрудняюсь понять, почему в регистр rax попадает значение 0x00000045. Откуда взялись эти нули, и каким образом я читаю 8 байт, если переменная 2 байта?
Ну в отладчике зайди в "дамп памяти" по адресу, и глянь что там ещё лежит
В вопросе уже содержится ответ: если операнды должны быть равны и читается 8 байт, то... )
Кстати FASM помнится ругается если размеры регистра и переменной не равны и нет явного указания размера. Странно что NASM пропускает это без ошибки.
Обсуждают сегодня