loop 发表于 2011-6-4 19:20:05

关于常见问题点的解答[涉及检测点1.1和2.2、2.3]

本帖最后由 loop 于 2017-1-11 11:23 编辑

为了解答新手的困惑,特推出此贴。

限于篇幅,只讲下经常被提及的问题。

如果是有其它问题不是很清楚的,可以直接短信我。

检测点 1.1的第一题,这是初学者最容易迷糊的。

我们知道1KB=1024Byte,8KB=1024*8=8192Byte。
那么算出地址总线的宽度就套用公式,2的n次方=8192Byte
n就代表地址总线的宽度,只要算出n就行了。 2^10=1024
2^11=2048
2^12=4096
2^13=8192所以这道题的地址总线宽度为13。



检测点 2.1的问题可以自己在DEBUG里调试就知道了。

检测点 2.2的问题,这也论坛上被提问最多的一道题。

先讲下第1小题:
因为偏移地址大小是0000~FFFF,所以用段地址乘以16,在加上最小0000和最大FFFF。 0001H * 16 + 0000 = 00010H
0001H * 16 + FFFF = 1000FH所以这道题的答案是:00010H~1000FH

第2小题:
先套用公式,段地址*16+偏移地址=物理地址
那么我们已经知道了物理地址为20000H

SA = (20000 - 0000H) / 16 = 2000H ;最大值

SA = (20000 - FFFFH) / 16= 10001H :最小值
那么这里就出问题了,10001不能被16整除,也就是段地址不能满足*16+偏移地址= 20000H
所以偏移地址就要发生变化来满足段地址*16+偏移地址=20000H
20000H - FFFF = 10001H
20000H - FFFE = 10002H
20000H - FFFD = 10003H
20000H - FFFC = 10004H
20000H - FFFB = 10005H
20000H - FFFA = 10006H
直到.......
20000H - FFF0 = 10010H
这时10010H满足16的倍数了
物理地址减去最大偏移地址除以16等于最小段地址
20000H - FFF0H/ 16 = 1001H;最小值
所以最小值是1001H,最大值是2000H

注意上面的16是10进制的数,运算时要转化成16进制,也就是10H。



mov ax,bx   ;读入指令缓冲器IP++ (第一次)

sub ax,ax;读入指令缓冲器IP++,(第二次)sub命令把ax值清零了。(等同于ax-ax)

jmp ax;读入指令缓冲器IP++ (第三次)

执行jmp ax后,IP值被ax覆盖,IP==0。(第四次) IP值变化了4次,因为ax=0,jmp命令把ax的值赋值给IP,所以最后IP为0


后续会继续添加,未完待续……

开机中。。。 发表于 2011-6-13 15:22:10

看完了前5章后,在回头看看之前的知识点发现又有所理解,

当时检测点1.1我理解错误,认为是按照bit来计算的,所以用1024*8*8 嘿嘿

检测点2.2 第二题也错了,因为没有遵守 一个原则“段的起始地址也一定要是16的倍数”

检测点2.3错的更离谱,因为还不理解IP是什么,哈哈

温故而知新,谢谢

crazyboy 发表于 2011-6-17 00:01:27

mark一下@@

氨基酸 发表于 2011-6-19 10:53:46

顶楼主,请继续~~~

jrvf 发表于 2011-6-23 17:03:01

谢谢楼主,本来2.3很迷茫,看到楼主的解析,终于懂了

lcj19890112 发表于 2011-6-26 13:12:48

jmp ax 这条指令后,IP还会增加? 我觉得应该是直接改变IP。。。有没有增加IP,待验证……

systmao 发表于 2011-6-26 19:19:17

非常感谢楼主写的如此详细,1.2课后题终于弄明白了。

哮月苍狼 发表于 2011-7-2 15:34:48

可能我很笨,还是半解中。。。。

loop 发表于 2011-7-3 01:28:11

哮月苍狼 发表于 2011-7-2 15:34 static/image/common/back.gif
可能我很笨,还是半解中。。。。

不懂的话,可以发帖提问,如果觉得比较简单,可以直接PM我。
同时也欢迎提问、交流、讨论。

虞无盐 发表于 2012-6-20 15:25:56

楼主好人,答疑解惑。非常感谢,解决了我百思不得其解的问题。

爱人等于爱自 发表于 2012-7-5 21:41:04

这讲解的很详细 强烈支持

理想人生路 发表于 2012-7-17 01:20:35

我有点笨,没理解透mov ax,bx;应该是将bx的值给了ax,bx又不知道是多少,在执行jmp ax时,ip值被ax覆盖,这个能理解,但此时ax不应该就是bx吗,为什么ip==0呢

タ枫ァ恋如一 发表于 2012-7-31 13:16:03

神马叫PM?

书剑☆飘香 发表于 2012-8-2 17:00:44

看了,楼主的分析,又相当于复习了前几章的内容

念,相惜 发表于 2012-8-3 15:30:57

谁给个监测点的链接啊 我怎么找不到啊

cathe 发表于 2012-8-5 08:47:00

mark一下

开火箭路过 发表于 2012-8-11 21:27:27

难得糊涂,感谢鱼哥指点迷津

chanefiso 发表于 2012-8-15 15:15:33

还有些在哪里啊

网络学习 发表于 2012-8-18 00:03:38

俺来学习,多多指教

牡丹花下死做鬼 发表于 2012-8-22 11:14:09

不错   哦 比小甲鱼的详细诶
页: [1] 2 3 4 5 6 7
查看完整版本: 关于常见问题点的解答[涉及检测点1.1和2.2、2.3]