. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  CPU如何知道要读取的指令的长度??  [待解决] 回复[ 9次 ]   点击[ 598次 ]  
rlfrlf
[帖 主]   [ 发表时间:2012-03-07 09:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-07-11 19:02
书上说CPU根据CS:IP的地址读取指令,但是CPU如何知道指令是 3个字节,还是 2个字节(⊙o⊙)?
chinatree
[第1楼]   [ 回复时间:2012-03-07 21:07 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
intel汇编语言程序设计 有讲,我也不大明白。
tomato
[第2楼]   [ 回复时间:2012-03-09 23:54 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
是不是根据操作码来定,每一个操作码都有一个对应的指令,这样,指令的长度就是固定的。
rlfrlf
[第3楼]   [ 回复时间:2012-03-13 08:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-07-11 19:02
如果是按“操作码”确定的话指令的话,2个字节的操作码如何确定?
cy_138
[第4楼]   [ 回复时间:2012-03-13 22:19 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2012-03-12 23:30
指令不是会被翻译成机器码么,机器码占几个字节,他就几个自己咯
cat_mouse
[第5楼]   [ 回复时间:2012-07-03 20:10 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2012-07-02 23:18
一条指令有几个字节是什么时候判断的呢?按理说CPU要从主存物理地址读取内容后才知道指令有几个字节。这个时候数据总线传送几个字节呢?如果不是在数据总线靠主存端有这个判断的单位,数据总线不知道应该传递几个字节

难道数据总线每次只传递一个,CPU判断了指令还不完整,就继续再传一个字节

还是说,数据总线不管指令是几个字节,不停的传,只是CPU只取一条完整指令,多余的内容被丢弃?
nasdak
[第6楼]   [ 回复时间:2013-10-19 23:46 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-10-08 22:55
CPU读取的第一个字节隐含了指令长度,读取后,CPU会对第一字节解码,以判断指令长度
zjkl19
[第7楼]   [ 回复时间:2013-12-07 23:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2009-07-15 11:17
回复:[第6楼]
------------------
请教一下具体如何对第一个字节解码,以判断指令长度呢?
boon
[第8楼]   [ 回复时间:2014-01-22 10:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-01-21 22:13
我个人的理解,应为我第二章还没看完,看完后我会纠正我现在的理解,我想,CPU怎么判断,第一如果有这个请求,那么在内存中首先出现该物理地址,第二物理地址=段地址+偏移地址,那么段地址代表起点,偏移地址代表大小,我想cpu判断字节主要是靠通过判断偏移地址的大小来判断的,不知道这样说是不是正确?
music0564
[第9楼]   [ 回复时间:2014-08-26 17:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-08-21 11:24
转发下面链接的:
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1003&qkSg=2&qID=72355&readSg=1

指令长度与寻址方式有关系,规律或原则如下: 

一、没有操作数的指令,指令长度为1字节。如 
es: 
ds: 
cbw 
xlat 
等。 

二、操作数只涉及寄存器的指令,指令长度为2字节。如 
mov al,[si] 
mov ax,[bx+si] 
mov ds,ax 
等。 

三、操作数涉及内存地址的指令,指令长度为3字节。如 
mov al,[bx+1] 
mov ax,[bx+si+3] 
lea di,[1234] 
mov [2345],ax 
等。 

四、操作数涉及立即数的指令,指令长度为:寄存器类型+2。 
8位寄存器,寄存器类型=1;16位寄存器,寄存器类型=2。如 
mov al,8 ;指令长度为2 
mov ax,8 ;指令长度为3 
等。 

五、跳转指令,分3种情况,指令长度分别为2、3、5字节。 
1、段内跳转,指令长度=(目标地址-指令当前地址)+1 
jmp指令本身占用1个字节。 
(目标地址-指令当前地址)若能用1个字节表示,则占用1个字节,整体指令长度为2字节;如 
0113 jmp 0185 ;0185h-0113h=72h,72h可用1个字节表示 
若需2个字节表示,则占用2个字节,整体指令为3个字节。如 
0113 jmp 0845 ;0845h-0113h=732h,732h需用2个字节表示 
2、段间跳转,指令长度为5字节。如 
jmp 1234:5678
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved