码迷,mamicode.com
首页 > 其他好文 > 详细

汇编指令介绍

时间:2019-05-22 09:20:57      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:修改   方式   执行流程   保存   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!