汇编指令介绍

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

原文地址:https://www.cnblogs.com/forestsky/p/10902663.html

时间: 2024-10-09 21:16:30

汇编指令介绍的相关文章

AT&T汇编指令介绍

linux中使用的AT&T格式的汇编指令,所以总结一下一些比较重要的指令. 1.寻址模式 有多种不同的寻址模式,允许不同形式的存储器引用.我们用符号Ea表示任意寄存器,R[Ea]表示它的值.M[addr]表示addr处地址的值. 题目: 答案:0x100,0xAB,0x108,0xFF,0x11,0x12,0xFF,0x11. 2.leal指令 加载有效地址指令其实是movl指令的变形.它的指令式是从存储器读数据到寄存器,但实际上它根本没有引用存储器.它的第一个操作数看上去是一个存储器引用,但该

ARM常用汇编指令介绍

b     跳转指令(跳转范围为32Mb) bl    带返回地址的跳转,指令自动将下一条指令的地址复制到R14寄存器,然后跳转到指定地址去执行,执行完后返回到下一条指令处执行 pc    寄存器R15,程序计数器指向当前执行的程序地址 lr    寄存器R14,链接寄存器保存程序跳转时的返回地址 ldr   从内存中读取数据加载到寄存器中 str   将寄存器中的数据保存到内存 mov   寄存器与寄存器之间的数据传送指令,也可以将立即数传给目标寄存器 add   加法指令 sub   减法指

<<ASM>> x86汇编指令浅析

学习研究系统/软件底层机制的朋友,汇编是必修课之一.由于汇编具有低级语言固有的特性,使得前期的学习掌握异常困难.本文将着重介绍一些常用而又关键的汇编指令,借此提携那些还在苦苦攀援的“初学者”们. 目前市场上主流的汇编教材中,王爽所著的<汇编语言(第二版)>比较受读者的青睐.笔者自学汇编所选的汇编教材则是杨继文所著的<80x86汇编语言程序设计教程>和<汇编语言程序设计——从DOS到Windows>张雪兰/谭毓安:根据书的厚度就可知其难易程度.读者若初次接触汇编,可以考虑

C编译器剖析_6.3.6 汇编代码生成_为“取地址”产生汇编指令

6.3.6  为"取地址"产生汇编指令 在这一小节中,我们来讨论一下以下两条中间指令的翻译: (1)取地址指令<ADDR,DST,SRC1,NULL> 例如 <ADDR,t0,  number, NULL>,表示取number的地址并保存到临时变量t0中 (2)对象清零指令< CLR,DST,SRC1,NULL> 例如<CLR,arr,16,NULL>,表示把arr所占16字节的内存清零 我们先举一个例子来说明,对于图6.3.14第4行局

汇编指令大全

blt   小于跳转 tst r0,#02 bne sleep ldr  r1,#0 解释:位比较,先进行and运算,如果r0第2位不为1,则与的结果为0,设置标志位zero=1,继续下面的ldr指令.反之,zero=0,跳转到sleep执行. bne指令: 非零则跳转 个人总结:tst 和bne连用: 先是用tst进行位与运算,然后将位与的结果与0比较,如果不为0,则跳到bne紧跟着的标记(如bne sleep,则跳到sleep处). tst 和beq连用: 先是用tst进行位与运算,然后将位

ARM汇编指令汇总

1.ARM汇编的格式:    在ARM汇编里,有些字符是用来标记行号的,这些字符要求顶格写:有些伪码是需要成对出现的,例如ENTRY和END,就需要对齐出现,也就是说他们要么都顶格,要么都空相等的空,否则编译器将报错.常量定义需要顶格书写,不然,编译器同样会报错.    2.字符串变量的值是一系列的字符,并且使用双引号作为分界符,如果要在字符串中使用双引号,则必须连续使用两个双引号.    3.在使用LDR时,当格式是LDR r0,=0x022248,则第二个参数表示地址,即0x022248,同

GNU ARM 汇编指令

http://blog.chinaunix.net/u2/87718/showart_1683402.html GNU ARM 汇编指令简介第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初始化完成后就可以跳转到C代码执行.需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(www.gnu.org)上下载有关规范. 一. Linux汇编行结构任何汇编行

ARM体系结构和汇编指令

第一节 可编程器件的编程原理 1. 可编程器件的特点 1 . CPU在固定频率的时钟控制下节奏运行 2 . CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行 3 . 这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(ARM公司)定义的,本质上是一串由1和0组成的数字.这就是CPU的汇编指令集 2. 从源代码到cpu执行过程 第二节 指令集对cpu的意义 1. 汇编语言与C等高级语言的差异 汇编无移植性,c语言有一定可移植性,jave等更高级的语言移

C/C++中书写汇编指令

汇编语言的指令格式目前有两种不同的标准:Windows下的汇编语言基本上都遵循Intel风格的语法,比如:MASM.NASM,Unix/Linux下的汇编语言基本上都遵循AT&T风格的语法. 下面主要介绍Unix/Linux下的汇编,具体格式如下: [名称[:]] 指令码 源操作数SRC,目的操作数DST ;注释 开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言,但是和硬件相关部分的代码需要使用汇编语言:由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size:另外,对于