汇编语言(第四版)检测点2.2 习题解答

检测点2.2

(1)给定段地址为 0001H,仅通过变化偏移地址寻址,CPU的寻址范围为  00010H 到 1000FH  。解析:内存地址 = 段地址(二进制) << 4 + 偏移地址 

                偏移地址变化范围 0000H ~ FFFFH

                故内存地址最小为 00010H + 0000H = 00010H

                    内存地址最大为 00010H + FFFFH = 1000FH

(2)有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为 1001H ,最大为 2000H

  解析:段地址 = (内存地址 - 偏移地址) >> 4   (可能会丢失精度)

         我们这里用内存地址计算段地址时,计算方法要有所改变。

        大家注意到没有,最后计算段地址时,还要右移四位,这就导致了内存地址的后四位在右移的过程中可能会发生精度丢失,进而得出错误的段地址。

        故在计算(内存地址 - 偏移地址) 的结果时,后四位一定是0,否则在右移过程中就可能会发生精度丢失

        那么如何保证(内存地址 - 偏移地址) 的结果后四位一定是0呢?很简单,只需要内存地址的后四位等于偏移地址的后四位,其余不变。

        之前我们认为偏移地址变化范围 0000H ~ FFFFH,现在要通过内存地址计算段地址,内存地址的后四位等于偏移地址的后四位 ,故偏移地址的变化范围是最小0000H,最大FFF0H

        故段地址最小为 (20000H - FFF0H) >> 4 = 1001H

        段地址最大为 (20000H - 0000H) >> 4 = 2000H 

以下是我之前错误的理解方式:

             偏移地址变化范围 0000H ~ FFFFH

             故段地址最小为 (20000H - FFFFH) >> 4 = 1000H

                但是,当段地址为 1000H时 内存地址 = 1000H << 4 + FFFFH = 1FFFFH

                是无法寻址到 20000H 内存单元的,很显然是在右移过程地址精度丢失了

                所以段地址要 +1 以弥补右移过程中丢失的精度才能寻址到 20000H

                即段地址最小为 1001H

                段地址最大为 (20000H - 0000H) >> 4 = 2000H 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值