. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->自由讨论区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  cpu怎么知道指令字长?  [待解决] 回复[ 7次 ]   点击[ 771次 ]  
rsice
[帖 主]   [ 发表时间:2008-02-18 12:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-02-18 12:02
mov ax,01的机器码是3个字节,执行此语句后,ip自动加3,我想问cpu怎么知道到内存取3个字节而不是2个或者别的?
dave
[第1楼]   [ 回复时间:2008-02-18 13:04 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2007-11-26 20:27
MOV AX,XX这样的指令经过编译器汇编成机器码后,第一个字节码应该会告诉CPU,这个指令有多长
我猜的,呵呵
psdx
[第2楼]   [ 回复时间:2008-02-20 16:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-02-20 12:46
问题是:
程序读入内存后,理论上应该是一片连续存放的诸如 XX XX XX 的数据 ,CPU是如何识别出哪个字节是指令,哪个字节又是数据的呢?

用debug往内存胡乱写几十个字符,然后再 U 一下这段“代码”,就知道为什么我们会疑惑了。。。。
kalakal
[第3楼]   [ 回复时间:2008-02-21 00:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-02-21 00:17
这个编码是有规定的,基本道理就是以什么样的开头就能推算出有多长
starrynight的学习博客,拨开【汇编迷雾(一)】相同的汇编指令VS不同的机器代码 ,里图说明了问题
mess
[第4楼]   [ 回复时间:2008-02-27 10:13 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
这个是不是说,cpu读取指令的时候,需要先读取第一个字节,然后分析需要后续再读几个字节然后再实现ip增加啊。这样好像不太合理啊?
xiaochong
[第5楼]   [ 回复时间:2008-02-27 14:09 ]   [引用]   [回复]   [ top ] 
荣誉值:45
信誉值:0
注册日期:2007-05-05 09:01
这个问题的解释,可以在 组成原理 中找到答案!

cup 读取 cs:ip 指向的一条指令,通过指令译码器,将一条指令翻译为 微指令 
然后由 微程序控制器 控制并执行此指令的微程序(一条条的微指令),其中有一条微指令
去修改PC(即程序计数器,保存着下一条指令的地址)。

所以CPU 通过 控制器中的指令译码器和微程序控制器来识别一条指令的长度,和修改指向下一条指令的地址。

具体的可以找一本 组成原理 细细查看~!

------------------
注:以上只针对含微程序的cup来说
sysnap
[第6楼]   [ 回复时间:2008-03-18 09:03 ]   [引用]   [回复]   [ top ] 
荣誉值:32
信誉值:0
注册日期:2008-01-15 12:22
反正cpu自动读取下一条指令,在这之间我们也插不上手,怎么记下,有兴趣可以研究一下,继续向下学习了~
chayujin
[第7楼]   [ 回复时间:2008-03-18 10:58 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2007-08-22 13:44
楼主这个问题问得很好啊。
不过这是属于指令编码学的知识,也是汇编最难的内容之一,我们可以很容易在intel cpu程序员手册里查到楼主的答案
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved