汇编一简单物理地址计算题(8086CPU)

admin 2023年5月16日08:08:23评论31 views字数 966阅读3分13秒阅读模式

学习汇编中,遇到一题算术题没有做出来,过程比较经典,将几个知识点都涵盖在其中,可好好体会学习

汇编一简单物理地址计算题(8086CPU)


计算题


题目:有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻址到此单元,则SA 应满足的条件是?


解:

根据题意可根据物理地址计算公式列一个原式:

X * 1610h)+偏移地址 = 20000H
  • 此处在16进制的计算中,乘以的16转换成16进制为10h,如果直接乘以16会出现进制混乱的计算过程

  • 由于求的的段地址的范围,所以最大值应该对应最小的偏移地址

故有:

X * 1610h)+0h = 20000HX = 20000H/10H = 2000H

最小值得计算应该对应最大的偏移地址,故有:

X * 1610h)+FFFFh = 20000HX = (20000H-FFFFH)/10h = 10001H/10h

我擦,这肯定不是结果呀!不可能段地址出现分数呀!根据《汇编语言》中的注意点的知:

段地址*16 必然是16的倍数,那么一个段的起始地址肯定也是16的倍数,那么从此题来看的话,最小值肯定不是1001H,那么依次向下取偏移地址看看情况:

20000H - FFFF = 10001H 10001H十进制是65537,除以16是4096.062520000H - FFFE = 10002H 10002H十进制是65538,除以16是4096.12520000H - FFFD = 10003H 10001H十进制是65539,除以16是4096.1875 20000H - FFFC = 10004H 10001H十进制是65540,除以16是4096.25 20000H - FFFB = 10005H 10001H十进制是65541,除以16是4096.3125 20000H - FFFA = 10006H 10001H十进制是65542,除以16是4096.375 20000H - FFF0 = 10010H 10010H十进制是65552,除以16是4097 这下找到是16的倍数了

所以有最小值的计算:

X * 1610h)+FFF0H = 20000HX = (20000H-FFF0H)/10h = 10010H/10h = 1001H

所以最终的SA取值范围就是:

1001H < SA < 2000H

原文始发于微信公众号(增益安全):汇编一简单物理地址计算题(8086CPU)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月16日08:08:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   汇编一简单物理地址计算题(8086CPU)http://cn-sec.com/archives/784373.html

发表评论

匿名网友 填写信息