【计算机组成原理】x86指令系统

目录

一、指令概述

二、指令分类

三、扩展操作码

四、指令寻址

五、数据寻址

六、x86汇编指令


一、指令概述

计算机指令:指示计算机硬件进行某种操作的命令

机器指令:使用二进制编码来表示的计算机指令

  • 能被计算机硬件系统识别并执行的特殊的0/1代码串(机器码)
  • 指定了计算机硬件的某种特定操作,不同计算机硬件能识别并执行的机器码也不同

指令系统:一台计算机的所有机器指令的集合(指令集)

汇编指令:机器指令的助记符

指令集体系架构 ISA:Instruction-Set Architecture

  • 处理所支持的的指令集(汇编指令集及机器指令集)及其操作数的相关信息(寄存器、存储器、I/O 等)
  • 在系统软件设计者与处理器硬件设计者之间提供了一个抽象层,软件设计者依据 ISA 知道如何编写机器语言程序来控制与使用处理器硬件,硬件设计者依据 ISA 来设计微体系结构,并实现能执行机器语言的处理器硬件

指令格式:由操作码(OP)地址码(A)组成

指令信息:指令的功能、操作的对象(源操作数)、操作的结果(目的操作数)、下一条指令地址

  • 操作码指明该指令的功能,也规定了指令格式
  • 地址码包含了源操作数、目的操作数和下一条指令地址

冯诺依曼体系结构:程序代码顺序存放在存储器中

  • 下一条指令地址:总是由程序计数器PC隐含指出
  • PC:存放指令地址(指令在存储器中的地址)
  • 非转移类指令:根据PC取指令,PC自增(指向下一条指令)
  • 转移类指令:根据PC取指令,PC自增(指向下一条指令),分析执行指令,修改PC为要转移到的目标指令的地址(转移指令的地址码为转移目标地址
  • 控制器总能从PC获取下一条指令的地址信息,保证计算机自动高速、循环往复地“取指令、分析指令、执行指令”

指令字:机器指令的二进制编码,也叫机器字

指令字长:一条机器指令中所包含的二进制码的位数,不同计算机的指令字长可能不同

机器字长:计算机一次所处理的二进制数位数

二、指令分类

根据地址码格式分类

根据操作类型进行分类

三、扩展操作码

操作码扩展技术:一种重要的指令优化技术,将不使用的地址码字段扩展为操作码

四、指令寻址

寻址方式:确定本条指令的操作数地址(数据寻址),以及下一条要执行的指令地址(指令寻址)

  • 数据寻址:当前指令的地址码给出
  • 指令寻址:下一条预执行指令的地址(始终有程序计数器PC给出)

顺序寻址方式:PC + "1" -> PC,此处的 “1” 代表一个指令字长

跳跃寻址方式:当程序顺序执行遇到转移指令时,PC就不再是+“1”,而是由本条转移指令的地址码字段给出的跳跃地址,或者由指令的地址码字段经过相对寻址方式计算得出跳跃后的新指令地址,按该地址去取下一条指令。

五、数据寻址

数据寻址:确定本条指令的地址码指明的真实地址

  • 形式地址:指令的地址码字段代码,记作A,不一定是数据的真实地址
  • 有效地址:操作数在存储器中的真实地址,记作EA,由寻址方式和形式地址共同确定

立即寻址

  • 在指令中的地址码处直接给出操作数,即指令的地址码字段为操作数(立即数)
  • 优点:指令的执行速度快
  • 缺点:操作数是指令的一部分,不便于修改
  • 通常用“#”代表立即寻址的寻址特征

直接寻址

  • 指令字中的形式地址A就是操作数的真实地址EA,即 EA = A
  • 优点:取出指令就得到了EA,执行访问主存1次,就得到了操作数,速度较快
  • 缺点:A的位数限制了该指令操作数的寻址范围,操作数的地址不易修改

间接寻址

  • 指令的地址码字段给出的形式地址A不是操作数的真实地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即 EA = (A)
  • 取出指令,就得到了EA在主存的地址,共访问主存2次才得到操作数

寄存器寻址

寄存器间接寻址

隐含寻址

  • 不明显地给出操作数的地址,而是在指令中隐含着操作数的地址
  • 优点:有利于缩短指令字长
  • 缺点:需增加存储操作数或隐含地址的硬件

基址寻址

  • 基址寄存器存放了程序的起始位置,由os管理,其内容无法被程序员修改
  • 优点:便于程序“浮动”,方便实现多道程序并发运行
  • 适用于多用户计算机系统,操作系统给每个用户一个基地址并放入相应的基址寄存器,在程序执行的过程中,以基址为基准自动进行逻辑地址到物理地址的变换

变址寻址

  • 有效地址EA等于指令字中的形式地址A变址寄存器IX的内容之和,即 EA = (IX)+A
  • IX可为变址寄存器专用,也可用通用寄存器作为变址寄存器
  • 变址寄存器是面向用户的,内容可修改(作为偏移量),形式地址A不变(基地址)
  • 变址寻址通常用来对字符串处理、数组运算等这类成组数据处理(在数据处理过程中,设定A为数组的首地址,不断改变变址寄存器的内容,便可很容易形成数组中任一数据的地址,适合编制循环程序)

基址变址寻址

  • 在指令中指定一个基址寄存器和一个变址寄存器,指令中的地址码给出位移量。有效地址由基址寄存器、变址寄存器中的值和位移量三者相加而成。
  • 基址 + 变址,常用于访问二维数组。

​​​​​​

相对寻址

  • 程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址EA,即 EA = (PC)+A,其中A是相对于PC所指地址的偏移量,可正可负,补码表示
  • 优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序“浮动”(一段代码在程序内部的浮动)
  • 相对寻址通常应用于转移指令

 

堆栈寻址

  • 操作数放在堆栈中,隐含使用堆栈指针SP(Stack Pointer)作为操作数地址,即 EA = (SP)
  • 堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出”原则管理的存储区,该存储区中被读/写单元的地址是一个特定的寄存器给出的,该寄存器成为堆栈指针SP
  • 堆栈寻址主要用来暂存中断和子程序调用时现场数据及返回地址

数据寻址方式总结

六、x86汇编指令

x86CPU的寄存器

算术运算指令

逻辑运算指令

转移指令

循环控制指令

函数调用指令

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllinTome

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值