文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言指令大全

汇编语言指令大全

汇编语言指令大全
汇编语言指令大全

AAA 未组合的十进制加法调整

指令 AAA(ASCII Adgust

for Addition)

格式: AAA

功能: 对两个组合的十进

制数相加运算(存在AL中)

的结果进行调整,产生一个

未组合的十进制数放在AX

中. 说明:

1. 组合的十进制数和未组合的十进制数:在计算中,十进制数可用四位二进制数编码,称为BCD码.

当一个节(8位)中存放一位BCD码,且放在字节的低4位, 高4位为时称为未组合的BCD码.

2. AAA的调整操作

若(AL) and 0FH>9 或 AF=1,则调整如下:

(AL)<--(AL)+6,(AH)<--(AH)+1,AF=1,CF<--AF,(AL)<--(AL) and 0FH

AAD 未组合十进制数除法调整

指令 AAD(ASCII Adjust

for Division)

格式: AAD

功能: 在除法指令前对AX

中的两个未组合十进制数

进行调整,以便能用DIV指

令实现两个未组合的十进

制数的除法运算,其结果为

未组合的十进制数,商(在

AL中)和余数(在AH中). 说明:

1. AAD指令是在执行除法DIV之前使用的,以便得到二进制结果存于AL中,然后除以OPRD,得到的商在AL中,余数在AH 中.

2. 示例: MOV BL,5

MOV AX,0308H

AAD ;(AL)<--1EH+08H=26H,(AH)<--0

DIV BL ;商=07H-->(AL),余数=03H-->(AH).

AAM 未组合十进制数乘法调整

指令 AAM(ASCII Adjust

MULtiply)

格式: AAM

功能: 对两个未组合的十

进制数相乘后存于AX中的

结果进行调整,产生一个未

组合的十进制数存在AL中. 说明:

1. 实际上是两个未组合的十进制数字节相乘,一个0~9的数与另一个0~9的数相乘其积最大为81.为了得到正确的结果,应进行如下调整:

乘积: (AH)<--(AL)/10

(AL)<--(AL)MOD10

2. 本指令应跟在MUL指令后使用,乘积的两位十进制结果,高位放在AH中,低位放在AL中.AH内容是MUL指令的结果被10除的商,即(AL)/10,而最后的AL内容是乘积被10整除的余数(即个位数).

AAS 未组合十进制减法调整指

令 AAS(ASCII Adjust for

Subtraction)

格式: AAS

功能: 对两个未组合十进

制数相减后存于AL中的结

果进行调整,调整后产生一

个未组合的十进制数数且

仍存于AL中. 说明:

1. 本指令影响标志位CF及AF.

2. 调整操作

若(AL) and 0FH > 9 或 AF=1

则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,

否则(AL)<--(AL) and 0FH

ADC 带进位加法指令

ADC(Addition Carry)

格式: ADC OPRD1,OPRD2

功能: OPRD1<--OPRD1 +

OPRD2 + CF 说明:

1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一

个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即

数只能用于源操作数.

2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另

一个为存储器也是允许的,但不允许两个都是存储器操作数.

3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.

4. 该指令对标志位的影响同ADD指令.

ADD 加法指令 ADD(Addition) 格式: ADD OPRD1,OPRD2

功能: 两数相加说明:

1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.

2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数.

3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.加法指令适用于无符号数或

有符号数的加法运算. AND 逻辑与运算指令 AND 格式: AND OPRD1,OPRD2 功能: 对两个操作数实现按位逻辑与运算,结果送至目的操作数.本指令可以进行字节或字的‘与’运算, OPRD1<--OPRD1 and OPRD2. 说明:

1. 目的操作数OPRD1为任一通用寄存器或存储器操作数.源操作数OPRD2为立即数,任一通用寄存器或存储器操作数.

2. 示例: AND AL,0FH ;(AL)<--(AL) AND 0FH

AND AX,BX ;(AX)<--(AX) AND (BX)

AND DX,BUFFER[SI+BX]

AND BETA[BX],00FFH

注意: 两数相与,有一个数假则值为假

CALL 过程调用指令 CALL 格式: CALL OPRD 功能: 过程调用指令 说明:

1. 其中OPRD 为过程的目的地址.

2. 过程调用可分为段内调用和段间调用两种.寻址方式也可

以分为直接寻址和间接寻址两种.

3. 本指令不影响标志位.

CBW 字节扩展指令 CBW(Convert Byte to Word) 格式: CBW 功能: 将字节扩展为字,即把AL 寄存器的符号位扩展到AH 中. 说明:

1. 两个字节相除时,先使用本指令形成一个双字节长的被除数.

2. 本指令不影响标志位.

3. 示例: MOV AL,25

CBW

IDIV BYTE PTR DATA1

CLC 处理器控制指令-标志位操作指令 格式:

CLC ;置CF=0

STC ;置CF=1

CMC ;置CF=(Not CF)进位标

志求反

CLD ;置DF=0

STD ;置DF =1

CLI ;置IF=0,CPU 禁止响

应外部中断

STI ;置IF=1,使CPU 允许

向应外部中断

功能: 完成对标志位的置

位、复位等操作.

说明: 例如串操作中的程序,经常用CLD 指令清方向标志使DF =0,在串操作指令执行时,按增量的方式修改吕指针. CLD 处理器控制指令-标志位操作指令 格式:

CLC ;置CF=0

STC ;置CF=1

CMC ;置CF=(Not CF)进位标

志求反

CLD ;置DF=0

STD ;置DF =1

CLI ;置IF=0,CPU 禁止响

应外部中断

STI ;置IF=1,使CPU 允许

向应外部中断

功能: 完成对标志位的置

位、复位等操作.

说明: 例如串操作中的程序,经常用CLD 指令清方向标志使DF =0,在串操作指令执行时,按增量的方式修改吕指针. CLI

处理器控制指令-标志位操作指令 格式:

CLC ;置CF=0

STC ;置CF=1

CMC ;置CF=(Not CF)进位标

志求反

CLD ;置DF=0

STD ;置DF =1

CLI ;置IF=0,CPU 禁止响

说明: 例如串操作中的程序,经常用CLD 指令清方向标志使DF =0,在串操作指令执行时,按增量的方式修改吕指针.

应外部中断

STI ;置IF=1,使CPU允许向应外部中断

功能: 完成对标志位的置位、复位等操作.

CMC 处理器控制指令-标志位

操作指令

格式:

CLC ;置CF=0

STC ;置CF=1

CMC ;置CF=(Not CF)进位标

志求反

CLD ;置DF=0

STD ;置DF=1

CLI ;置IF=0,CPU禁止响

应外部中断

STI ;置IF=1,使CPU允许

向应外部中断

功能: 完成对标志位的置

位、复位等操作. 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.

CMP 比效指令 CMP(CoMPare)

格式: CMP OPRD1,OPRD2

功能: 对两数进行相减,进

行比较. 说明:

1. OPRD1为任意通用寄存器或存储器操作数.

OPRD2为任意通用寄存器或存储器操作数,立即数也可用作源操作数OPRD2.

2. 对标志位的影响同SUB指令,完成的操作与SUB指令类似,唯一的区别是不将OPRD1-OPRD2的结果送回OPRD1,而只是比较.

3. 在8088/8086指令系统中,专门提供了一组根据带符号数比较大小后,实现条件转移的指令.

CMPS 字符串比较指令

格式: CMPS OPRD1,OPRD2

CMPSB

CMPSW

功能: 由SI寻址的源串中

数据与由DI寻址的目的串

中数据进行比较,比较结果

送标志位,而不改变操作数

本身.

同时SI,DI将自动调整. 说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进

行比较.

3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.

CMPSB 字符串比较指令

格式: CMPS OPRD1,OPRD2

CMPSB CMPSW

功能: 由SI寻址的源串中

数据与由DI寻址的目的串

中数据进行比较,比较结果

送标志位,而不改变操作数

本身.

同时SI,DI将自动调整. 说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进

行比较.

3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.

CMPSW 字符串比较指令

格式: CMPS OPRD1,OPRD2

CMPSB CMPSW

功能: 由SI寻址的源串中

数据与由DI寻址的目的串

中数据进行比较,比较结果

送标志位,而不改变操作数

本身.

同时SI,DI将自动调整. 说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进

行比较.

3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.

CWD 字扩展指令 CWD(Convert

Word to Double Word)

格式: CWD

功能: 将字扩展为双字长,说明:

1. 两个字或字节相除时,先用本指令形成一个双字长的的被除数.

2. 本指令不影响标志位.

即把AX寄存器的符号位扩展到DX中. 3. 示例: 在B1、B2、B3字节类型变量中,分别存有8们带符号数a、b、c,实现(a*b+c)/a运算。

DAA 组合的十进制加法调整指

令DAA(Decimal Adjust

for Addition)

格式: DAA

功能: 对AL中的两个组合

进制数相加的结果进行调

整,调整结果仍放在AL中,

进位标志放在CF中. 说明:

1. 调整操作如下

(1) 若(AL) and 0FH>9 或 AF=1,则(AL)<--(AL)+6,AF<--1,对低四位的调整.

(2) 若(AL) and 0F0H>90H 或 CF=1,则

(AL)<--(AL)+60H,CF<--1.

2. 示例: (AL)=18H,(BL)=06H

ADD AL,BL ; (AL)<--(AL)+(BL) ; (AL)=1EH

DAA ; (AL)

DAS 组合十进制减法调整指令

DAS(Decimal Adjust for

Subtraction)

格式: DAS

功能: 对两个组合十进制

数相减后存于AL中的结果

进行调整,调整后产生一个

组合的十进制数且仍存于

AL中. 说明:

调整操作

若(AL) and 0FH > 9 或 AF=1,则(AL)<--(AL)-6,AF=1

若(AL) and 0F0H > 90H 或 CF=1,则(AL)<--(AL)-60,CF=1

DEC 减一指令 DEC(Decrement by 1)

格式: DEC OPRD

功能: OPRD<--OPRD-1 说明:

1. OPRD 为寄存器或存储器操作数.

2. 这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF标志位.

3. 示例 DEC AX

DEC CL

DEC WORD PTR[DI]

DEC ALFA[DI+BX]

DIV 无符号数除法指令

DIV(DIVision)

格式: DIV OPRD

功能: 实现两个无符号二

进制数除法运算. 说明:

1. 其中OPRD为任一个通用寄存器或存储器操作数.

2. 字节相除,被除数在AX中;字相除,被除数在DX,AX中,除数在OPRD中.

字节除法: (AL)<--(AX)/OPRD,(AH)<--(AX)MOD OPRD

字除法: (AX)<--(DX)(AX)/OPRD,(DX)<--(DX)(AX) MOD OPRD

ESC 处理器交权指令 ESC

格式: ESC EXTOPRD,OPRD

功能: 使用本指令可以实

现协处理器出放在ESC指令

代码中的6位常数,该常数

指明协处理器要完成的功

能.

当源操作数为存储器变量

时,则取出该存储器操作数

传送给协处理器. 说明:

1. 其中EXTOPRD为外部操作码,OPRD为源操作数.

2. 本指不影响标志位.

HLT 处理器暂停指令 HLT

格式: HLT

功能: 使处理器处于暂时

停机状态. 说明:

1. 本指令不影响标志位.

2. 由执行HLT引起的暂停,只有RESET(复位)、NMI(非屏蔽中断请求)、INTR(可屏蔽的外部中断请求)信号可以使其退出暂停状态.它可用于等待中断的到来或多机系统的同步操作.

IDIV 带符号数除法指定

IDIV(Interger DIVision)

格式: IDIV OPRD

功能: 这实现两个带符号

数的二进制除法运算. 说明:

1. 其中OPRD为任一通用寄存器或存储器操作数.

2. 理由与IMUL相同,只有IDIV指令,才能得到符号数相除的正确结果.

3. 当被除数为8位,在进行字节除法前,应把AL的符号位扩充至AH中.在16位除法时,若被除数为16位,则应将AX中的符号位扩到DX中.

IMUL 带符号数乘法指令

IMUL(Integer MULtiply)

格式: IMUL OPRD 说明:

1. 其中OPRD为任一通用寄存器或存储器操作数.

2. MUL指令对带符号相乘时,不能得到正确的结果.

功能: 完成两个带符号数

的相乘 例如: (AL)=255 (CL)=255

MUL CL

(AX)=65025

注意: 这对无符号数讲,结果是正确的,但对带符号数讲,相

当于(-1)*(-1)结果应为+1,而65025对应的带符号数为

-511,显然是不正确的.

IN 输入指令 IN 格式: IN AL,n ;(AL)<--(n) IN AX,n ;(AX)<--(n+1),(n) IN AL,DX ;(AL)<--[(DX)] IN AX,DX ;(AX)<--[(DX)+1],[(DX)] 功能: 输入指令 说明:

1. 其中n 为8位的端口地址,当字节输入时,将端口地址n+1的内容送至AH 中,端口地址n 的内容送AL 中.

2. 端口地址也可以是16位的,但必须将16位的端口地址送入DX 中.当字节寻址时,由DX 内容作端口地址的内容送至AL 中;

当输入数据字时,[(DX)+1]送AH,[(DX)]送AL 中,用符号:(AX)<--[(DX)+1],[(DX)]表示.

INC 加1指令 INC(INCrement by 1) 格式: INC OPRD 功能: OPRD<--OPRD+1 说明:

1. OPRD 为寄存器或存储器操作数.

2. 这条指令执行结果影响AF 、OF 、PF 、SF 、ZF 标志位,但不影响CF 标志位.

3. 示例:

INC SI;(SI)<--(SI)+1

INC WORD PTR[BX]

INC BYTE PTR[BX+DI]

INC CL;(CL)<--(CL)+1

注意: 上述第二,三两条指令,是对存储字及存储字节的内容

加1以替代原来的内容.

INT 软中断指令 INT 格式: INT n 其中n 为软中断的类型号. 功能: 本指

令将产生一个软中断,把控

制转向一个类型号为n 的软

中断,该中断处理程序入口

地址在中断向量表的n*4地

处的二个存储器字(4个单

元)中

说明: 操作过程与INTO 指令雷同,只需将10H 改为n*4即可.所以,本指令也将影响标志位IF 及TF.

INTO 溢出中断指令 INTO(INTerrupt if Overflow) 格式: INTO 功能: 本指令检测OF 标志

位,当OF=1时,说明已发生

溢出,立即产生一个中断类

型4的中断,当OF =0时,本

指令不起作用.

说明:

1. 本指令影响标志位IF 及TF.

2. 本指令可用于溢出处理,当OF=1时,产生一个类型4的软中断.在中断处理程序中完成溢出的处理操作.

IRET 中断返回指令 IRET 格式: IRET 功能: 用于中断处理程序中,从中断程序的断点处返回,继续执行原程序.

说明:

1. 本指令将影响所有标志位.

2. 无论是软中断,还是硬中断,本指令均可使其返回到中断程序的断点处继续执行原程序.

JA 条件转移指令JA/JNBE 格式: JA/JNBE 标号 功能: 为高于/不低于等于的转移指令 说明:

1. 例如两个符号数a,b 比较时,a>b(即CF=0,ZF=0)时转移.因为单一标志位CF=0,只表示a>=b.

2. JA/JNBE 是同一条指令的两种不同的助记符.

3. 该指令用于无符号数进行条件转移

JAE 条件转移指令JAE/JNB 格式: JAE/JNB 标号 功能: 为高于等于/不低于的转移指令

说明:

1. JAE/JNB 是同一条指令的两种不同的助记符.

2. 该指令用于无符号数进行条件转移.

JB

条件转移指令JB/JNAE 格式: JB/JNAE 标号

说明: 该指令用于无符号数的条件转移

功能: 低于/不高于等于时

转移

JBE 条件转移指令JBE/JNA

格式: JBE/JNA 标号

功能: 低于等于/不高于时

转移

说明: 该指令用于无符号数的条件转移

JC 条件转移指令 JC

格式: JC 标号

功能: CF=1,转至标号处执

说明: JC为根据标志位CF进行转移的指令

JE 条件转移指令JE/JZ

格式: JE/JZ标号

功能: ZF=1,转至标号处执说明:

1. 指令JE与JZ等价,它们是根据标志位ZF进行转移的指令

2. JE,JZ均为一条指令的两种助记符表示方法

JG 条件转移指令JG/JNLE

格式: JG/JNLE 标号

功能: 大于/不小于等于时

转移

说明: 用于带符号数的条件转移指令

JGE 条件转移指令JGE/JNL

格式: JGE/JNL标号

功能: 大于等于/不小于时

转移

说明: 用于带符号数的条件转移指令

JL 条件转移指令JL/JNGE

格式: JL/JNGE标号

功能: 小于/不大于等于时

转移

说明: 用于带符号数的条件转移指令

JLE 条件转移指令JLE/JNG

格式: JLE/JNG 标号

功能: 小于等于/不大于时

转移

说明: 用于带符号数的条件转移指令

JMP 无条件转移指令JMP

格式: JMP OPRD

功能: JMP指令将无条件地

控制程序转移到目的地址

去执行.当目的地址仍在同

一个代码段内,称为段内转

移;当目标地址不在同一个

代码段内,则称为段间转移

.这两种情况都将产生不同

的指令代码,以便能正确地

生成目的地址,在段内转

移时,指令只要能提供目的

地址的段内偏移量即够了

;而在段间转移时,指令应

能提供目的地址的段地址

及段内偏移地址值. 说明:

1. 其中OPRD为转移的目的地址.程序转移到目的地址所指向的指令继续往下执行.

2. 本组指令对标志位无影响.

3. <1> 段内直接转移指令: JMP NEAR 标号

<2> 段内间接转移指令: JMP OPRD

<3> 段间直接转移指令: JMP FAR 标号

<4> 段间间接转移指令:JMP OPRD其中的OPRD为存储器双字操作数.段间间接转移只能通过存储器操作数来实现.

JNA 条件转移指令JBE/JNA

格式: JBE/JNA 标号

功能: 低于等于/不高于时

转移

说明: 该指令用于无符号数的条件转移

JNAE 条件转移指令JB/JNAE

格式: JB/JNAE 标号

功能: 低于/不高于等于时

转移

说明: 该指令用于无符号数的条件转移

JNB 条件转移指令JAE/JNB

格式: JAE/JNB 标号

功能: 为高于等于/不低于

的转移指令说明:

1. JAE/JNB是同一条指令的两种不同的助记符.

2. 该指令用于无符号数进行条件转移.

JNBE 条件转移指令JA/JNBE

格式: JA/JNBE标号

功能: 为高于/不低于等于

的转移指令说明:

1. 例如两个符号数a,b比较时,a>b(即CF=0,ZF=0)时转移.因为单一标志位CF=0,只表示a>=b.

2. JA/JNBE是同一条指令的两种不同的助记符.

3. 该指令用于无符号数进行条件转移

JNC 条件转移指令JNC

格式: JNC标号

功能: CF=0,转至标号处执

说明: JNC为根据标志位CF进行转移的指令

JNE 条件转移指令JNE/JNZ

格式: JNE/JNZ 标号

功能: ZF=0,转至标号处执

行说明:

1. 指令JNE与JNZ等价,它们是根据标志位ZF进行转移的指令

2. JNE,JNZ均为一条指令的两种助记符表示方法

JNG 条件转移指令JLE/JNG

格式: JLE/JNG 标号

功能: 小于等于/不大于时

转移

说明: 用于带符号数的条件转移指令

JNGE 条件转移指令JL/JNGE

格式: JL/JNGE标号

功能: 小于/不大于等于时

转移

说明: 用于带符号数的条件转移指令

JNL 条件转移指令JGE/JNL

格式: JGE/JNL标号

功能: 大于等于/不小于时

转移

说明: 用于带符号数的条件转移指令

JNLE 条件转移指令JG/JNLE

格式: JG/JNLE 标号

功能: 大于/不小于等于时

转移

说明: 用于带符号数的条件转移指令

JNO 条件转移指令JNO

格式: JNO 标号

功能: OF=0,转至标号处执

说明: JNO是根椐溢出标志位OF进行转移的指令

JNP 条件转移指令JNP/JPO

格式: JNP/JPO 标号

功能: PF=0,转至标号处执

行说明:

1. 指令JNP与JPO,它们是根据奇偶标志位PF进行转移的指令

2. JNP,JPO均为一条指令的两种助记符表示方法

JNS 条件转移指令JNS

格式: JNS 标号

功能: SF=0,转至标号处执

说明: JNS是根据符号标志位SF进行转移的指令

JNZ 条件转移指令JNE/JNZ

格式: JNE/JNZ 标号

功能: ZF=0,转至标号处执

行说明:

1. 指令JNE与JNZ等价,它们是根据标志位ZF进行转移的指令

2. JNE,JNZ均为一条指令的两种助记符表示方法

JO 条件转移指令JO

格式: JO 标号

功能: OF=1,转至标号处执

说明: JO是根椐溢出标志位OF进行转移的指令

JP 条件转移指令JP/JPE

格式: JP/JPE 标号

功能: PF=1,转至标号处执

行说明:

1. 指令JP与JPE,它们是根据奇偶标志位PF进行转移的指令

2. JP,JPE均为一条指令的两种助记符表示方法

JPE 条件转移指令JP/JPE

格式: JP/JPE 标号

功能: PF=1,转至标号处执

行说明:

1. 指令JP与JPE,它们是根据奇偶标志位PF进行转移的指令

2. JP,JPE均为一条指令的两种助记符表示方法

JPO 条件转移指令JNP/JPO

格式: JNP/JPO 标号

功能: PF=0,转至标号处执

行说明:

1. 指令JNP与JPO,它们是根据奇偶标志位PF进行转移的指令

2. JNP,JPO均为一条指令的两种助记符表示方法

JS 条件转移指令JS

格式: JS 标号

功能: SF=1,转至标号处执

说明: JS是根据符号标志位SF进行转移的指令

JZ 条件转移指令JE/JZ

格式: JE/JZ标号

功能: ZF=1,转至标号处执说明:

1. 指令JE与JZ等价,它们是根据标志位ZF进行转移的指令

2. JE,JZ均为一条指令的两种助记符表示方法

LAHF 标志传送指令 LAHF

格式: LAHF

功能: 取FLAG标志寄存器

低8位至AH寄存器

.(AH)<--(FLAG)7~0 说明: 该指令不影响FLAG的原来内容,AH只是复制了原FLAG 的低8位内容.

LDS 从存储器取出32位地址的指令 LDS

格式: LDS OPRD1,OPRD2

功能: 从存储器取出32位

地址的指令. 说明:

OPRD1 为任意一个16位的寄存器.

OPRD2 为32位的存储器地址.

示例: LDS SI,ABCD

LDS BX,FAST[SI]

LDS DI,[BX]

注意: 上面LDS DI,[BX]指令的功能是把BX所指的32位地址指针的段地址送入DS,偏移地址送入DI.

LEA 有效地址传送指令 LEA

格式: LEA OPRD1,OPRD2

功能: 将源操作数给出的

有效地址传送到指定的的

寄存器中. 说明:

1. OPRD1 为目的操作数,可为任意一个16位的通用寄存器. OPRD2 为源操作数,可为变量名、标号或地址表达式.

示例: LEA BX,DATA1

LEA DX,BETA[BX+SI]

LEA BX BX,[BP],[DI]

2. 本指令对标志位无影响。

LES 从存储器取出32位地址的指令 LES

格式: LES OPRD1,OPRD2

功能: 从存储器取出32位

地址的指令. 说明:

OPRD1 为任意一个16位的寄存器.

OPRD2 为32位的存储器地址.

示例: LES SI,ABCD

LES BX,FAST[SI]

LES DI,[BX]

注意: 上面LES DI,[BX]指令的功能是把BX所指的32位地址指针的段地址送入ES,偏移地址送入DI.

LOCK 封锁总线指令 LOCK

格式: LOCK

功能: 指令是一个前缀,可

放在指令的前面,告诉CPU

在执行该指令时,不允许其

它设备对总线进行访问.

无可用信息!用户可自行添加!

LODS 取字符串元素指令 LODS

格式: LODS OPRD 其中OPRD

为源字符串符号地址.

功能: 把SI寻址的源串的

数据字节送AL或数据字送

AX中去, 并根据DF的值修

改地址指针SI进行自动调

整. 说明:

1. 本指令不影响标志位.

2. 当不使用操作数时,可用LODS(字节串)或LODSW(字串)指令.

LOOP 循环控制指令LOOP

格式: LOOP 标号

功能:

(CX)<--(CX)-1,(CX)<>0,

则转移至标号处循环执行,

直至(CX)=0,继续执行后继

指令. 说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环.

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在

-128到+127个字节的范围内.

LOOPE 循环控制指令LOOPZ/LOOPE

格式: LOOPZ/LOOPE 标号

功能:

(CX)<--(CX)-1,(CX)<>0

且ZF=1时,转至标号处循

环说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在

-128到+127个字节的范围内.

3. 以上两种助记符等价.

LOOPNE 循环控制指令

LOOPNZ/LOOPNE

格式: LOOPNZ/LOOPNE 标号说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环.

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在

功能:

(CX)<--(CX)-1,(CX)<>0 且ZF=0时,转至标号处循环-128到+127个字节的范围内.

3. 以上两种助记符等价.

LOOPNZ 循环控制指令

LOOPNZ/LOOPNE

格式: LOOPNZ/LOOPNE 标号

功能:

(CX)<--(CX)-1,(CX)<>0

且ZF=0时,转至标号处循

环说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环.

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在

-128到+127个字节的范围内.

3. 以上两种助记符等价.

LOOPZ 循环控制指令LOOPZ/LOOPE

格式: LOOPZ/LOOPE 标号

功能:

(CX)<--(CX)-1,(CX)<>0

且ZF=1时,转至标号处循

环说明:

1. 本指令是用CX寄存器作为计数器,来控制程序的循环.

2. 它属于段内SHORT短类型转移,目的地址必须距本指令在

-128到+127个字节的范围内.

3. 以上两种助记符等价.

MOVE 数据传送指令 MOV

格式: MOV OPRD1,OPRD2

功能: 本指令将一个源操

作数送到目的操作数中,即

OPRD1<--OPRD2. 说明:

1. OPRD1 为目的操作数,可以是寄存器、存储器、累加器. OPRD2 为源操作数,可以是寄存器、存储器、累加器和立即数.

2. MOV 指令以分为以下四种情况:

<1> 寄存器与寄存器之间的数据传送指令

<2> 立即数到通用寄存器数据传送指令

<3> 寄存器与存储器之间的数据传送指令

<4> 立即数到存储器的数据传送

3. 本指令不影响状态标志位

MOVS 字符串传送指令 MOVS

格式: MOVS OPRD1,OPRD2

MOVSB

MOVSW

功能: OPRD1<--OPRD2. 说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 字节串操作: 若DF=0,则作加, 若DF=1,则作减.

3. 对字串操作时: 若DF=0,则作加,若DF=1,则作减,.

4. 在指令中不出现操作数时,字节串传送格式为MOVSB、字串传送格式为MOVSW.

5. 本指令不影响标志位.

MOVSB 字符串传送指令 MOVS

格式: MOVS OPRD1,OPRD2

MOVSB

MOVSW

功能: OPRD1<--OPRD2. 说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 字节串操作: 若DF=0,则作加, 若DF=1,则作减.

3. 对字串操作时: 若DF=0,则作加,若DF=1,则作减,.

4. 在指令中不出现操作数时,字节串传送格式为MOVSB、字串传送格式为MOVSW.

5. 本指令不影响标志位.

MOVSW 字符串传送指令 MOVS

格式: MOVS OPRD1,OPRD2

MOVSB

MOVSW

功能: OPRD1<--OPRD2. 说明:

1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2. 字节串操作: 若DF=0,则作加, 若DF=1,则作减.

3. 对字串操作时: 若DF=0,则作加,若DF=1,则作减,.

4. 在指令中不出现操作数时,字节串传送格式为MOVSB、字串传送格式为MOVSW.

5. 本指令不影响标志位.

MUL 无符号数乘法指令

MUL(MULtiply)

格式: MUL OPRD

功能: 乘法操作. 说明:

1. OPRD为通用寄存器或存储器操作数.

2. OPRD为源操作数,即作乘数.目的操作数是隐含的,即被乘数总是指定为累加器AX或AL的内容.

3. 16位乘法时,AX中为被乘数.8位乘法时,AL为被乘数.当16位乘法时,32位的乘积存于DX及AX中;8位乘法的16位乘积存于AX中.

4. 操作过程: 字节相乘:(AX)<--(AL)*OPRD,当结果的高位字节(AH)不等于0时,则CF=1、OF=1.

NEG 取补指令 NEG(NEGate)

格式: NEG OPRD

功能: 对操作数OPRD进行

取补操作,然后将结果送回说明:

1. OPRD为任意通用寄存器或存储器操作数.

2. 示例: (AL)=44H,取补后,(AL)=0BCH(-44H).

3. 本指令影响标志位CF、OF、SF、PF、ZF及AF.

OPRD.取补操作也叫作求补

操作,就是求一个数的相反

数的补码.

NOP 空操作指令 NOP

格式: NOP

功能: 本指令不产生任何

结果,仅消耗几个时钟周期

的时间,接着执行后续指令

,常用于程序的延时等.

说明: 本指令不影响标志位.

NOT 逻辑非运算指令 NOT

格式: NOT OPRD

功能: 完成对操作数按位

求反运算(即0变1,1变0),

结果关回原操作数. 说明:

1. 其中OPRD可为任一通用寄存器或存储器操作数.

2. 本指梳令可以进行字或字节‘非’运算.

3. 本指令不影响标志位.

OR 逻辑或指令 OR

格式: OR OPRD1,OPRD2

功能: OR指令完成对两个

操作数按位的‘或’运算,

结果送至目的操作数中,本

指令可以进行字节或字的

‘或’运算.

OPRD1<--OPRD1 OR OPRD2. 说明:

1. 其中OPRD1,OPRD2含义与AND指令相同,对标志位的影响也与AND指令相同.

2. 两数相或,有一个数为真则值为真.

OUT 输出指令 OUT

格式: OUT n,AL

;(n)<--(AL)

功能: 输出指令说明:

1. OUT n,AX ;(n+1),(n)<--(AX)

OUT DX,AL ;[(DX)]<--(AL)

OUT DX,AX ;[(DX)+1],[(DX)]<--(AX)

2. 输入指令及输出指令对标志位都不影响.

POP 堆栈操作指令 PUSH和POP 格式: PUSH OPRD

POP OPRD

功能: 实现压入操作的指

令是PUSH指令;实现弹出操

作的指令是POP指令. 说明:

1. OPRD为16位(字)操作数,可以是寄存器或存储器操作数.

2. POP指令的操作过程是: POP

OPRD:OPRD<--((SP)),(SP)<--(SP)+2

它与压入操作相反,是先弹出栈顶的数顶,然后再修改指针SP 的内容.

3. 示例: POP AX

POP DS

POP DATA1 POP ALFA[BX][DI]

4. PUSH和POP指令对状态标志位没有影响.

POPF 标志传送指令 POPF

格式: POPF

功能: 本指令的功能与

PUSHF相反,在子程序调用

和中断服务程序中,往往用

PUSHF指令保护FLAG的内

容,用POPF指令将保护的

FLAG内容恢复. 说明: 如果对堆栈中的原FLAG内容进行修改,如对TF等标志位进行修改,然后再弹回标志位寄存器FLAG.这是通过指令修改TF标志的唯一方法.

PUSH 堆栈操作指令 PUSH和POP 格式: PUSH OPRD

POP OPRD

功能: 实现压入操作的指

令是PUSH指令;实现弹出操

作的指令是POP指令. 说明:

1. OPRD为16位(字)操作数,可以是寄存器或存储器操作数.

2. PUSH的操作过程是: (SP)<--(SP)-2,((sp))<--OPRD 即

先修改堆栈指针SP(压入时为自动减2),然后,将指定的操作

数送入新的栈顶位置.

此处的((SP))<--OPRD,也可以理解为:

[(SS)*16+(SP)]<--OPRD 或 [SS:SP]<--OPRD

PUSHF 标志传送指令 PUSHF

格式: PUSHF

功能: 本指令可以把标志

寄存器的内容保存到堆栈

中去

RCL 循环移位指令

格式: ROL OPRD1,COUNT ;

不含进位标志位CF在循环

中的左循环移位指令. 说明:

1. 本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF 取决于移位一次后符号位是否改变,如改变,则OF=1.

2. 由于是循环移位,所以对字节移位8次; 对字移位16次,

ROR OPRD1,COUNT ;不含进位示志位CF在循环中的右循环移位指令.

RCL OPRD1,COUNT ;带进位的左循环移位指令. RCR OPRD1,COUNT ;带进位的右循环移位指令. 就可恢复为原操作数.由于带CF的循环移位,可以将CF的内容移入,

所以可以利用它实现多字节的循环.

RCR 循环移位指令

格式: ROL OPRD1,COUNT ;

不含进位标志位CF在循环

中的左循环移位指令.

ROR OPRD1,COUNT ;不含进

位示志位CF在循环中的右

循环移位指令.

RCL OPRD1,COUNT ;带进位

的左循环移位指令.

RCR OPRD1,COUNT ;带进位

的右循环移位指令. 说明:

1. 本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF 取决于移位一次后符号位是否改变,如改变,则OF=1.

2. 由于是循环移位,所以对字节移位8次; 对字移位16次,就可恢复为原操作数.由于带CF的循环移位,可以将CF的内容移入,所以可以利用它实现多字节的循环.

注意: 以上程序中的指令SHR AL,CL如改为SAR AL,CL,虽然最高4位可移入低4位,但最高位不为0,故应加入一条指令AND AL,0FH.否则,若最高位不为0时,将得到错误结果.

REP 重复前缀的说明

格式: REP ;CX<>0 重复执

行字符串指令 REPZ/REPE

;CX<>0 且ZF=1重复执行

字符串指令

REPNZ/REPNE ;CX<>0 且ZF

=0重复执行字符串指令

功能: 在串操作指令前加

上重复前缀,可以对字符串

进重复处理.由于加上重复

前缀后,对应的指令代码是

不同的,所以指令的功能便

具有重复处理的功能,重复

的次数存放在CX寄存器中. 说明:

1. REP与MOVS或STOS串操作指令相结合使用,完成一组字符的传送或建立一组相同数据的字符串.

2. REPZ/REPE常用与CMPS串操作指令结合使用, 可以完成两组字符串的比较.

3. REPZ/REPE常与SCAS指令结合使用,可以完成在一个字符串中搜索一个关键字.

4. REPNZ/REPNE与CMPS指令结合使用,表示当串未结束(CX=1)且当对应串元素不相同(ZF=0)时,继续重复执行串比较指令.

REPE 重复前缀的说明

格式: REP ;CX<>0 重复执

行字符串指令 REPZ/REPE

;CX<>0 且ZF=1重复执行

字符串指令

REPNZ/REPNE ;CX<>0 且ZF

=0重复执行字符串指令

功能: 在串操作指令前加

上重复前缀,可以对字符串

进重复处理.由于加上重复

前缀后,对应的指令代码是

不同的,所以指令的功能便

具有重复处理的功能,重复

的次数存放在CX寄存器中. 说明:

1. REPZ/REPE常用与CMPS串操作指令结合使用, 可以完成两组字符串的比较.

2. REPZ/REPE常与SCAS指令结合使用,可以完成在一个字符串中搜索一个关键字.

3. REPNZ/REPNE与CMPS指令结合使用,表示当串未结束(CX=1)且当对应串元素不相同(ZF=0)时,继续重复执行串比较指令.

4. REPNZ/REPNE与SCAS指令结合使用,表示串未结束(CX=1)且当关键字与串元素不相同(ZF=0)时,继续重复执行串搜索指令.

REPNE 重复前缀的说明

格式: REP ;CX<>0 重复执

行字符串指令

REPZ/REPE ;CX<>0 且ZF=

1重复执行字符串指令

REPNZ/REPNE ;CX<>0 且ZF

=0重复执行字符串指令说明:

1. REPZ/REPE常用与CMPS串操作指令结合使用, 可以完成两组字符串的比较.

2. REPZ/REPE常与SCAS指令结合使用,可以完成在一个字符串中搜索一个关键字.

3. REPNZ/REPNE与CMPS指令结合使用,表示当串未结束(CX=1)且当对应串元素不相同(ZF=0)时,继续重复执行串比较指令.

4. REPNZ/REPNE与SCAS指令结合使用,表示串未结束(CX=1)且当关键字与串元素不相同(ZF=0)时,继续重复执行串搜索指令.

REPNZ 重复前缀的说明

格式: REP ;CX<>0 重复执

行字符串指令

REPZ/REPE ;CX<>0 且ZF=说明:

1. REPZ/REPE常用与CMPS串操作指令结合使用, 可以完成两组字符串的比较.

2. REPZ/REPE常与SCAS指令结合使用,可以完成在一个字符

1重复执行字符串指令REPNZ/REPNE ;CX<>0 且ZF =0重复执行字符串指令串中搜索一个关键字.

3. REPNZ/REPNE与CMPS指令结合使用,表示当串未结束(CX=1)且当对应串元素不相同(ZF=0)时,继续重复执行串比较指令.

4. REPNZ/REPNE与SCAS指令结合使用,表示串未结束(CX=1)且当关键字与串元素不相同(ZF=0)时,继续重复执行串搜索指令.

REPZ 重复前缀的说明

格式: REP ;CX<>0 重复执

行字符串指令

REPZ/REPE ;CX<>0 且ZF=

1重复执行字符串指令

REPNZ/REPNE ;CX<>0 且ZF

=0重复执行字符串指令

功能: 在串操作指令前加

上重复前缀,可以对字符串

进重复处理.由于加上重复

前缀后,对应的指令代码是

不同的,所以指令的功能便

具有重复处理的功能,重复

的次数存放在CX寄存器中. 说明:

1. REPZ/REPE常用与CMPS串操作指令结合使用, 可以完成两组字符串的比较.

2. REPZ/REPE常与SCAS指令结合使用,可以完成在一个字符串中搜索一个关键字.

3. REPNZ/REPNE与CMPS指令结合使用,表示当串未结束(CX=1)且当对应串元素不相同(ZF=0)时,继续重复执行串比较指令.

4. REPNZ/REPNE与SCAS指令结合使用,表示串未结束(CX=1)且当关键字与串元素不相同(ZF=0)时,继续重复执行串搜索指令.

RET 返回指令 RET

格式: RET

功能: 当调用的过程结束

后实现从过程返回至原调

用程序的下一条指令,本指

令不影响标志位. 说明:

由于在过程定义时,已指明其近(NEAR)或远(FAR)的属性,所以RET指令根据段内调用与段间调用,执行不同的操作

对段内调用: 返回时,由堆栈弹出一个字的返回地址的段内偏移量至IP.

对段外调用: 返回时,由堆栈弹出的第一个字为返回地址的段内偏移量,将其送入IP中,由堆栈弹出第二个字为返回地址的段基址,将其送入CS中.

ROL 循环移位指令

格式: ROL OPRD1,COUNT ;

不含进位标志位CF在循环

中的左循环移位指令.

ROR OPRD1,COUNT ;不含进

位示志位CF在循环中的右

循环移位指令.

RCL OPRD1,COUNT ;带进位

的左循环移位指令.

RCR OPRD1,COUNT ;带进位

的右循环移位指令. 说明:

1. 本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF 取决于移位一次后符号位是否改变,如改变,则OF=1.

2. 由于是循环移位,所以对字节移位8次; 对字移位16次,就可恢复为原操作数.由于带CF的循环移位,可以将CF的内容移入,

所以可以利用它实现多字节的循环.

ROR 循环移位指令

格式:

ROL OPRD1,COUNT ;不含进

位标志位CF在循环中的左

循环移位指令.

ROR OPRD1,COUNT ;不含进

位示志位CF在循环中的右

循环移位指令.

RCL OPRD1,COUNT ;带进位

的左循环移位指令.

RCR OPRD1,COUNT ;带进位

的右循环移位指令. 说明:

1. 本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF 取决于移位一次后符号位是否改变,如改变,则OF=1.

2. 由于循环移位,所以对字节移位8次; 对字移位16次,可恢复为原操作数.

SAHF 标志传送指令 SAHF

格式: SAHF

功能: 将AH存至FLAG低8

位说明: 本指令将用AH的内容改写FLAG标志寄存器中的SF、ZF、AF、PF、和CF标志,从而改变原来的标志位.

SAL 算术左移指令 SAL(Shift

Arithmetic Left)

格式: SAL OPRD1,COUNT

功能: 其中OPRD1,COUNT与

指令SHL相同.本指令与说明:

1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.

SHL的功能也完全相同,这是因为逻辑左移指令与算术左移指令所要完成的操作是一样的.

SAR 算术右移指令 SAR

格式: SAR OPRD1,COUNT

功能: 本指令通常用于对

带符号数减半的运算中,因

而在每次右移时,保持最高

位(符号位)不变,最低位右

移至CF中. 说明:

1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.

SBB 带借位减去指令

SBB(SuBtraction with

Borrow)格式: SBB

OPRD1,OPRD2

功能: 是进行两个操作数

的相减再减去CF进位标志

位,即从

OPRD1<--OPRD1-OPRD2-CF,

其结果放在OPDR1中. 说明:

示例 SBB DX,CX SBB AX,DATA1

SBB BX,2000H

SBB ALFA[BX+SI],SI SBB BETAP[DI,030AH

SCAS 字符串搜索指令 SCAS

格式: SCAS OPRD

SCASB

SCASW

功能: 把AL(字节串)或AX(

字串)的内容与由DI寄存器

寻址的目的串中的数据相

减,结果置标志位,但不改

变任一操作数本身.

地址指针DI自动调整. 说明:

1. 其中OPRD为目的串符号地址.

2. 本指令影响标志AF、CF、OF、PF、SF、ZF.该指令可查找字符串中的一个关键字,只需在本指令执行前,

把关键字放在AL(字节)或AX(字串 )中,用重复前缀可在整串中查找.

指令中不使用操作数时,可用指令格式SCASB,SCASW,分别表示字节串或字串搜索指令.

SCASB 字符串搜索指令 SCAS

格式: SCAS OPRD

SCASB

SCASW

功能: 把AL(字节串)或AX(

字串)的内容与由DI寄存器

寻址的目的串中的数据相

减,结果置标志位,但不改

变任一操作数本身.

地址指针DI自动调整. 说明:

1. 其中OPRD为目的串符号地址.

2. 本指令影响标志AF、CF、OF、PF、SF、ZF.该指令可查找字符串中的一个关键字,只需在本指令执行前,

把关键字放在AL(字节)或AX(字串 )中,用重复前缀可在整串中查找.

指令中不使用操作数时,可用指令格式SCASB,SCASW,分别表示字节串或字串搜索指令.

SCASW 字符串搜索指令 SCAS

格式: SCAS OPRD

SCASB

SCASW

功能: 把AL(字节串)或AX(

字串)的内容与由DI寄存器

寻址的目的串中的数据相

减,结果置标志位,但不改

变任一操作数本身.

地址指针DI自动调整. 说明:

1. 其中OPRD为目的串符号地址.

2. 本指令影响标志AF、CF、OF、PF、SF、ZF.该指令可查找字符串中的一个关键字,只需在本指令执行前,

把关键字放在AL(字节)或AX(字串 )中,用重复前缀可在整串中查找.

指令中不使用操作数时,可用指令格式SCASB,SCASW,分别表示字节串或字串搜索指令.

SHL 逻辑左移指令 SHL(Shift

logical left)

格式: SHL OPRD1,COUNT

功能: 对给定的目的操作

数左移COUNT次,每次移位

时最高位移入标志位CF中,

最低位补零. 说明:

1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.

3. 例如: SHL AL,1

SHL CX,1

SHL ALFA[DI] 或者:

MOV CL,3

SHL DX,CL

SHL ALFA[DI],CL

SHR 逻辑右移指令 SHR

格式: SHR OPRD1,COUNT

功能: 本指令实现由COUNT

决定次数的逻辑右移操作,

每次移位时,最高位补0,最

低位移至标志位CF中. 说明:

1. 其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2. COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.

3. 影响标志位OF,PF,SF,ZF,CF.

STC 处理器控制指令-标志位

操作指令

格式:

CLC ;置CF=0

STC ;置CF=1

CMC ;置CF=(Not CF)进位标

志求反

CLD ;置DF=0

STD ;置DF=1

CLI ;置IF=0,CPU禁止响

应外部中断

STI ;置IF=1,使CPU允许

向应外部中断

功能: 完成对标志位的置

位、复位等操作. 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.

STD 处理器控制指令-标志位操作指令

格式:

CLC ;置CF=0

STC ;置CF=1

CMC ;置CF=(Not CF)进位标

志求反

CLD ;置DF=0

STD ;置DF=1

CLI ;置IF=0,CPU禁止响

应外部中断

STI ;置IF=1,使CPU允许

向应外部中断

功能: 完成对标志位的置

位、复位等操作. 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.

STI 处理器控制指令-标志位

操作指令

格式:

CLC ;置CF=0

STC ;置CF=1

CMC ;置CF=(Not CF)进位标

志求反

CLD ;置DF=0

STD ;置DF=1

CLI ;置IF=0,CPU禁止响

应外部中断

STI ;置IF=1,使CPU允许

向应外部中断

功能: 完成对标志位的置

位、复位等操作. 说明: 例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.

STOS 字符串存储指令 STOS

格式: STOS OPRD

功能: 把AL(字节)或AX(字

)中的数据存储到DI为目的

串地址指针所寻址的存储

器单元中去.指针DI将根据

DF的值进行自动调整. 说明:

1. 其中OPRD为目的串符号地址.

2. 本指令不影响标志位.当不使用操作数时,可用STOSB或STOSW分别表示字节串或字串的操作.

SUB 减法指令SUB(SUBtract) 格式: SUB OPRD1,OPRD2

功能: 两个操作数的相减,

即从OPRD1中减去OPRD2,

其结果放在OPDR1中. 说明:

示例 SUB DX,CX

SUB [BX+25],AX

SUB DI,ALFA[SI]

SUB CL,20

SUB DATA1[DI][BX],20A5H

TEST 测试指令 TEST

格式: TEST OPRD1,OPRD2

功能: 其中OPRD1、OPRD2

的含义同AND指令一样,也

是对两个操作数进行按位

的'与'运算,唯一不同之处

是不将'与'的结

果送目的操作数,即本指令

对两个操作数的内容均不

进行修改,仅是在逻辑与操

作后,对标志位重新置位. 说明: TEST与AND指令的关系,有点类似于CMP与SUB指令之间的关系.

WAIT 处理器等待指令 WAIT

格式: WAIT

功能: 本指令将使处理器

检测TEST端脚,当TEST有

效时,则退出等待状态执行

下条指令,否则处理器处于

等待状态,直到TEST有效.

说明: 本指令不影响标志位.

XCHG 数据交换指令 XCHG

格式: XCHG OPRD1,OPRD2

其中的OPRD1为目的操作数

,OPRD2为源操作数

功能: 将两个操作数相互

交换位置,该指令把源操作

数OPRD2与目的操数OPRD1

交换. 说明:

1. OPRD1及OPRD2可为通用寄存器或存储器,但是两个存储器之间是不能用XCHG指令实现的.

2. 段寄存器内容不能用XCHG指令来交换.

3. 若要实现两个存储器操作数DATA1及DATA2的交换,可用以下指令实现:

示例: PUSH DATA1

PUSH DATA2

POP DATA1

POP DATA2

4. 本指令不影响状态标志位.

XLAT 查表指令 XLAT

格式: XLAT TABLE其中

TABLE为一待查表格的首地

址.

功能: 把待查表格的一个

字节内容送到AL累加器中. 说明:

1. 在执行该指令前,应将TABLE先送至BX寄存器中,然后将待查字节与在表格中距表首地址位移量送AL,即

(AL)<--((BX)+(AL)).

2. 本指令不影响状态标位,表格长度不超过256字节.

XOR 逻辑异或运算指令 XOR

格式: XOR OPRD1,OPRD2

功能: 实现两个操作数按

位‘异或’运算,结果送至

目的操作数中.

OPRD1<--OPRD1 XOR OPRD2 说明:

1. 其在OPRD1、OPRD2的含义与AND指令相同,对标志位的影响与与AND指令相同.

2. 相异为真,相同为假.

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

汇编语言指令表

汇编语言指令表文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

伪指令 1、定位伪指令 ORG m 2、定义字节伪指令 DB X1,X2,X3,…,Xn 3、字定义伪指令 DW Y1,Y2,Y3,…,Yn 4、汇编结束伪指令 END 寻址方式 MCS-51单片机有五种寻址方式: 1、寄存器寻址 2、寄存器间接寻址 3、直接寻址 4、立即数寻址 5、基寄存器加变址寄存器间接寻址 6、相对寻址 7、位寻址 数据传送指令 一、以累加器A为目的操作数的指令(4条) MOV A,Rn ;(Rn)→A n=0~7 MOV A,direct ;( direct )→A MOV A,@Ri ;((Ri))→A i=0~1 MOV A,#data ; data →A 二、以Rn为目的操作数的指令(3条) MOV Rn ,A;(A)→ Rn MOV Rn ,direct;( direct )→ Rn MOV Rn ,#data; data → Rn 三、以直接寻址的单元为目的操作数的指令(5条) MOV direct,A;(A)→direct MOV direct,Rn;(Rn)→direct MOV direct,direct ;(源direct)→目的direct MOV direct,@Ri;((Ri))→direct MOV direct,#data; data→direct 四、以寄存器间接寻址的单元为目的操作数的指令(3条) MOV @Ri,A;(A)→(Ri) MOV @Ri,direct;(direct)→(Ri) MOV @Ri,#data; data→(Ri) 五、十六位数据传送指令(1条) MOV DPTR,#data16;dataH→DPH,dataL →DPL

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O

INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

汇编语言指令

汇编语言指令集 数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2

格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL 影响标志: C,P,Z,S,O ROR,ROL,RCR,RCL

汇编指令大全

ORG 0000H NOP ;空操作指令 AJMP L0003 ;绝对转移指令 L0003: LJMP L0006 ;长调用指令 L0006: RR A ;累加器A内容右移(先置A为88H) INC A ; 累加器A 内容加1 INC 01H ;直接地址(字节01H)内容加1 INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1 ;(设R0=02H,02H=03H,单步执行后02H=04H) INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1 ;(设R1=02H,02H=03H,单步执行后02H=04H) INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少) INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用 S0019: LCALL S001C ;长调用 S001C: RRC A ;累加器A的内容带进位位右移(设A=11H,C=0 ;单步执行后查A和C内容为多少) DEC A ;A的内容减1 DEC 01H ;直接地址(01H)内容减1 DEC @R0 ;R0间址减1,即R0的内容为地址,该地址的内容减1 DEC @R1 ; R1间址减1 DEC R0 ; R0内容减1 DEC R1 ; R1内容减1 DEC R2 ; R2内容减1 DEC R3 ; R3内容减1 DEC R4 ; R4内容减1 DEC R5 ; R5内容减1 DEC R6 ; R6内容减1 DEC R7 ; R7内容减1 JB 20H,L002D;如果位(20H,即24H的0位)为1则转移 L002D: AJMP L0017 ;绝对转移 RET ;子程序返回指令 RL A ;A左移 ADD A,#01H ;A的内容与立即数(01H)相加 ADD A,01H ; A的内容与直接地址(01H内容)相加 ADD A,@R0 ; A的内容与寄存器R0的间址内容相加 ADD A,@R1 ; A的内容与寄存器R1的间址内容相加

一些常用的汇编语言指令

汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助! 数据传送指令 MOV:寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。 XCHG交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。 LEA 16位寄存器存储器操作数传送有效地址指令:必须是一个16位寄存器和存储器操作数。 LDS 16位寄存器存储器操作数传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS中。 LES :同上,只是16位段基址送ES中。 堆栈操作指令 PUSH 操作数,操作数不能使用立即数, POP 操作数,操作数不能是CS和立即数 标志操作指令 LAHF:把标志寄存器低8位,符号SF,零ZF,辅助进位AF,奇偶PF,进位CF传送到AH 指定的位。不影响标志位。 SAHF:与上相反,把AH中的标志位传送回标志寄存器。 PUSHF:把标志寄存器内容压入栈顶。 POPF:把栈顶的一个字节传送到标志寄存器中。 CLC:进位位清零。 STC:进位位为1。 CMC:进位位取反。 CLD:使方向标志DF为零,在执行串操作中,使地址按递增方式变化。 STD:DF为1。 CLI:清中断允许标志IF。Cpu不相应来自外部装置的可屏蔽中断。 STI:IF为1。 加减运算指令

注意:对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。 ADD。 ADC:把进位CF中的数值加上去。 INC:加1指令 SUB。 SBB:把进位CF中数值减去。 DEC:减1指令。 NEG 操作数:取补指令,即用0减去操作数再送回操作数。 CMP:比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF(零)是否被置1判断相等;如果两者是无符号数,可根据CF判断大小;如果两者是有符号数,要根据SF和OF判断大小。 乘除运算指令 MUL 操作数:无符号数乘法指令。操作数不能是立即数。操作数是字节与AL中的无符号数相乘,16位结果送AX中。若字节,则与AX乘,结果高16送DX,低16送AX。如乘积高半部分不为零,则CF、OF为1,否则为0。所以CF和OF表示AH或DX中含有结果的有效数。IMUL 操作数:有符号数乘法指令。基本与MUL相同。 DIV 操作数:被除数是在AX(除数8位)或者DX和AX(除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV:有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。 符号扩展指令 CBW,CWD:把AL中的符号扩展到寄存器AH中,不影响各标志位。CWD则把AX中的符号扩展到DX,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。 逻辑运算指令与位移指令 注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。 NOT:取反,不影响标志位。 AND 操作数1 操作数2:操作结果送错作数1,标志CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志) SF(符号)反映运算结果,AF(辅助进位)未定义。自己与自己AND值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1)OR 操作数1 操作数2:自己与自己OR值不变,CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志)SF(符号)反映运算结果,AF(辅助进位)未定义。她使用于将若干位置1:

PIC8位单片机汇编语言常用指令的识读

PIC8位单片机汇编语言常用指令的识读(上) 各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。 PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC 系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。 一、PIC汇编语言指令格式 PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号操作码助记符操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。 1 标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。 书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。 2 操作码助记符该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。 3 操作数由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。 指令的操作数项也是可选项。 PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。 4 注释用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。 二、清零指令(共4条) 1 寄存器清零指令 实例:CLRW;寄存器W被清零 说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。 2 看门狗定时器清零指令。 实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)

微机原理与接口技术汇编语言指令详解吐血版

第一讲 第三章 指令系统--寻址方式 回顾: 8086/8088的内部结构和寄存器,地址分段的概念,8086/8088的工作过 程。 重点和纲要:指令系统--寻址方式。有关寻址的概念;6种基本的寻址方式及 有效地址的计算。 教学方法、实施步骤 时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等 讲 授 40” ×2 提 问 3” ×2 小 结 2” ×2 讲授内容: 3.1 8086/8088寻址方式 首先,简单讲述一下指令的一般格式: 操作码 操作数 …… 操作数 计算机中的指令由操作码字段和操作数字段组成。 操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。 操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。 寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。8086/8088的基本寻址方式有六种。 1.立即寻址 所提供的操作数直接包含在指令中。它紧跟在操作码的后面,与操作码一起放在代码段区域中。如图所示。 例如:MOV AX ,3000H

立即数可以是8位的,也可以是16位的。若是16位的,则存储时低位在前,高位在后。 立即寻址主要用来给寄存器或存储器赋初值。 2.直接寻址 操作数地址的16位偏移量直接包含在指令中。它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。如图2-2所示。 例如: MOV AX,DS:[2000H]; 图2-2 (对DS来讲可以省略成 MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。 8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。此时只要在指令中指明是段超越的,则16位地址偏移量可以与CS或SS或ES相加,作为操作数的地址。 MOV AX,[2000H] ;数据段 MOV BX,ES:[3000H] ;段超越,操作数在附加段 即绝对地址=(ES)*16+3000H 3.寄存器寻址 操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。 例如:MOV DS,AX MOV AL,BH 4.寄存器间接寻址 操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄

汇编语言手册

寄存器与存储器 1. 寄存器功能 . 寄存器的一般用途和专用用途 . CS:IP 控制程序执行流程 . SS:SP 提供堆栈栈顶单元地址 . DS:BX(SI,DI) 提供数据段内单元地址 . SS:BP 提供堆栈内单元地址 . ES:BX(SI,DI) 提供附加段内单元地址 . AX,CX,BX和CX寄存器多用于运算和暂存中间计算结果,但又专用于某些指令(查阅指令表)。. PSW程序状态字寄存器只能通过专用指令(LAHF, SAHF)和堆栈(PUSHF,POPF)进行存取。 2. 存储器分段管理 . 解决了16位寄存器构成20位地址的问题 . 便于程序重定位 . 20位物理地址=段地址* 16 + 偏移地址 . 程序分段组织: 一般由代码段,堆栈段,数据段和附加段组成,不设置堆栈段时则使用系统内部的堆栈。 3. 堆栈 . 堆栈是一种先进后出的数据结构, 数据的存取在栈顶进行, 数据入栈使堆栈向地址减小的方向扩展。 . 堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。 .堆栈总是以字为单位存取 指令系统与寻址方式 1. 指令系统 . 计算机提供给用户使用的机器指令集称为指令系统,大多数指令为双操作数指令。执行指令后,一般源操作数不变,目的操作数被计算结果替代。 . 机器指令由CPU执行,完成某种运算或操作,8086/8088指令系统中的指令分为6类: 数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。 2. 寻址方式 . 寻址方式确定执行指令时获得操作数地址的方法 . 分为与数据有关的寻址方式(7种)和与转移地址有关的寻址方式(4)种。 . 与数据有关的寻址方式的一般用途: (1) 立即数寻址方式--将常量赋给寄存器或存储单元 (2) 直接寻址方式--存取单个变量 (3) 寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度 (4) 寄存器间接寻址方式--访问数组元素 (5) 变址寻址方式 (6) 基址变址寻址方式 (7) 相对基址变址寻址方式(5),(6),(7)都便于处理数组元素 . 与数据有关的寻址方式中,提供地址的寄存器只能是BX,SI,DI或BP . 与转移地址有关的寻址方式的一般用途: (1) 段内直接寻址--段内直接转移或子程序调用 (2) 段内间接寻址--段内间接转移或子程序调用

汇编语言的各条指令

常用命令 数据传送指令 一通用数据传送指令 MOV指令为双操作数指令,两个操作数中不能全为内存操作数 格式:MOV DST,SRC 执行操作:dst = src 注:1.目的数可以是通用寄存器,存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作。 格式:PUSH SRC //Word 执行操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) 注:1.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。

2.入栈时高位字节先入栈,低位字节后入栈。 格式:POP DST //Word 执行操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 注:1.出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。 2.执行POP SS指令后,堆栈区在存储区的位置要改变。 3.执行POP SP 指令后,栈顶的位置要改变。 XCHG(eXCHanG)交换指令: 将两操作数值交换。 格式:XCHG OPR1,OPR2 //Byte/Word 执行的操作:(OPR1)<-->(OPR2) 注:1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 存储器与存储器之间不能交换数据。 二累加器专用传送指令 IN输入指令 长格式为:IN AL,PORT(字节) IN AX,PORT(字) 执行的操作:(AL)<-(PORT)(字节)

8088汇编语言指令

8088指令系统总结 预备知识:符号含意、数据传送原则 符号含意 符号含意 opr 操作数 src 源操作数 dst 目的操作数 mem 存储器 im 立即数 seg 段寄存器 reg 通用寄存器 EA 偏移地址 PA 物理地址 nn直接地址DISP8:8位偏移地址DISP16:16位偏移地址 数据传送原则 口诀数据传送原则 寄段储间互传数,seg、reg、mem之间的数据可以相互传送。 立即只入寄和储。im可入reg、mem 只有寄间互换数,reg之间的数据可以传送。Mem间、seg间不可自传CS立即不可目,CS和立即数不可入,不能当目的操作数 8088指令系统 8088指令系统分六大类 一、数据传送指令 二、算术运算指令 三、逻辑运算与位移指令 四、串操作指令 五、控制与转移指令 六、CPU控制指令 一、数据传送指令 1.通用传送指令 (1)传送指令MOV dst, src功能:dst←src (2)堆栈操作指令人W PUSH src作用:SP←SP-2 ((SP+1)+SP)←src src(reg seg mem) POP dst 作用:dst←((SP+1)+SP)SP←SP-2 dst(reg seg mem)

(3)交换指令XCHG OPR1,OPR2 OPR1←→OPR2 2.累加器传送指令 (1)输入输出指令 256B短格式:直接寻址,64K长格式:直接、间接寻址,PORT为8位口地址输入指令:直接寻址IN AX,PORT IN AL,PORT 间接寻址IN AX,DX IN AL,DX 输出指令:直接寻址OUT AX,PORT OUT AL,PORT 间接寻址OUT AX,DX OUT AL,DX (2)换码指令XLAT AL←(BX+AL)(BX)为mem地址 3.地址传送指令 (1)有效地址传送寄存器 LEA reg16, mem作用:mem的EA→reg16 (2)指针送寄存器和DS指令 LDS reg16, mem32 作用:reg16←mem32的低字高字→DS (3)指针送寄存器和有ES指令 LES reg16, mem32 作用:reg16←mem32的低字高字→ES 4.标志寄存器传送指令 (1)取标志指令:LAHF F的低字节→AH (2)置标志指令:SAHF AH→flag的低字节 (3)标志入栈指令:PUSHF SP-2→SP F→(SP+1):SP (4)标志出栈指令:POPF (SP+1):SP→F SP+2→SP 二、算术运算指令 1.加法类指令(Add)opr-reg mem B/W (1)不带进位加法ADD dst, src dst←dst+src 影响OSZAPC (2)带进位加法ADC dst, src dst←dst+src+CF影响OSZAPC (3)加1指令INC opr opr←opr+1影响OSZP (4)组合十进制调整DAA放在ADD后 (5)非组合十进制调整AAA放在ADC后 原理:2个十进制数相加,可能出现非法数(A到F),需用调整指令,进行加6调整变成合法十进制数。十进制=BCD组合=压缩组合BCD占4位非组合BCD占8位 2 . 减法类指令(substract) (1)减法指令SUB dst, src;dst←dst-src影响标志位OSZAPC (2)带借位减法指令SBB dst, src;dst←dst-src-CF影响标志位

常见汇编语言指令解释:

PC是一个16位的程序计数器。用于存放和指示下一条要执行的指令的地址。寻址范围达64KB。PC有自动加1功能,以实现程序的顺序执行。PC没有地址,是不可寻址的,无法用指令对它进行读写。但在执行转移、调用、返回等指令时能自动改变其内容,以改变程序的执行顺序。 参数代表的意义: 1、Rn 表示R0~R7中的一个 2、#data 表示8位的数值 00H~FFH 3、direct 表示8位的地址 00H~FFH(指的是内部RAM或SFR的地址) 4、@Ri 表示寄存器间接寻址只能是R0或者R1 5、@DPTR 表示数据指针间接寻址 6、bit 表示位地址 7、$ 表示当前地址 常见汇编语言指令解释: 寄存器寻址 MOV A,R1将R1中的数值赋予A 直接寻址 MOV A,3AH将地址3AH中的数值赋予A 立即寻址 MOV A,#3AH将3AH数值赋予A

寄存器间址 MOV A,@R0 将 R0中地址的数值赋予A 变址寻址 MOVC A,@A+DPTR以A中的数值为地址偏移量进行查表 相对寻址 AJMP MATN跳转到行号为MATN处 位寻址 MOV C,7FH 将位地址7FH的数值赋予C MOV A,#3AH数据传输、赋值命令 PUSH direct将direct为地址的数值压入堆栈中 POP direct将direct为地址的数值弹出堆栈 XCH A,direct将direct中的数值与A进行交换 ADD A,direct将direct中的数值与 INC direct将direct中的数值加1 SUBB A,direct将A中的数值减去direct中的数值和Cy值,并保存在A中,如果想使用不带Cy减法,可以在运算前对Cy清零:CLR C DEC direct将direct中的数值减1 DA A 用于对BCD码加减法后进行10进制调整 MUL A B将A和B相乘,并把高八位放在B中,低八位放在A中 DIV A B将A和B相除,并把商放在A中,余数放在B中 ANL A,direct将A与direct中的数值进行与运算,结果保留在A 中(与运算规律:有0出0,全1出1) ORL A,direct将A与direct中的数值进行或运算,结果保留在A中(或运算规律:有1出1,全0出0) XRL A,direct将A与direct中的数值进行异或运算,结果保留在A 中(异或运算规律:全0出0,全1出0,01、10出1)

汇编指令1

汇编语言指令集 一、数据传输指令 1. 通用数据传送指令. MOV(MOVe) 传送字或字节. MOVS(MOVe String) 串传送指令 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 (eXCHanG)交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD先交换再累加.( 结果在第一个操作数里) XLAT(TRANSLATE) 字节查表转换. ── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535. 3. 目的地址传送指令. LEA (Load Effective Address)装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS (Load DS with pointer)传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES (Load ES with pointer)传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI. 4. 标志传送指令. LAHF (Load AH with Flags)标志寄存器传送,把标志装入AH. SAHF (Store AH into Flgs)标志寄存器传送,把AH内容装入标志寄存器. PUSHF (PUSH the Flags)标志入栈. POPF (POP the Flags)标志出栈.

相关文档