. : : 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