冻死的鱼鱼 发表于 2014-2-20 19:10:47

汇编前三章的问题

数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件是,最小为什么,最大什么?
反过来,当段地址给定多少,CPU无论怎样变化偏移地址都无法寻到20000单元?
求答求解谢谢各位鱼油了
本人不经常在论坛所以回复慢了   抱歉啊!

无名侠 发表于 2014-2-20 19:56:12

第二个问题好办,SA(段地址)给0
0*10+FFFF(这个是最大的偏移了) = 0xffff(物理地址)
0xffff<0x20000 所以寻址不到。

无名侠 发表于 2014-2-20 20:07:22

第一个问题(所以数值是16进制)
20000是一个物理地址
我们已知一个物理地址=段地址SA*10+偏移地址EA
又因为偏移地址是16位的,所以最大是FFFF
如果要让段地址最小,那么偏移地址就要越大,最大FFFF。
我们设 段地址*10 为X
则 X+FFFF = 物理地址
已知物理地址=20000
那么X=20000-ffff (你用WIndows计算器算算)
那么段地址就是 x/10 (因为我们设X为段地址*10)
s上面就是段地址最小,不过感觉最后的结果计算出来感觉不对 1001/10 ..
如果要让段地址最大,那么偏移地址就要最小 ,先设0。
打开计算器 20000/10 = 2000
一个段寄存器的最大值是FFFF
又因为FFFF>2000
所以 这个地址只需要段寄存器就够了,偏移地址保为0
所以最大是 2000
最小是 1000 (或许有点不准确)

oggplay 发表于 2014-2-20 21:56:40

实地址模式下:

物理地址 = SA * 10H + 偏移地址
可知,物理地址、偏移地址,两者的最低位,必定是相同的。
当物理地址=20000H,偏移地址也只能是:XXX0H,取最大就是 FFF0H。
于是:
SA最小地址 = (20000H - FFF0H) / 16=10010H / 16 = 1001H。
SA最大地址=2000H

冻死的鱼鱼 发表于 2014-2-21 04:15:56

谢谢各位的回复了
页: [1]
查看完整版本: 汇编前三章的问题