Язык ассемблера шестнадцатеричный адрес - PullRequest
0 голосов
/ 08 апреля 2020

Я только начинаю изучать ассемблер, и мы работаем с шестнадцатеричными адресами. Ниже наш вопрос. Я не уверен, как это складывается все же. Я знаю, что ответ 0x202 C, но как мы туда попали? Можете ли вы помочь объяснить процессы шаг за шагом, наиболее простым способом, чтобы помочь мне понять? Спасибо !!


Следующий сегмент данных начинается с адреса памяти 0x2000 (шестнадцатеричный)

.data
printString BYTE "Assembly is fun",0
moreBytes BYTE 24 DUP(0)
dateIssued DWORD ?
dueDate DWORD ?

Что такое шестнадцатеричный адрес dueDate?

1 Ответ

0 голосов
/ 08 апреля 2020

У вас есть три определения данных, которые нужно сложить вместе:

printString - это текст ASCII, за которым следует нулевой байт. Строковая часть имеет длину 15 байт, а конечный нулевой байт равен 16. Таким образом, смещение следующего элемента данных равно 0x2010 (десятичное число 16 - это 0x10 шестнадцатеричное). printString начинается с 0x2000, а следующий начинается после последнего байта printString, поэтому вы должны добавить его длину к его смещению, чтобы перейти к следующему смещению.

moreBytes - 24 байта долго, потому что так работает DUP. BYTE x DUP (y) означает «X байтов значения Y». Таким образом, смещение следующего элемента данных равно 0x2028, а 24 десятичного знака - 0x18 шестнадцатеричного.

dateIssued имеет длину 4 байта, потому что это определение DWORD. Таким образом, следующий находится в 0x0x2 C, так как 8 + 4 = 12, и это 0x C в шестнадцатеричной записи.

В качестве альтернативы, вы можете добавить три длины вместе, получив 44. 44 в шестнадцатеричном будет 0x2 C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...