. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
主题 : :  CPU如何知道要读取的指令的长度??  [待解决] 回复[ 9次 ]   点击[ 599次 ]  
rlfrlf
[帖 主] [ 发表时间:2012-03-07 09:19 ] 
荣誉值:0
信誉值:0
注册日期:2011-07-11 19:02
书上说CPU根据CS:IP的地址读取指令,但是CPU如何知道指令是 3个字节,还是 2个字节(⊙o⊙)?
music0564
[第9楼] [ 回复时间:2014-08-26 17:44 ] 
荣誉值: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