美文网首页
有一数据存放在内存20000H单元中,现给定段地址为SA,若想用

有一数据存放在内存20000H单元中,现给定段地址为SA,若想用

作者: Waldo_cuit | 来源:发表于2018-08-06 12:20 被阅读0次

这道题是汇编语言(王爽)的习题,一开始我也是百思不得其解,下面看看吧:
有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻址到此单元,则SA 应满足的条件是:最小为 1001H 最大为 2000H ;

最大值: (很多人最大值很容易算出来,但是最小值卡住了,很纳闷为什么是1001H)
我们可以根据原题列出一个式子: X * 10H + 0H = 20000H

我们之前是乘以16,但是那个16是十进制的,因为整个式子里都是16进制,加入个10进制去算会出错的
所以呢,我们把16转换为16进制的数,就是10H

段地址 = 物理地址 - 偏移地址 除以 10H
X = 20000H - 0H / 10H

求得结果是2000H
因为我们要求的是最大的段地址,所以就用上最小的偏移地址配合他,也就是0H

最小值:
SA * 16 + FFFFH = 20000H 段最小值那么就要用最大偏移地址来配合它。
SA * 16 = 20000H - FFFFH
SA * 16 = 10001H 我们求得了这个段地址,但是还要除以10H,或者转换为10进制,再除以10进制的16

(那为什么不是1000H呢?下面是答案……)

段地址要为16(10H)的倍数,
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 有小数说明不是倍数,不能整除
20000H - FFFA = 10006H 10001H十进制是65542,除以16是4096.375 有小数说明不是倍数,不能整除
(这些的值都不是16的倍数)
我们不断减小值,因为FFFF是最大,不能再大了,所以只能减小,直到....... (要直到除以16是整数为止)

20000H - FFF0 = 1 0010H 1 0010H十进制是65552,除以16是4097,可以整除
这时10010H满足16(10H)的倍数了

物理地址减去 [可以被16整除的最大偏移地址,在这一题中也就是FFF0H] 的结果,除以16(10H)等于最小段地址
20000H - FFF0H / 10H = 1001H ,于是这个1001H这个苦逼的孩子就是答案了。。。

提示,反过来思考一下,当段地址给定为多少,CPU无论怎么变化偏移地址都无法寻到20000H单元?
·根据上面一题的答案,小于1001H,或者大于2000H都无法寻到20000H单元

相关文章

  • 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用

    这道题是汇编语言(王爽)的习题,一开始我也是百思不得其解,下面看看吧:有一数据存放在内存20000H单元中,现给定...

  • 第 3 章 寄存器(内存访问)

    1.内存中字的存储字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。0、1两个内存单元用来存储一个字,这...

  • iOS之底层汇编(四)

    DS和[address] CPU要读写一个内存单元时,必须要先给这个内存单元的地址,在8086中,内存地址由段地址...

  • 3.《汇编语言》-王爽第三版学习笔记 寄存器(内存访问)

    内存中的字存储 字单元存放一个字型数据(16位)的内存单元,由两个地址梁旭的内存单元组成。高地址存高位字节,低地址...

  • DS和[address]

    DS和[address] CPU要读写一个内存单元时,必须要先给出这个内存单元的地址,在8086中,内存地址由段地...

  • 汇编(四)

    DS和[address] CPU要读写一个内存单元时,必须要先给出这个内存单元的地址,在8086中,内存地址由段地...

  • DS和[address]

    DS和[address] CPU要读写一个内存单元时,必须要先给出这个内存单元的地址,在8086中,内存地址由段地...

  • 汇编语言_04

    DS和[address] CPU要读写一个内存单元时,必须要先给出这个内存单元的地址,在8086中,内存地址由段地...

  • iOS逆向-汇编(四)

    DS和[address] CPU要读写一个内存单元时,必须要先给出这个内存单元的地址,在8086中,内存地址由段地...

  • 汇编(四)

    DS和[address] CPU要读写一个内存单元时,必须要先给出这个内存单元的地址,在8086中,内存地址由段地...

网友评论

      本文标题:有一数据存放在内存20000H单元中,现给定段地址为SA,若想用

      本文链接:https://www.haomeiwen.com/subject/rniwvftx.html