微机原理与接口技术——操作数与寻址方式

操作数

在8086汇编语言中,操作数分为三种类型。分别为立即数、寄存器操作数以及存储器操作数。

立即数操作数属于指令中的数,即直接在指令中给出,同时直接保存在代码区,例如指令MOV AL,2345。2345(H)就属于立即数,应该注意,立即数只能用作源操作数,不可用做目的操作数,可类比于C语言中不能给常量赋值的语法规定。
微机原理与接口技术——操作数与寻址方式_第1张图片
寄存器操作数属于CPU中的数,存放在四个通用寄存器AX、BX、CX、DX,四个指针和变址寄存器SI、DI、BP、SP,以及四个段寄存器CS、DS、ES、SS中的操作数。
其中通用寄存器以AX为例,可分为低八位寄存器AL和高八位寄存器AH,即其既可以存放字操作数(16位)又可以存放字节操作数(8位)。指针和变址寄存器只能存储字操作数。段寄存器(16位)用来存放当前操作数的段基地址,一般用于寻址。DX为默认段寄存器。
注意,不允许将立即数传送到段寄存器。

存储器操作数属于存储器中的数,要求EA,一般不允许两个操作数同时为存储器操作数,即存储器内的数据转移需要经过CPU过渡进行。微机原理与接口技术——操作数与寻址方式_第2张图片

寻址方式

寻址方式共有八种,分别是立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对的基址变址寻址、隐含寻址。

立即寻址:操作数为一个常数,直接由指令给出,称为立即数,立即寻址只能用于源操作数。例如 MOV AX,1234
微机原理与接口技术——操作数与寻址方式_第3张图片
直接寻址:指令中直接给出操作数的十六位偏移地址,偏移地址也称为有效地址(EA,Effective Address)。默认段寄存器为DS,但也可以显式指定其他段寄存器——称为段超越前缀。偏移地址也可用符号地址来表示,如ADDR、VAR。
例:MOV AX,[2400]
MOV DX,ES:[2400]
MOV SI,TABLE_PTR
微机原理与接口技术——操作数与寻址方式_第4张图片
寄存器寻址:操作数放在某个寄存器中,源操作数与目的操作数字长要相同,同时寄存器寻址与段地址无关。
例:MOV AX,BX
MOV [3F00H],AX
MOV CL,AL
错误示例:MOV AX,BL
不能想当然以为BL缺省传递给AX低八位,这在汇编语言中是不允许的。

寄存器间接寻址:操作数的偏移地址放在寄存器中。只有SI、DI、BX、BP可作为间址寄存器。
例:MOV AX,[BX]
MOV CL,CS:[DI]

寄存器相对寻址:EA=间址寄存器内容加上一个8位或者16位的位移量。寄存器相对寻址常用于存取表格或一维数组中的元素——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中,或者反之。微机原理与接口技术——操作数与寻址方式_第5张图片
SI、DI、BX默认段寄存器为DS,BP默认段寄存器为SS。
例:MOV AX,[BX+8]
MOV CX,TABLE[SI]
MOV AX,[BP+1000H]

基址变址寻址:操作数的偏移地址由两部分组成,基址和变址。
基址由基址寄存器(BX、BP)提供,变址由变址寄存器(SI、DI)提供。由一个基址寄存器的内容和一个变址寄存器的内容相加得到操作数的偏移地址,成为基址变址寻址。
在这里插入图片描述
例:MOV AX,[BX][SI]
MOV AX,[BX+SI]
MOV AX,DS:[BP][DI]

相对基址变址寻址:在基址变址寻址基础上再加一个相对位移量。
在这里插入图片描述

微机原理与接口技术——操作数与寻址方式_第6张图片
隐含寻址:
指令操作数是隐含的,在指令中未显式的指明。
例:MUL BL
在这里插入图片描述
指令隐含了被乘数AL及乘积AX,类似的指令还有DIV、CBW、MOVS等。

你可能感兴趣的:(微机原理与接口技术——操作数与寻址方式)