我刚刚开始学习汇编语言,我们正在使用十六进制地址。下面是我们的一个问题。不过我不确定它是怎么加起来的。我知道答案是0x202C,但我们是如何到达那里的?你能以最基本的方式帮助我一步一步地解释这些过程吗?非常感谢。
以下数据段从内存地址0x2000(十六进制(开始
.data
printString BYTE "Assembly is fun",0
moreBytes BYTE 24 DUP(0)
dateIssued DWORD ?
dueDate DWORD ?
dueDate的十六进制地址是什么?
您有三个数据定义要添加在一起:
printString
是一个ASCII文本,后面跟一个零字节。字符串部分长15个字节,终端为零字节,即16。因此,下一个数据项的偏移量为0x2010(16进制为0x10十六进制(。printString
从0x2000开始,下一个从printString
的最后一个字节开始,所以必须将其长度与偏移量相加才能得到下一个偏移量。
moreBytes
有24个字节长,因为DUP就是这样工作的。BYTE x DUP (y)
表示"Y值的X字节"。因此,下一个数据项的偏移量是0x2028,因为小数点24是0x18十六进制。
dateIssued
是4字节长,因为这是DWORD的定义。所以下一个是0x0x2C,因为8+4=12,这是十六进制表示法中的0xC。
或者,你可以把这三个长度加在一起,得到44。十六进制中的44将是0x2C。