汇编指令的基本知识
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 堆栈常⽤来:临时存放数据,传递参数,保存和恢复寄存器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论