. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->自由讨论区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  CPU 是如何取内存中的指令的?? 疑惑在指令长度不等,是如何实现的。  [待解决] 回复[ 5次 ]   点击[ 589次 ]  
whonos
[帖 主]   [ 发表时间:2009-08-25 14:12 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-08-25 13:59
从机器语言的角度,理解计算机就是把机器指令一条一条的顺序执行。这些指令,先是存储在内存中。CPU指向下条要执行的指令的地址。取指令,执行,程序计数器加1再指向下条指令的地址--再取指令。

   但是,指令是不等长的。CPU在取指令时,是如何实现刚好取的是一条完整的指令长度的字节呢?

   比如,有的指令是两个字节,有的是三个字节。

   
   另外。现在都是32位机器了。 而字节永远代表8位。也就是一个机器字长是四字节了。我记得书上说,存储单元的位数等于机器字长,也就是32位了。

    那么,内存地址应该是按照 存储单元作为基本计数单元的吧??也就是每一个内存地址 指向的是一个四字节的存储单元了吧??
whonos
[第1楼]   [ 回复时间:2009-08-25 14:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-08-25 13:59
另外, 反汇编时,似乎也存在这个问题。
shangzhongyong
[第2楼]   [ 回复时间:2009-08-25 16:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-08-16 15:03
参考
http://topic.csdn.net/t/20041111/19/3544828.html
whonos
[第3楼]   [ 回复时间:2009-08-25 17:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-08-25 13:59
谢谢楼上的。

那链接我看了。 感觉其实里面没有给出答案。

其实,并不是要解释到硬件电路的层次。 我自己想,一条指令。在内存中如果占用几个字节,并且是多个内存地址。那么,CPU在读指令时,应该会根据某个特征码,去判断然后读取对应长度的字节。

就好像,程序计数器,有时候是自动加1,但有时候是自动加2。也许这就是问题所在,可惜只是自己的猜想。没有从书中找到比较可信的答案。
shangzhongyong
[第4楼]   [ 回复时间:2009-08-26 07:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-08-16 15:03
那个链接里给出了一种答案了,要是帖子里不清楚的话,你到我的博客里看看。
yemeishenme
[第5楼]   [ 回复时间:2009-09-19 12:12 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-08-01 14:41
我想应该是这样的。编译时把每条完整的指令 搞成一样的长度。比如都对齐成32位。这样可以每次执行32位的指令了。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved