检测点2.2
不知道自己理解的对不对1.
段地址*16+偏移地址=物理地址
段地址0001H*16+偏移地址=物理地址
因为偏移地址最小为0H
所以0010H+0000H=0010H
因为偏移地址最大为FFFFH
所以0010H+FFFFH=1000FH
cpu寻址范围(物理地址)地址最小为0010H最大为1000FH
2.
偏移地址最小为0
偏移地址最大为FFFF
sa*16+FFFFH=20000h
sa=20000H/16-FFFFH/16这里提一下,除以16为右移1位非数学算法
sa=2000H-FFFH
sa=1001
最小值为
sa*16=20000H-0
sa=2000H/16-0/16
所以sa最小值为1001H最大值为2000H 第二道题的最小值我有疑问,我看答案是1001H,而我自己算出来是1000H,我是这样算的:
段地址*16+偏移地址=物理地址
SA*16+EA = 20000h
SA*16 = 20000h - EA
SA = (20000h - EA)/16
EA的范围为0h~FFFFh,SA求最小值,所以EA取最大值FFFFh
即 SA = (20000h - FFFFh)/16
SA = 10001h/16
SA = 1000h
不知道这样算哪里不对,请大家帮忙解惑,谢谢。 JasonSong 发表于 2019-11-18 16:59
第二道题的最小值我有疑问,我看答案是1001H,而我自己算出来是1000H,我是这样算的:
段地址*16+偏移地址 ...
段地址*16+偏移地址=物理地址
段地址sa为1000h的寻址范围是10000h-1ffff
段地址sa为1001h的寻址范围是10010h-2000f
也就是说段地址每增加1那么寻址范围必然是进位的倍数,
如果16进制不好了解那么咱们用10进制来理解
段地址sa为1000h那么十进制是4096,他的寻址范围是65536-131071
段地址sa为1001h那么十进制是4097,他的寻址范围是65552-131087
物理地址20000h那么十进制是131072
那么段地址1000h(十进制4096)是永远不能寻址到20000h(十进制131072)的他的最大寻址地址是1ffff(十进制131071)
从10进制和16进制一对比我们可以看出1000h(十进制4096)至1001h(十进制4097)他的寻址范围十进制就是65536为基址和65552为基址他们之间是相差十进制的16的
所以段地址每增加1那么他的寻址范围就加了16了,所以说段地址*16咱们说的是十进制的16而已也就是说他的进制而已
咱们做个假设这样有利于理解
段地址*10+偏移地址(偏移地址最大为9999)=物理地址
那么就是
1000*10+9999=19999
1001*10+9999=20009
那么寻址到20000就必须是在sa*10的10位内必须包含10001也就是20000-9999
为什么说sa*10的10位内因为段地址每增加1那么寻址的基址就是增加10位(这里只是假设其实是16)
那么10001/10是1000那还余1呢,那也就是说1000是不能寻址到的那么必须进位到1001了
如果可以整除那么就不用进1了
那么如何去计算我的方法是
sa*10=20000-9999
sa=20000/10-9999/10
减数与被减数同时右移不是直接数学计算也就是
sa=2000-999
sa=1001
这里只是用10进制打个比方了解进制和理解他寻址方法和寻址的盲区 108777771 发表于 2019-11-19 19:18
段地址*16+偏移地址=物理地址
段地址sa为1000h的寻址范围是10000h-1ffff
回答的好棒!感谢解答!
本帖最后由 yywsy 于 2019-12-24 17:31 编辑
JasonSong 发表于 2019-11-18 16:59
第二道题的最小值我有疑问,我看答案是1001H,而我自己算出来是1000H,我是这样算的:
段地址*16+偏移地址 ...
因为SA*16并不是数学运算的乘以16,是左移一位,那么根本不存在SA*16=10001H这样一个数,所以EA的最大值只能是FFF0H
所以 SA =(20000H-FFFOH)/16 = 1001H
为甚么偏移地址也要/16
(1)0001H*16+0000H=00010H为最小值
0001H*16+FFFFH=1000FH为最大值
(2)20000H=SA*16+偏移地址
SA*16=20000H-偏移地址
偏移地址范围为0H到FFFFH
SA*16=20000H-0H SA=2000H为最大
SA*16=20000H-FFFFH=10001 16位右移抛掉1 SA最小为1000H
页:
[1]