检测点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 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:}
咸鱼小明 发表于 2020-6-5 21:57
20000H=SAX16+FFFFH
2000H=SA+FFFFH/16
2000H=SA+65535/16
因为16进制的话实际要除以10h 20000H=SA+FFFFH/16
为什么FFFFH/16?
许默沉 发表于 2020-8-25 11:25
20000H=SA+FFFFH/16
为什么FFFFH/16?
其实他是向右移了一位
所以 不是 20000H 而是 2000H 了 ;) 2000H=SA+FFFFH/16
2000H=SA+65535/16
2000H=SA+4095
2000H=SA+FFFH
感觉中间的两行可以省略 16进制应该可以之间移位 咸鱼小明 发表于 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 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: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取最大就有问题
“或许” 发表于 2020-10-27 01:05
有个很大的疑惑
20000H=SAX16+FFFFH
20000H-FFFFH=SAX16
朋友进制转换可不是单纯地除以一个16噢
是多次除16得到的
整除16 再用余数除16 这样过来的哈哈哈
举个反例 十进制的17 你转成 16进制 难道都转不了? ArmandXiao 发表于 2020-10-27 01:23
朋友进制转换可不是单纯地除以一个16噢
是多次除16得到的
整除16 再用余数除16 这样过来的哈哈哈
感谢,刚才的确发现了一些问题,1001H的结果是对的因为我们算的是最值要进一位 ArmandXiao 发表于 2020-10-27 01:23
朋友进制转换可不是单纯地除以一个16噢
是多次除16得到的
整除16 再用余数除16 这样过来的哈哈哈
我刚刚的疑问主要是当CS取1001H时PS取值是FFF0H, “或许” 发表于 2020-10-27 01:36
我刚刚的疑问主要是当CS取1001H时PS取值是FFF0H,
啊啊啊好滴 没有仔细看 抱歉:) 第二题应该这么样更好理解:
若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。 不错不错
页:
[1]