标签:修改 方式 执行流程 保存 data- 偏移地址 .com 段地址 http
8086汇编指令主要有以下几种:
1、数据传输指令
2、算术运算指令
3、逻辑运算指令
4、串指令
5、程序转移指令
6、伪指令
-----------------------------------------------------------------------------------------------------------------------
具体介绍各种指令的含义:
一、数据传输指令:它们在存储器和寄存器、寄存器和输入输出端口之间传送数据
a、通用数据传送指令
MOV 传送字或字节
MOVSX 先符号扩展,再传送
MOVZX 先零扩展,再传送
PUSH 把字压入堆栈
POP 把字弹出堆栈
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈
BSWAP 交换32位寄存器里字节的顺序
XCHG 交换字或字节( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
CMPXCHG比较并交换操作数( 第二个操作数必须为累加器AL/AX/EAX )
XADD 先交换再累加
XLAT 字节查表转换
b、输入输出端口传送指令
IN I/O端口输入 ( 语法: IN 累加器, {端口号│DX} )
OUT I/O端口输出 ( 语法: OUT {端口号│DX},累加器 )
输入输出端口由立即方式指定时, 其范围是0--255
由寄存器DX指定时,其范围是0--65535
c、目的地址传送指令
LEA 装入有效地址 例: LEA DX,string ;把偏移地址存到DX.
LDS 传送目标指针,把指针内容装入DS 例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
LES 传送目标指针,把指针内容装入ES 例: LES DI,string ;把段地址:偏移地址存到ES:DI.
LFS 传送目标指针,把指针内容装入FS
LGS 传送目标指针,把指针内容装入GS
LSS 传送目标指针,把指针内容装入SS
d、标志传送指令
LAHF 标志寄存器传送,把标志装入AH
SAHF 标志寄存器传送,把AH内容装入标志寄存器
PUSHF 标志入栈
POPF 标志出栈
PUSHD 32位标志入栈
POPD 32位标志出栈
----------------------------------------------------------------------------------------------------------------------------
二、算术运算指令:算术运算与逻辑指令负责执行数学运算与逻辑功能,执行此类指令除了能得到响应的结果外,部分指令还会改变标志位,从而对控制转移类指令的执行产生影响,进而控制程序流程与逻辑
ADD 加法
ADC 带进位加法
INC 加1
SUB 减法
DEC 减1
NEC 求反(以0减之)
CMP 比较(两操作数作减法,仅修改标志位,不回送结果)
MUL 无符号乘法
IMUL 整数乘法
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算)
DIV 无符号除法
IDIV 整数除法
以上两条,结果回送:商回送AL,余数回送AH, (字节运算); 或 商回送AX,余数回送DX, (字运算)
CBW 字节转换为字 (把AL中字节的符号扩展到AH中去)
CWD 字转换为双字 (把AX中的字的符号扩展到DX中去)
CWDE 字转换为双字 (把AX中的字符号扩展到EAX中去)
CDQ 双字扩展 (把EAX中的字的符号扩展到EDX中去)
------------------------------------------------------------------------------------------------------------------------------
三、逻辑运算指令
AND 与运算
OR 或运算
XOR 异或运算
NOT 取反
TEST 测试(两操作数作与运算,仅修改标志位,不回送结果).
SHL 逻辑左移
SAL 算术左移(=SHL)
SHR 逻辑右移
SAR 算术右移(=SHR)
ROL 循环左移
ROR 循环右移
RCL 通过进位的循环左移
RCR 通过进位的循环右移
----------------------------------------------------------------------------------------------------------------------------------
四、串操作指令:被用于操作某一内存区域中由相同类型数据构成的一个整体(相当于一个数组),这种结构一般被用于保存字符串或其他连续存放的单一类型数据
MOVS 串传送
STOS 保存串(是LODS的逆过程.)
SCAS 串扫描
CMPS 串比较
LODS 装入串(把源串中的元素(字或字节)逐一装入AL或AX中)
REP 重复操作前缀
----------------------------------------------------------------------------------------------------------------------------------
五、程序转移指令:控制转移指令负责控制程序执行流程,它们一般会导致当前指令的执行轨迹发生改变,或执行调用子程序的功能
1> 无条件转移指令(长转移)
JMP 无条件转移指令
CALL 过程调用
RET 过程返回
2> 条件转移指令(短转移,-128到+127的距离内)
3> 循环控制指令 (短转移)
LOOP CX 不为零时循环.
LOOPE/LOOPZ CX 不为零且标志Z=1时循环.
LOOPNE/LOOPNZ CX 不为零且标志Z=0时循环.
JCXZ CX 为零时转移.
JECXZ ECX 为零时转移.
4> 中断指令
INT 中断指令
INTO 溢出中断
IRET 中断返回
5> 处理器控制指令
HLT 处理器暂停, 直到出现中断或复位信号才继续.
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
ESC 转换到外处理器.
LOCK 封锁总线.
NOP 空操作.
STC 置进位标志位.
CLC 清进位标志位.
CMC 进位标志取反.
STD 置方向标志位.
CLD 清方向标志位.
STI 置中断允许位.
CLI 清中断允许位.
---------------------------------------------------------------------------------------------------------------------------------
六、伪指令:是由汇编程序在汇编源程序时,通过执行一段程序来完成的,而不是在运行目标程序时实现的。
DW 定义字
PROC 定义过程
ENDP 过程结束
SEGMENT 定义段
ASSUME 建立段寄存器寻址
ENDS 段结束
END 程序结束
参考资料:https://blog.csdn.net/qq_36215315/article/details/79879391
标签:修改 方式 执行流程 保存 data- 偏移地址 .com 段地址 http
原文地址:https://www.cnblogs.com/forestsky/p/10902663.html