汇编指令合集

汇编指令合集

寄存器组

数据寄存器:
AX:累加器
BX:基址寄存器
CX:计数寄存器
DX:数据寄存器
变址寄存器:
SI:源变址寄存器
DI:目的变址寄存器
指针寄存器:
BP:基址指针
SP:堆栈指针
专用寄存器:
指令指针:
IP
标志寄存器:
CF:进位标志,最高位有效位进/借位置 1
PF:奇偶标志,预算结果中 1 为 0 或偶数置 1
AF:辅助进位标志,第三位(低半字节)进位时置 1(BCD 码中是否进行十进制调
整的依据)
ZF:零标志,运算为 0 置 1
SF:符号标志,记录运算结果符号(最高位),为负置 1
OF:溢出标志,运算结果溢出置 1
段寄存器:
CS, DS, SS, ES

寻址方式

立即寻址: MOV AL,3000H
寄存器寻址: MOV DS, AX ; MOV AL, BH
存储器寻址:
1.直接寻址: MOV AX,【2000H】; MOV VALUE, AX; MOV AL, VARW/【VARW】;
2.寄存器间接寻址: MOV AX,【SI/BP】; SI,DI,BX->DS; BP->SS
3.寄存器相对寻址: MOV AX,【SI+100H】
4.基址变址寻址: MOV AX,【BX+SI】
5.相对基址变址寻址: MOV AX,【BX+SI+100H】
段内直接寻址: JMP SHORT/(NEAR PTR) NEXT
段内间接寻址: JMP TABLE[BX]---->DS*16+TABLE+BX
段间直接寻址: JMP FAR PTR NEXT
段间间接寻址: JMP DWORD PTR [BX]

数据传送指令

1)通用数据传送指令:
1.MOV:目的操作数不能用立即数和 CS 段寄存器;两个操作数数据类型要相同;两个
操作数不能同时为段寄存器;指令指针 IP 不能做操作数;立即数不能直接传给段寄存器(除
立即数作为源操作数的情况,两个数必须要有一个寄存器); 不允许两个存储单元直接传送
2.XCHG:交换指令; XCHG OPD, OPS; 段寄存器和立即数不能作为操作数
3.堆栈指令:先进后出,后进先出
(1)进栈指令 PUSH: PUSH OPS; SP<-SP-2, (SP)<-操作数
(2)出栈指令 POP: POP OPD;操作数<-(SP) ; SP<-SP+2
(3)所有寄存器进栈指令 PUSHA: 次序为 AX,CX,DX,BX;指令执行前的 SP,BP,SI,DI
(4)所有出栈指令 POPA:次序为 DI,SI,BP,SP;指令执行前的 BX,DX,CX,AX
最后两个不影响标志位。
2)累加器专用传送指令:仅限于 AX 或 AL
1.输入指令 IN: IN AL/X, PORT/DX (AL) <-(PORT)<-(0-255 )->(AL)<-( ( DX ) )
2.输出指令 OUT: OUT PORT/DX, AL/X
3.换码指令 XLAT:有两个隐含操作数 BX,AL; XLAT OPR 或 XLAT; AL<-BX+AL
3)地址传送指令:
1.有效地址送寄存器指令 LEA: LEA REG, OPS; OPS 为内存操作数(存储器操作数);
REG 为 16 位
2.指针送寄存器指令及相应段寄存器指令:
(1) LDS: LDS REG, OPS; OPS 为内存操作数; REG 不能用段寄存器;不影响
标志位;送段地址(DS)和偏移量
(2) LES: LES REG, OPS;段地址送 ES,其他一样
4)标志寄存器传送指令:
1.标志送 AH 指令 LAHF: LAHF; AH<-FLAGS 的低字节(低八位, SF,ZF,AF,PF,CF)
2.AH 送标志寄存器指令 SAHF: SAHF;逆 LAHF;影响低八位标志位,对 OF,DF,IF 无影

3.标志进栈指令 PUSHF: SP<-SP-2; (SP+1, SP)<-FLAGS;不影响标志位
4.标志出栈指令 POPF: FLAGS<-SP+1,SP; SP<-SP+2;影响标志位

算术运算指令

1)加法指令:
1.ADD 加法
2.ADC 带进位加法: 主要用于多字节运算中; ADC OPD, OPS; OPD<-OPS+OPD+CF
3.INC 加一
2) 减法指令:
1.SUB 减法
2.SBB 带借位减法: SBB OPD, OPS; OPD<-OPD-OPS-CF
3.DEC 减一
4.NEG 求补: 按位取反, 末位加一; 改变操作数符号, 取操作数绝对
5.CMP 比较
3) 乘法指令:
1.MUL 无符号数乘法: 默认操作数在 AL, AX; 8 位二进制相乘放 AX, 16 位相乘, 高
16 放 DX, 低 16 放 AX
2.IMUL 带符号数乘法
4) 除法指令:
1.DIV 无符号数: 16 位被除数在 AX, 8 位除数为源操作数, 结果 8 位商在 AL, 8 位余
数在 AH; 32 位在 DX:AX, 16 源, 16 商在 AX, 余数 DX
2.IDIV 有符号数
5) 类型转换指令:
1.字节扩展为字指令 CBW: CBW; AL 扩展到 AH
2.字扩展为双字指令 CWD: AX 到 DX
6) 十进制调整指令:
1.加法的十进制调整指令 DAA: AF=1 或 AL(0-3) =A-F, AL<-AL+06H 且 AF=1
CF=1 或 AL(4-7)=A-F, AL<-AL+60H 且 CF=1
2.减法的十进制调整指令 DAS: AF=1 或 AL 中低 4 位大于 9, AL<-AL-06H 且 AF=1
AL>=0A0H 或 CF=1, AL<-AL-60H 且 CF=1

逻辑指令

1) 逻辑运算指令:
1.与 AND: 清除目的操作数中与源操作数置 0 的对应位: 清 0
2.或 OR: 用于设置目的操作数中与源操作数置 1 的对应位: 置 1
3.非 NOT: 取反
4.异或 XOR: 将目的操作数中与源操作数置 1 的对应位取反
5.测试指令 TEST: 进行逻辑与操作, 设置相应的标志位, 不保存运算结果
2) 移位指令:
1.逻辑左移 SHL: 移位后空出的位补 0; 左移一位乘 2
2.逻辑右移 SHR: 移位后空出的位补 0: 右移一位除 2
3.算术左移 SAL: 目的操作数低位向高位移, 空出的低位补 0
4.算术右移 SAR: 目的操作数高位向低位移, 空出的高位补最高位(符号位)
3) 循环移位指令:
1.循环左移 ROL: 移出的位要进入 CF 和空出的位
2.循环右移 ROR: 移出的位要进入 CF 和空出的位
3.带进位的循环左移 RCL: 用原 CF 的值补空出的位, 移出的进 CF
4.带进位的循环右移 RCR: 用原 CF 的值补空出的位, 移出的进 CF

串处理指令

1) 与 REP 配合工作的 MOVS/STOS/LODS 的指令:
1.重复前缀指令 REP: 重复其后的字符串操作指令; REP MOVS/STOS/LODS
(1) 判断 CX=0
(2) CX=0 结束重复
(3) 否则, CX=CX-1, 并执行其后指令, 完成后转(1)
2.字符串传送指令: MOVS DST, SRC; MOVSB(字节) ; MOVSW(字)
(1) DS:[SI]->ES:[DI]
(2) SI<-SI±1,DI<-±1 字节操作; 字操作±2
3.置字符串数据指令: STOS DST; STOSB; STOSW
ES:[DI]<-AL, DI<-DL±1(字节操作)
4.取字符串数据指令: LODS SRC; LODSB; LODSW
DS:[SI]->AL; SI±1->SI
5.串输入指令: INSB: ES:[DI]<-((DX)); DI<-DI±1
INSW
6.串输出指令: OUTSB: ((DX))<-DS:[SI]; SI<-SI±1
OUTSW
2) 与 REPZ(REPNZ) 配合的 CMPS 和 SCAS:
1.相等重复前缀指令 REPE/REPZ:(1) CX!=0 且 ZF=1
(2) 不成立则结束重复
(3) 否则, CX=CX-1, 执行其后, 转(1)
2.不等重复前缀指令: REPNE/REPNZ:(1) CX!=0 且 ZF=0
(2) 上述
(3) 上述
3.串比较指令 CMPS: CMPSB; CMPSW; 根据相减结果设置标志, 结果不保存
(1) DS:[SI]-ES:[DI]
(2) 修改串指针, 使之指向串中的下一个元素
4.串搜索指令 SCAS: SCASB: SCASW; 根据相减结果置标志位, 结果不保存
(1) AL-ES:[DI]
(2) 上述

控制转移指令

1)无条件转移指令 JMP:
在这里插入图片描述

2)条件转移指令:
在这里插入图片描述

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值