1 指令
1.1 定义:指令由操作码和操作数两部分组成;
a 操作码:
操作码说明计算机要执行那种操作,它是指令中不可缺少的组成部分。
每种指令的操作码:用一个唯一的助记符表示(指令功能的英文缩写);对应着机器指令的一个二进制编码。
b 操作数:
操作数是 指令执行的参与者,即各种操作的对象。
指令中的操作数:可以是一个具体的数值;可以是存放数据的寄存器;还可以是指明数据在主存位置的存储器地址。
1.2 格式: 操作码 操作数1,操作数2 ;注释
a 操作数1:称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果。
b 操作数2:称为源操作数src, 它表示参与指令操作的一个对象。
c 分号后的内容是对指令的解释
1.3 表达
r8: 任意一个8位通用寄存器 (AH AL BH BL CH CL DH DL)
r16:任意一个16位通用寄存器(AX BX CX DX SI DI BP SP)
r32:任意一个32位通用寄存器(EAX EBX ECX EDX ESI EDI EBP EDI)
reg:通用寄存器
seg:段寄存器(CS DS ES SS)
m8: 一个8位存储器操作数内存单元
m16:一个16位存储器操作数内存单元
m32:一个32位存储器操作数内存单元
mem:内存单元
i8: 一个8位立即数
i16:一个16位立即数
i32:一个32位立即数
imm:立即数
dest:目的操作数(操作数1)
src: 源操作数(操作数2)
1.4 多种表达方式
同一寻址方式可以写成不同的形式:
MOV AX,[BX][SI] ;等同于 MOV AX,[BX+SI]
MOV AX,12[BX] ;等同于 MOV AX,[BX+12]
MOV AX,12[BX][SI];等同于 MOV AX,12[BX+SI]或 MOV AX, [BX+SI+12]
2 寻址方式
2.1 立即数寻址
指令中的操作数直接存放在机器代码中,紧跟在操作码之后,通常用于对通用寄存器或内存单元赋值
2.2 寄存器寻址
指令中的操作数直接存放在CPU的内部寄存器reg中,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。
2.3 存储器寻址
指令中给出操作数的主存地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中
8086设计了多种存储器寻址方式:
a 直接寻址方式
b 寄存器间接寻址方式
c 寄存器相对寻址方式
d 基址变址寻址方式
e 相对基址变址寻址方式
2.4 直接寻址
有效地址在指令中直接给出,默认的段地址在DS段寄存器,可使用段超越前缀改变
2.5 寄存器间接寻址
有效地址存放在基址寄存器BX或变址寄存器SI,DI中,默认的段地址在DS段寄存器,可使用段超越前缀改变
2.6 寄存器相对寻址
有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI
段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS,可用段超越前缀改变
2.7 基址变址寻址
有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成
段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS,可用段超越前缀改变
2.8 相对基址变址寻址
有效地址是基址寄存器(BX或BP)、变址寄存器(SI或DI)与一个8位或16位位移量之和
段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS,可用段超越前缀改变
3 栈
堆栈是一个先进后出FILO的主存区域,位于堆栈段中;SS段寄存器记录其段地址
堆栈只有一个出口,即当前栈顶,栈顶是地址较小的一端(低端),栈底不变
用堆栈指针寄存器SP指定
3.1 基本操作
只有两种基本操作:进栈和出栈,对应的指令:PUSH和POP
PUSH:进栈指令先使堆栈指针SP减2,然后把一个字 操作数存入堆栈顶部,
原型:PUSH r16/m16/seg
POP:出栈指令把栈顶的一个字 传送至指定的目的操作数,然后堆栈指针SP加2
原型:POP r16/m16/seg
3.2 特点
a 堆栈操作的单位是 :字,进栈和出栈只对 字量
b 字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节
c 堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据
d 堆栈常用来:临时存放数据,传递参数,保存和恢复寄存器