|
主题 : : CPU如何知道要读取的指令的长度?? [待解决] |
回复[ 9次 ]
点击[ 598次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2012-03-07 09:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-07-11 19:02 |
书上说CPU根据CS:IP的地址读取指令,但是CPU如何知道指令是 3个字节,还是 2个字节(⊙o⊙)? | | |
|
|
|
|
[第1楼]
[ 回复时间:2012-03-07 21:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
|
|
|
|
|
[第2楼]
[ 回复时间:2012-03-09 23:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
是不是根据操作码来定,每一个操作码都有一个对应的指令,这样,指令的长度就是固定的。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2012-03-13 08:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-07-11 19:02 |
如果是按“操作码”确定的话指令的话,2个字节的操作码如何确定? | | |
|
|
|
|
[第4楼]
[ 回复时间:2012-03-13 22:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2012-03-12 23:30 |
指令不是会被翻译成机器码么,机器码占几个字节,他就几个自己咯 | | |
|
|
|
|
[第5楼]
[ 回复时间:2012-07-03 20:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2012-07-02 23:18 |
一条指令有几个字节是什么时候判断的呢?按理说CPU要从主存物理地址读取内容后才知道指令有几个字节。这个时候数据总线传送几个字节呢?如果不是在数据总线靠主存端有这个判断的单位,数据总线不知道应该传递几个字节
难道数据总线每次只传递一个,CPU判断了指令还不完整,就继续再传一个字节
还是说,数据总线不管指令是几个字节,不停的传,只是CPU只取一条完整指令,多余的内容被丢弃? | | |
|
|
|
|
[第6楼]
[ 回复时间:2013-10-19 23:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-10-08 22:55 |
CPU读取的第一个字节隐含了指令长度,读取后,CPU会对第一字节解码,以判断指令长度 | | |
|
|
|
|
[第7楼]
[ 回复时间:2013-12-07 23:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2009-07-15 11:17 |
回复:[第6楼]
------------------
请教一下具体如何对第一个字节解码,以判断指令长度呢? | | |
|
|
|
|
[第8楼]
[ 回复时间:2014-01-22 10:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2014-01-21 22:13 |
我个人的理解,应为我第二章还没看完,看完后我会纠正我现在的理解,我想,CPU怎么判断,第一如果有这个请求,那么在内存中首先出现该物理地址,第二物理地址=段地址+偏移地址,那么段地址代表起点,偏移地址代表大小,我想cpu判断字节主要是靠通过判断偏移地址的大小来判断的,不知道这样说是不是正确? | | |
|
|
|
|
[第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 | | |