汇编语言 物理地址问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 18:14:20
题目如下:一个有16个字的数据区,起始地址为70A0:DDF6,则这个数据区末字的物理地址是______________.
答案是: 7E816H
请教懂汇编语言的高手,指点下,是如何算出来的。
谢谢~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

算这种问题我教楼主一个很实用但有点麻烦的方法:
先将个数简化成一:
也就是说一个有1个字的数据区,起始地址是那些,然后计算这个数据区末字的地址.很明显,只有一个的话最后一个就是第一个,那地址自然70A0:DDF6
然后看有2个字的数据区,有两个的话,第一个的地址是70A0:DDF6,第二个也就是最后一个的地址也就是70A0:DDF8
然后有3个的就是70A0:DDFA
...
然后整理这些数据,可以推出:
一个有N个字的数据区,起始地址为A0,它的末字的地址为A0+2*(N-1)

这个方法就是大名鼎鼎的数学归纳法
当然我这个不过程好像不是地道数学归纳法

看看这道题,只要把数代进去就行了
70A0H:DDF6H+2*(16-1)=

这个答案是错误的,正确的是:7E814H。

1、先计算数据区末字的偏移地址
16个字占20H字节的内存空间,0DDF6H+20H=DE16H,这是末字数据后面的偏移地址,末字的偏移地址为DE16H-2=DE14H。
2、再计算末字的物理地址
物理地址=段地址*10H+偏移地址=70A0H+DE14H=7E814H。

已知:70A0:DDF6
再加16字,即20H
如下:

7 0 A 0 0
+ D D F 6
+ 2 0
--------------------------
7 E 8 1 6

虽然得出了题里给定的结果,但是不是填空所需要的结果。

70A00
DDF6 //DOS下物理地址的计算方法(段地址(70A0)*10h(16)+偏移地址(DDF6))
+0020(16个字=10h(16进制)X2(一个字等于两字节))
______
7E816

少东西 应该有个16区