У вас есть три определения данных, которые нужно сложить вместе:
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.