优秀! 发表于 2019-10-5 09:06:17

检测点2.2

(1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为(10)H到(1000)H。
(2)有一数据存放在内存20000H单元中现给定段地址为SA,若想用偏移地址寻到单元。则SA应满足的条件是:最小为(1001)H,最大为(2000)H.
注:(1)物理地址=段地址X16 + 偏移地址
               最小寻址值:物理地址=0001H X16+0H
                                                =0010H+0H
                                                =0010H
                                                =10H
            最大寻址值:物理地址=0001HX16+FFFFH
                                              =0010H+FFFFH
                                              =1000FH
            因此:寻址范围为10H到1000FH
      
   (2)物理地址=段地址X16 + 偏移地址
            偏移地址最大时,SA的值最小
             20000H=SAX16+FFFFH
               2000H=SA+FFFFH/16
               2000H=SA+65535/16
               2000H=SA+4095      
               2000H=SA+FFFH      
                  SA=2000H-FFFH
                  SA=1001H
         偏移地址最小时,SA的值最大
             20000H=SAX16+0H
               2000H=SA+0H/16
               2000H=SA+0H         
                  SA=2000H-0H
                  SA=2000H

咸鱼小明 发表于 2020-6-5 21:57:12

20000H=SAX16+FFFFH
               2000H=SA+FFFFH/16
               2000H=SA+65535/16
               2000H=SA+4095      
               2000H=SA+FFFH      
                  SA=2000H-FFFH
                  SA=1001H
这里为什么要转换成10进制呢?{:5_100:}

urfxssqaq 发表于 2020-6-14 18:35:27

咸鱼小明 发表于 2020-6-5 21:57
20000H=SAX16+FFFFH
               2000H=SA+FFFFH/16
               2000H=SA+65535/16


因为16进制的话实际要除以10h

许默沉 发表于 2020-8-25 11:25:26

20000H=SA+FFFFH/16
为什么FFFFH/16?

ArmandXiao 发表于 2020-9-30 00:08:20

许默沉 发表于 2020-8-25 11:25
20000H=SA+FFFFH/16
为什么FFFFH/16?

其实他是向右移了一位
所以 不是 20000H 而是 2000H 了 ;)

ArmandXiao 发表于 2020-9-30 00:14:12

               2000H=SA+FFFFH/16
               2000H=SA+65535/16
               2000H=SA+4095      
               2000H=SA+FFFH

感觉中间的两行可以省略 16进制应该可以之间移位

chuchumaolu555 发表于 2020-10-16 11:01:44

咸鱼小明 发表于 2020-6-5 21:57
20000H=SAX16+FFFFH
               2000H=SA+FFFFH/16
               2000H=SA+65535/16


因为这个16是10进制的,如果FFFFH 不换算成10进制的65535那么16就应该换算成16进制的10H可以写成:
20000H=SAx16+FFFFH
2000H=SA+FFFFH/10H
2000H=SA+FFFH
SA=2000H-FFFH
SA=1001H

chuchumaolu555 发表于 2020-10-16 11:10:29

ArmandXiao 发表于 2020-9-30 00:14
2000H=SA+FFFFH/16
               2000H=SA+65535/16
               2000H=SA+4095   ...

是的其实2000H=SA+65535/16
               2000H=SA+4095      
两步可以省掉,从 2000H=SA+FFFFH/16 就可以得到2000H=SA+FFFH 其实就是FFFFH向右移动1位{:5_109:}

“或许” 发表于 2020-10-27 01:05:52

本帖最后由 “或许” 于 2020-10-27 01:28 编辑

有个很大的疑惑
20000H=SAX16+FFFFH
    20000H-FFFFH=SAX16
            10001H=SAX16
                     SA=65537/16
                     SA=4096.0625
                     SA=1001H
还有有一个很大的问题:65535/16=4095是错的结果是4095.9375 一个奇数除以一个偶数怎么可能是整数????????
问题是如果IP是FFFFH是SA不管取多少SAX16+FFFFH都没法直接寻址到20000H所以FFFFH取最大就有问题

ArmandXiao 发表于 2020-10-27 01:23:54

“或许” 发表于 2020-10-27 01:05
有个很大的疑惑
20000H=SAX16+FFFFH
    20000H-FFFFH=SAX16


朋友进制转换可不是单纯地除以一个16噢
是多次除16得到的
整除16 再用余数除16 这样过来的哈哈哈

举个反例 十进制的17 你转成 16进制 难道都转不了?

“或许” 发表于 2020-10-27 01:30:39

ArmandXiao 发表于 2020-10-27 01:23
朋友进制转换可不是单纯地除以一个16噢
是多次除16得到的
整除16 再用余数除16 这样过来的哈哈哈


感谢,刚才的确发现了一些问题,1001H的结果是对的因为我们算的是最值要进一位

“或许” 发表于 2020-10-27 01:36:11

ArmandXiao 发表于 2020-10-27 01:23
朋友进制转换可不是单纯地除以一个16噢
是多次除16得到的
整除16 再用余数除16 这样过来的哈哈哈


我刚刚的疑问主要是当CS取1001H时PS取值是FFF0H,

ArmandXiao 发表于 2020-10-27 01:37:21

“或许” 发表于 2020-10-27 01:36
我刚刚的疑问主要是当CS取1001H时PS取值是FFF0H,

啊啊啊好滴 没有仔细看 抱歉:)

justknow123 发表于 2021-1-2 15:17:39

第二题应该这么样更好理解:

若SA*16+0000H>20000H,此时SA有最大值:SA<=(20000H-0000H)/16=2000H


若SA*16+FFFFH<20000H,此时SA有最小值:SA>=(20000H-FFFFH)/16

20000H-FFFFH=10001H,不能被16整除,满足条件的最小值为10010F(画一条数轴就更能方便自己理解了)

所以SA>=1001H。

raymansun001 发表于 2021-1-9 15:53:54

不错不错
页: [1]
查看完整版本: 检测点2.2