汇编中数据段变量msg的绝对地址计算问题咨询
搞定
msg字符串的绝对地址计算 嘿,我来帮你捋清楚这个实模式下的地址计算问题!首先得记住x86实模式的核心规则:绝对物理地址 = 段地址 × 16 + 偏移地址(说白了就是段地址左移4位,再加上变量在段内的偏移)。
咱们一步步拆解:
先搞对
msg的偏移地址
你的数据段代码是这样的:.data len dw 10 msg db "1234567890"这里
dw是word类型,占2字节,所以len会占用段内偏移0000H和0001H这两个位置。那紧接着的msg,它的偏移地址就是0002H(十进制2)——你之前误以为是15H(十进制21),这是核心错误,应该是把其他变量的位置搞混啦。然后计算绝对地址
已知DS的段地址是0ACA(十六进制,实模式下段地址都是16位数值):- 先把段地址转成真正的段基址:
0ACA × 16 = 0ACA0(十六进制,相当于左移4位) - 加上
msg的偏移0002H:0ACA0 + 0002 = 0ACA2
- 先把段地址转成真正的段基址:
这正好对应可选答案里的0ACA2。
简单总结下:你之前的问题出在偏移地址算错了,数据段里的变量是按定义顺序排的,dw占2字节,所以msg从偏移2开始,再结合段地址的计算规则就能得到正确结果啦。
内容的提问来源于stack exchange,提问作者Mostfa shma
相关产品推荐
相关产品推荐

