一个简单的汇编问题
题目是这样的:一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻找到此单元,则SA应满足最小值和最大值各为多少。本人初学汇编,还望高人指点,在此谢过...
题目是这样的:一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻找到此单元,则SA应满足最小值和最大值各为多少。
本人初学汇编,还望高人指点,在此谢过了 展开
本人初学汇编,还望高人指点,在此谢过了 展开
展开全部
从题目可以看出你问的应该是8086,下的汇编问题。
首先讲讲背景知识吧。早期PC地址总线只有20根,也就是说,系统可以寻址2的20次方,即1M Byte.可是我们的8086的寄存器没有20位的,只有16位,比如CS、DS、ES、SS段基址寄存器,AX,BX这些通用寄存器,都是16位的。所以,要寻址1M Byte的空间。只能使用这种“段+偏移”的二维方式表示。
举例来说,0000:0401 (以下表示地址的数字均为16进制)这个地址,按前述的计算方式,实际对应的物理单元地址是 段地址0 * 16 +偏移地址0401,即 00401 处的物理单元;同一个物理单元也可由 0040:0001 这对段/偏移量来表示(计算方法相同),或者由 003F:0011 表示(003F0+0011)= 0401。
---------------------------------------------
OK,说到这里,背景你应该已经看的差不多了。我们就来讨论你问的这个问题吧.20000H这个地址单元,SA(段基址) 最大值很好确定,只要偏移最小,SA自然是最大的喽。所以MAXsa=20000H/10H = 2000H
那MINsa呢?
当然是偏移最大的时候,SA自然最小了。可是什么时候才是偏移最大呢?
FFFFH?当然不行。因为我们目标地址单元最后四位是0H,所以偏移的最低四位也必须是0.即最大偏移是FFF0H喽。那剩下的,应该好算了吧。套用公式, MINsa*10H+FFF0H=20000H <==> MINsa = 1001H
-----------------------------
喽索了半天,最后得到的极限值就是:
1001:FFF0 = 20000H
2000:0000 = 20000H
首先讲讲背景知识吧。早期PC地址总线只有20根,也就是说,系统可以寻址2的20次方,即1M Byte.可是我们的8086的寄存器没有20位的,只有16位,比如CS、DS、ES、SS段基址寄存器,AX,BX这些通用寄存器,都是16位的。所以,要寻址1M Byte的空间。只能使用这种“段+偏移”的二维方式表示。
举例来说,0000:0401 (以下表示地址的数字均为16进制)这个地址,按前述的计算方式,实际对应的物理单元地址是 段地址0 * 16 +偏移地址0401,即 00401 处的物理单元;同一个物理单元也可由 0040:0001 这对段/偏移量来表示(计算方法相同),或者由 003F:0011 表示(003F0+0011)= 0401。
---------------------------------------------
OK,说到这里,背景你应该已经看的差不多了。我们就来讨论你问的这个问题吧.20000H这个地址单元,SA(段基址) 最大值很好确定,只要偏移最小,SA自然是最大的喽。所以MAXsa=20000H/10H = 2000H
那MINsa呢?
当然是偏移最大的时候,SA自然最小了。可是什么时候才是偏移最大呢?
FFFFH?当然不行。因为我们目标地址单元最后四位是0H,所以偏移的最低四位也必须是0.即最大偏移是FFF0H喽。那剩下的,应该好算了吧。套用公式, MINsa*10H+FFF0H=20000H <==> MINsa = 1001H
-----------------------------
喽索了半天,最后得到的极限值就是:
1001:FFF0 = 20000H
2000:0000 = 20000H
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询