【问题标题】:Assembly Language hex address汇编语言十六进制地址
【发布时间】:2020-07-21 07:12:04
【问题描述】:

我刚开始学习汇编语言,我们正在使用十六进制地址。下面是我们的一个问题。我不确定它是如何加起来的。我知道答案是 0x202C,但我们是如何到达那里的?您能以最基本的方式帮助我逐步解释这些过程吗?谢谢!!


以下数据段从内存地址 0x2000(十六进制)开始

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

dueDate的十六进制地址是多少?

【问题讨论】:

标签: hex


【解决方案1】:

您需要将三个数据定义相加:

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。

【讨论】:

    猜你喜欢
    • 2012-01-08
    • 2019-05-16
    • 1970-01-01
    • 2014-03-24
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2014-04-08
    相关资源
    最近更新 更多