指令系统的寻址方式
- 指令与指令系统
- 指令
- 指令的基本构成
- 指令格式
- 指令中的操作数类型
- 立即操作数
- 寄存器操作数
- 存储器操作数
- 指令的执行时间
- 指令系统
- 指令的兼容性
- 指令对操作数的寻址方式
- 立即寻址
- 直接寻址
- 段重设
- 寄存器直接寻址
- 寄存器间接寻址
- 寄存器相对寻址
- 基址——变址寻址
- 基址——变址——相对寻址
- 隐含地址
- 总结与升华
- 个人介绍
指令与指令系统
指令
控制计算机完成指定操作并能够被计算机所识别的命令。
指令的基本构成
指令中应包含的信息:
- 执行的操作——操作码
- 运算数据的来源——指令的操作对象
- 运算结果的去向——指令的操作对象
指令格式
- 零操作数指令: 操作码 (例:HLT)
- 单操作数指令: 操作码 操作数(例:INC DI)
- 双操作数指令: 操作码 操作数,操作数(例:ADD AX,BX)
指令中的操作数类型
- 立即操作数:表征参加操作的数据本身,操作数存在操作码之后,它作为指令的一部分存在代码段中。
- 寄存器操作数:参加操作的数在CPU的通用寄存器和段寄存器中。
- 存储器操作数:参加运算的数在内存中。
其中,寄存器操作数和存储器操作数可以表征数据存放的地址
立即操作数
例:
MOV AX,1234H
MOV BL,22H
- 立即数只能作为源操作数
- 立即数的字长可以是1字节或2字节
- 立即数可以是无符号或带符号数
寄存器操作数
例:
MOV AX,BX
MOV DL,CH
- 寄存器操作数既可以作为源操作数,也可以用作目标操作数。
- 通用寄存器通常用来存放参加运算的数据,或数据所在存储器单元的偏移地址。
- 段寄存器用来存放当前操作数的段基地址。
- 仅有个别指令将标志寄存器FLAGS作为指令的操作数。
存储器操作数
例:
MOV AX,[1200H]
[ ]中的内容是存放操作数的内存单元的偏移地址。
- 参加运算的数据是存放在内存中的。
- 存储器操作数在指令中既可作为源操作数,也可作为目标操作数。
- 一般情况下,若指令中没有明确指出操作数所在段,则CPU就采用默认的段寄存器来确定操作数的段基地址。
- 存储器操作数的偏移地址可以通过不同的寻址方式由指令给出。
指令的执行时间
- 指令的字长影响指令的执行速度。
- 不同指令,执行时间有较大的差别
- 对不同的操作数,指令执行的时间不同:
指令系统
一台计算机能够识别的所有指令的集合称为该机的指令系统。
指令的兼容性
同一系列机器的指令都是兼容的。
指令对操作数的寻址方式
寻址方式是寻找操作数所在地址的方法,讨论的对象主要是源操作数。
操作数可能的来源或存放处:
- 由指令直接给出
- 寄存器
- 内存单元
立即寻址
指令中的源操作数是立即数,操作数存在操作码之后。
MOV AX, 3102H这条指令的含义是将3102H这个立即数赋值给AX:
- AH: 31H
- AL: 02H
直接寻址
指令中直接给出存储器操作数的16位偏移地址,默认在数据段DS中。
段重设
例:
MOV BL,ES:[1200H]
上面的指令表示将附加段ES中偏移地址为1200H单元的内容送到BL寄存器中。
寄存器直接寻址
操作数在CPU内的寄存器中。
寄存器间接寻址
寄存器的内容为存放操作数的内存单元的偏移地址。
此时寄存器中的内容不再是操作数本身,而是存放数据的偏移地址,操作数本身在内存储器中。
寄存器相对寻址
存放操作数的内存偏移地址(EA)为间址寄存器的内容加上8位或16位的位移量。
相对寻址主要用于存取表格或一维数组中的元素。
在汇编语言中,相对寻址指令的书写格式允许有几种不同的形式。例如,以下几种写法实质上是完全等价的:
MOV AL, DATA[SI]
MOV AL, [SI]DATA
MOV AL, DATA+[SI]
MOV AL, [SI]+DATA
MOV AL, [SI+DATA]
MOV AL, [DATA+SI]
基址——变址寻址
操作数的偏移地址为一个基址寄存器(BX或BP)的内容 + 一个变址寄存器(SI或DI)的内容
- 基址寄存器为BX,默认在数据段
- 基址寄存器为BP,默认在堆栈段
该寻址方式允许段重设,且与相对寻址方式一样,主要用于一维数组操作。
基址——变址——相对寻址
操作数的偏移地址为基址寄存器内容+变址寄存器内容+位移量
- 操作数的段地址由选择的基址寄存器决定,且允许段重设。
基址变址相对寻址方式主要用于二维表格操作。
基址-变址-相对寻址指令也可以表示成多种形式:
MOV AX, DATA[SI][BX]
MOV AX, [BX+DATA][SI]
MOV AX, [BX+SI+DATA]
MOV AX, [BX]DATA[SI]
MOV AX, [BX+SI]DATA
隐含地址
指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中。
例:
MUL BL ;AL×BL AX
总结与升华
个人介绍
- 北京联合大学 机器人学院 自动化专业 2018级 本科生 郑博培
- 百度飞桨开发者技术专家 PPDE
- 深圳柴火创客空间 认证会员
- 百度大脑 智能对话训练师
- 阿里云 DevOps助理工程师