社区
汇编语言
帖子详情
●●●一个IP寄存器如何知道下一条指令长度的问题!请各位指教●●●
1423567
2005-09-05 11:07:23
在8088/8086的CPU逻辑结构中
我们都知道每当一条指令执行以后IP寄存器的值会自动指向下一条指令的首地址,然后CPU的BIU部件就会去刚内存地址去读指令,我的问题也就在这里,他只知下一条指令始地址,并不知道下一条指令有多长有多少个字节。程序加载到内存中后指令也都是以2进制保存的,每条指令长度也都是不一样的
CPU怎么知道下一条指令的长度是多少?
感谢各位大侠的赐教!谢谢!解决马上给分!大家多给说说~
...全文
508
5
打赏
收藏
●●●一个IP寄存器如何知道下一条指令长度的问题!请各位指教●●●
在8088/8086的CPU逻辑结构中 我们都知道每当一条指令执行以后IP寄存器的值会自动指向下一条指令的首地址,然后CPU的BIU部件就会去刚内存地址去读指令,我的问题也就在这里,他只知下一条指令始地址,并不知道下一条指令有多长有多少个字节。程序加载到内存中后指令也都是以2进制保存的,每条指令长度也都是不一样的 CPU怎么知道下一条指令的长度是多少? 感谢各位大侠的赐教!谢谢!解决马上给分!大家多给说说~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
大熊猫侯佩
2005-09-07
打赏
举报
回复
你可以参考 计算机体系结构 指令的编码 一章。
1423567
2005-09-06
打赏
举报
回复
谢谢楼上的回复!据我知道的指令列队也就是你上面说的(缓冲区)8086是里是有6个字节
8088有4个字节,这是我所知道的。
那问题就在这里 我们都知道每条指令的机器码长度都是不同的有的可能2个字节也可能3个字节 然后我们再看8086的结构每次读入6个字节到缓冲区里 这跟我前面说的每条指令长度不符合了
CPU又怎么辨别呢?
我看了8086的逻辑结构图上 指令列队的下一个处理器件就是EU 会不会在这里做了什么?
请各位指教!
谢谢!
zara
2005-09-06
打赏
举报
回复
cpu 不是读入下一条指令的完整的长度的, 而是它有个指令缓冲池, 大小是固定的, 即一次读入的长度是一定的, 缓冲池空了的时候就再次读入. 当前指令的长度是由解码器部分来确定完成的, 除了转移类的指令外, 后续的被认为是下一条指令; 如果是转移类指令, 包括 jmp/j??/call 之类的, 指令缓冲池会被清空, 再次读入新的目标处的指令
1423567
2005-09-06
打赏
举报
回复
也先谢谢楼上的回复,我明白了一点 你的意思就是说 “ 知道了操作码,就可以确定当前指令的长度” 我想知道一下处理这个部件是否是EU呢? 希望各位有啥就补充点。没问题了我就想结帖了!
我的QQ:346749130 希望大家多多探讨
liangbch
2005-09-06
打赏
举报
回复
1
所有的x86指令的第一个字节都是操作码(有的第二个字节也是操作码),操作码包含了3部分信息,1.作什么操作,2。操作数(或寄存器)是什么。3.操作数(或者寄存器)的宽度是多少,字节,字还是双字。知道了操作码,就可以确定当前指令的长度,进而可以确定下一条指令的地址:
注意,在汇编语言中,相同的指令其操作码并不一定相同,如 指令 mov ax,[si+4], mov ax,[si+1234] 粗看出来,功能,寄存器都是一样。但操作码并不相同,它们的操作码分别是,8B44 和8B84,下面是在debug下反汇编的结果。
138E:0100 8B4404 MOV AX,[SI+04]
138E:0103 8B843412 MOV AX,[SI+1234]
【汇编语言】
寄存器
(CPU工作原理)(五)—— 段
寄存器
以及CS和
IP
【汇编语言】
寄存器
(CPU工作原理)(五)—— 段
寄存器
以及CS和
IP
汇编
指令
长度
的判断
汇编语言(王爽)中,讲CS:I[
寄存器
的地方有这样一则图示: 其中
IP
=
IP
+所读
指令
的字节数。 那么,所读
指令
的字节数应该怎么判断呢? 汇编
指令
长度
与寻址方式有关,规律或原则如下: 一、没有操作数的
指令
,
指令
长度
为1个字节 二、操作数只涉及
寄存器
的的
指令
,
指令
长度
为2个字节 如:mov bx,ax 三、操作数涉及内存地址的
指令
,
指令
长度
为3个
【汇编语言】
寄存器
(CPU工作原理)(六)—— 修改CS,
IP
的
指令
以及代码段
【汇编语言】
寄存器
(CPU工作原理)(六)—— 修改CS,
IP
的
指令
以及代码段
X86 第
一条
CPU
指令
及BIOS Shadow
目录 一、CPU第
一条
指令
计算 二、找到第
一条
指令
所在位置 三、第
一条
指令
的内容 四、BIOS Shadow 一、CPU第
一条
指令
计算 开机时CPU进入实模式,8086以及80286的寻址方式为段
寄存器
左移4位+偏移地址(
IP
中的值)。第
一条
指令
为FFFF0h,位于1M字节的往下第16个字节的地方。而到了80386,段
寄存器
由
一个
段选择子、基地址、
长度
和访问属性构成(80286就有了,不过是
一个
过渡阶段,还是以386为主,资料记载比较多),无论是在实模式还是在保护模式下,...
汇编语言学习笔记一:CS和
IP
寄存器
1、CS是代码段
寄存器
,
IP
是
指令
指针
寄存器
(相当于偏移地址)。修改CS、
IP
的
指令
不同于修改通用的
寄存器
值的
指令
,修改通用
寄存器
的值可以用mov
指令
(mav ax,123),mov
指令
被称为传送
指令
。修改CS、
IP
的
指令
是jmp
指令
。jmp
指令
被称为转移
指令
。 (1)同时修改代码段
寄存器
和
指令
指针
寄存器
,形如jmp 段地址:偏移地址。 jmp2AE3:3,执行后:CS=2AE3H,
IP
=0
汇编语言
21,500
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章