学习汇编中,遇到一题算术题没有做出来,过程比较经典,将几个知识点都涵盖在其中,可好好体会学习
题目:有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻址到此单元,则SA 应满足的条件是?
解:
根据题意可根据物理地址计算公式列一个原式:
X * 16(10h)+偏移地址 = 20000H
-
此处在16进制的计算中,乘以的16转换成16进制为10h,如果直接乘以16会出现进制混乱的计算过程
-
由于求的的段地址的范围,所以最大值应该对应最小的偏移地址
故有:
X * 16(10h)+0h = 20000H
X = 20000H/10H = 2000H
最小值得计算应该对应最大的偏移地址,故有:
X * 16(10h)+FFFFh = 20000H
X = (20000H-FFFFH)/10h = 10001H/10h
我擦,这肯定不是结果呀!不可能段地址出现分数呀!根据《汇编语言》中的注意点的知:
段地址*16 必然是16的倍数,那么一个段的起始地址肯定也是16的倍数,那么从此题来看的话,最小值肯定不是1001H,那么依次向下取偏移地址看看情况:
20000H - FFFF = 10001H 10001H十进制是65537,除以16是4096.0625
20000H - FFFE = 10002H 10002H十进制是65538,除以16是4096.125
20000H - FFFD = 10003H 10001H十进制是65539,除以16是4096.1875
20000H - FFFC = 10004H 10001H十进制是65540,除以16是4096.25
20000H - FFFB = 10005H 10001H十进制是65541,除以16是4096.3125
10006H 10001H十进制是65542,除以16是4096.375 =
10010H 10010H十进制是65552,除以16是4097 =
这下找到是16的倍数了
所以有最小值的计算:
X * 16(10h)+FFF0H = 20000H
X = (20000H-FFF0H)/10h = 10010H/10h = 1001H
所以最终的SA取值范围就是:
1001H < SA < 2000H
原文始发于微信公众号(增益安全):汇编一简单物理地址计算题(8086CPU)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论