ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

汇编中CPU如何确定IP自加的长度

2022-02-08 18:31:26  阅读:289  来源: 互联网

标签:字节 IP jmp 指令 寄存器 长度 自加 CPU


img

指令由操作码和操作数两部分组成。CPU在设计好之后,其指令集就确定了,CPU对每条指令都规定了相应的机器码,不同寻址方式的指令,不同运算的指令,它们的机器码都不相同。CPU刚开始读取指令时并不知道将会执行什么指令,它将指令地址发到地址总线,然后指令将“逐字节”地通过数据总线传送到CPU中,当CPU读取到指令中的操作码(前几个字节)时,就知道了当前指令的长度,于是就知道接下来应该读取多少字节的数据作为一条指令和下一条指令的位置(因为读取指令后,IP会增加)。

其中IP=IP+所读指令的字节数。

那么,所读指令的字节数应该怎么判断呢?

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

一、没有操作数的指令,指令长度为1个字节

二、操作数只涉及寄存器的的指令,指令长度为2个字节

如:mov bx,ax

三、操作数涉及内存地址的指令,指令长度为3个字节

如:mov ax,ds:[bx+si+idata]

四、操作数涉及立即数的指令,指令长度为:寄存器类型+1

8位寄存器,寄存器类型=1,如:mov al,8;指令长度为2个字节

16位寄存器,寄存器类型=2,如:mov ax,8;指令长度为3个字节

五、跳转指令,分为2种情况:

1、段内跳转(指令长度为2个字节或3个字节)

jmp指令本身占1个字节

​ 段内短转移,8位位移量占一个字节,加上jmp指令一个字节,整条指令占2个字节

​ 如:jmp short opr

​ 段内近转移,16位位移量占两个字节,加上jmp指令一个字节,整条指令占3个字节

​ 如:jmp near ptr opr

2、段间跳转,指令长度为5个字节

​ 如:jmp dword ptr table[bx][di]

​ 或 jmp far ptr opr

​ 或 jmp dword ptr opr

参考文章:
汇编指令长度的判断
8086汇编中关于CPU是如何知道每次读取指令的长度的解释

标签:字节,IP,jmp,指令,寄存器,长度,自加,CPU
来源: https://www.cnblogs.com/exungsh/p/15872390.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有