. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  留下纪念  [已解决] 回复[ 3次 ]   点击[ 568次 ]  
ai_cr
[帖 主]   [ 发表时间:2008-09-16 09:30 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:2
注册日期:2008-09-04 17:29
我写这些的目的是想让这本书更完美,让我推荐它的时候不再犹豫。一本好书应该是经的起推敲。
其实如果大家真的认真看书并动脑去想的话,我想大家也能发现这些问题。引一句古语:“尽信书不如无书。”
语句1,P4最后一行:CPU要从内存中读数据,首先要指定存储单元的地址。
语句2:P7第5行:16根数据总线一次可传送2个字节。
语句3,P18最后一行:在8086内部,能够一次性处理、传输、暂时存储的信息的最大长度是16位的。
语句4:P24第4行:8086机中,任意时刻,CPU将CS:IP的指向的内容当作指令执行。
PS:我怎么就看这句中的“任意时刻”不爽,你可知CALL和JMP指令。
语句5:P26第2行:图2.15中发生的变化是从内存20000H单元开始存放的机器指令B8 23 01 通过数据总线被送入CPU。
PS:它怎么知道要传3个字节?3个字节一次能传完么?那传第二次时是哪来的地址啊?(参见语句1)网上有人说指令的首字节包含着指令的长度所以CPU知道指令的长度,我真想拿刀砍他,照他的理论CPU每次要先读一个字节并通过这个字节算出指令的长度,然后再去跟据长度再读指令或读指令后面的数据。。。。。就算我不砍他,CPU的设计者也得拿刀砍他。而事实上这样的才子网上真的很多,这么会自圆真说,那干嘛还要来搞底层啊,也不怕后人耻笑。
语句6:P26:图2.16中有了进一步的变化,输入输出控制电路将机器指令B8 23 01 送入指令缓冲器。
PS:哇,3个字节,8086存得下么?(参见语句3)
语句7:P27首行:图2.17中所示为读取一条指令后,IP的值自动增加,以使CPU可以读取下一条指令。因当前读入的指令 B8 23 01 长度为3个字节,所以IP中的值加3。此时,CS:IP指向内存单元2000:0003。
PS:看到这我明白了,书中的CPU是王老师设计的。
后面的错误我就不一一例举了,如果你想反驳我,那我很高兴,但请不要用那些自欺欺人的字句,因为它们经不起推敲,我希望你能用强而有力的事实依据说话,这样才能让人们信服。
liuminghemama2
[第1楼]   [ 回复时间:2008-09-23 13:31 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2008-03-20 18:42
我只是一个没学习过任何编程语言的菜鸟..我从我的角度来认识下这些问题.

语句1,P4最后一行:CPU要从内存中读数据,首先要指定存储单元的地址。 

大家都知道,内存里存放是将要执行的程序的代码..如果不知道某个内存单元所在的地址,CPU依靠什么去判断?那就如,给你一把我家的钥匙,叫你去我家拿一样东西,但是我偏偏不告诉你我家的地址在哪里,请问你怎么找?


语句2:P7第5行:16根数据总线一次可传送2个字节。 

我就不知道这个错在了哪里,8位机有8根数据总线,一次可以传送8位二进制数字(也就是一个字节),而16位因为有16根数据总线,所以理所当然的可以传送二个字节..

语句3,P18最后一行:在8086内部,能够一次性处理、传输、暂时存储的信息的最大长度是16位的。 

数据总线的宽度决定了CPU和外界的数据传送速度..
难不成16跟数据总线可以传送20位甚至32位的二进制数字?

语句4:P24第4行:8086机中,任意时刻,CPU将CS:IP的指向的内容当作指令执行。 

这本书的内容特点讲究的是什么?并且即使你执行CALL和JMP跳转指令的话,CPU最终认别的又是什么?
就像你出栈入栈的时候,CPU又看的是什么??

语句5:P26第2行:图2.15中发生的变化是从内存20000H单元开始存放的机器指令B8 23 01 通过数据总线被送入CPU。 

这个我不清楚..问下其它的人..


语句6:P26:图2.16中有了进一步的变化,输入输出控制电路将机器指令B8 23 01 送入指令缓冲器。 
看过这本书的人也不是一个二个..如果勘错的话,也不会发现不到这种重大的毛病..
所以说肯定是可以实现的..


句7:P27首行:图2.17中所示为读取一条指令后,IP的值自动增加,以使CPU可以读取下一条指令。因当前读入的指令 B8 23 01 长度为3个字节,所以IP中的值加3。此时,CS:IP指向内存单元2000:0003。 

这个我觉得无需说了,动手自己在DEBUG下实验下吧..你就可以知道答案了.
ai_cr
[第2楼]   [ 回复时间:2008-09-29 23:12 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:2
注册日期:2008-09-04 17:29
引用:
大家都知道,内存里存放是将要执行的程序的代码..如果不知道某个内存单元所在的地址,CPU依靠什么去判断?那就如,给你一把我家的钥匙,叫你去我家拿一样东西,但是我偏偏不告诉你我家的地址在哪里,请问你怎么找? 
---------------------------------------------------------
我并没说前三句错。
你知道这点就好。那我问你一个CPU。不改变CS和IP。它如何一次性读3个字节?
答案,地址累加器。书中并没指出这一点。容易让读者产生我以前的误解。
指令缓冲器,我查资料的结果是:指令缓存队列,长6个字节(8086)。书中也没指出这点。
JMP指令和CALL等指令行过程:
1、读入该指令,并改CS(不跨段则不改)和IP指向下一条指令。
2、执行指令,指令执行过程会改IP或(CS和IP)。
1和2中间这个时刻算不算任意时刻?
书中还写到,在指令执行完后才会改CS和IP。事实上是在读入指令后就改了。
以上是我在网上查资料所得,希望对大家能有帮助,这个问题困扰了我很久,不过查资料的过程中我学到了很多。花那些时间我认为是值得的。大家有兴趣也可以去网上查查资料。不过这方面的资料比较难查,建议大家先看看搜索技巧。呵呵。我想应该可以结贴了。事实上以前我是在很多地方误解了这本书。有些过激的言语希望大家理解。
ai_cr
[第3楼]   [ 回复时间:2008-09-29 23:14 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:2
注册日期:2008-09-04 17:29
此贴由 贴主 于 [ 2008-09-29 23:14 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(liuminghemama2):4分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved