第三章:指令系统
3.2寻址方式
3.2.3
- 立即寻址:指定的操作数紧跟在操作码之后,直接存放在代码段中。
(不需要找地址,已经知道数)
如:MOV BL, 56H ; 八位寄存器(H表示十六进制数,一位16进制数占4位,两个就站8位)
MOV AX, 2056H ; 十六位寄存器
MOV ECX, 12345678H ; 三十二位寄存器
2.寄存器寻址:操作数在CPU的寄存器中,而寄存器的名由指令指出。
(我要找的数在寄存器里)
如:INC CL -> (CL+1);
MOV AX, BX;
3.直接寻址:中括号一定是偏移地址。就是在寄存器里直接放[地址]。(段基址默认:DS)
(要找的数就在指令里面)
4.寄存器间接寻址:[寄存器存的内容]是我们要找的存储器的地址(BP不加说明是:SS:堆栈寄存器)
(我要找的数的地址在寄存器里面)
5.相对寄存器间接寻址:(基址的一段加直接地址)EA
6.基址加变址寻址:(基址里面一段加变址的一段合起来的偏移地址)EA
7.相对基址加变址寻址:(三种地址加起来)EA:有效地址effective address(所有加在一起的地址的统称)
3.2.4与跳转有关的寻址方式
物理地址 = 逻辑地址(基址寄存器+变址寄存器+偏移量)+DS/SS左移一位(相当于*16)
3.4.1与传送有关的指令
1.MOV 立即数不能直接送到段寄存器,需要先送到普通寄存器在送到段寄存器。
32位寄存器必须传递32位的立即数,
2.XCHG 交换指令:
3. IN/OUT 输入输出
4.LEA装入有效地址:LDS, LES LFS LGS LSS
5.PUSH压栈/POP出栈 指令 用存储器的数据(具有堆栈特点先进后出原则)
A->all 全部压入栈内
6.标志寄存器不能用MOV移动,有其特有的移动指令
7.查表指令 XLAT ; AL<-((BX)+(AL))
3.5.1加减运算
1.加法运算:ADD OP1 OP2 ; OP1+OP2将结果传入OP1
2.减法运算: SUB OP1 OP2; OP1-OP2结果送OP1
3.5.2
3.借位加法运算:ADC OP1 OP2 ; OP1+OP2+CF传入OP1
4.借位减法运算:SBB OP1 OP2 ; OP1-OP2-CF 传入OP1
3.5.3
1.加一指令:INC SI;地址加一
2.减一指令:DEC
3.加法交换指令:XADD OP1 OP2 ; 先是OP1+OP2给OP1,再把OP1给了OP2
4.变反指令:NEG OP1;即取OP1的相反数。
3.5.4
1.比较指令:CMP OP1 OP2 ; 通过标志位来判断两个数相减后是否有借位来判断大小。