有一数据存放在内存20000H单元中,现给定段地址为SA
(2014-10-09 10:08:55)
标签:
段地址十进制倍数偏移 |
分类: 技术分享 |
这道题是汇编语言第二版的习题,一开始我也是百思不得其解,下面看看吧:
最大值: (很多人最大值很容易算出来,但是最小值卡住了,很纳闷为什么是1001H)
我们可以根据原题列出一个式子: X * 10H + 0H = 20000H
我们之前是乘以16,但是那个16是十进制的,因为整个式子里都是16进制,加入个10进制去算会出错的
所以呢,我们把16转换为16进制的数,就是10H
段地址 = 物理地址 - 偏移地址 除以 10H
X = 20000H - 0H / 10H
求得结果是2000H
因为我们要求的是最大的段地址,所以就用上最小的偏移地址配合他,也就是0H
最小值:
(那为什么不是1000H呢?下面是答案……)
段地址要为16(10H)的倍数,
(这些的值都不是16的倍数)
我们不断减小值,因为FFFF是最大,不能再大了,所以只能减小,直到....... (要直到除以16是整数为止)
20000H - FFF0 = 1 0010H 1 0010H十进制是65552,除以16是4097,可以整除
这时10010H满足16(10H)的倍数了
物理地址减去 [可以被16整除的最大偏移地址,在这一题中也就是FFF0H]
的结果,除以16(10H)等于最小段地址
提示,反过来思考一下,当段地址给定为多少,CPU无论怎么变化偏移地址都无法寻到20000H单元?