汇编语言指令

合集下载

16位与32位汇编语言常用指令总结

16位与32位汇编语言常用指令总结

16位与32位汇编语言常用指令总结在计算机编程领域,汇编语言被广泛应用于底层程序设计,直接操作计算机硬件。

其中,16位和32位汇编语言是常见的两种类型。

本文将总结这两种汇编语言中常用的指令,帮助读者更好地理解和应用它们。

一、16位汇编语言常用指令1. 数据传送指令- MOV:将数据从一个寄存器或内存位置传送到另一个寄存器或内存位置。

- XCHG:交换两个寄存器或内存位置的数据。

2. 算术运算指令- ADD/SUB:实现加法和减法运算。

- MUL/IMUL:实现无符号与有符号乘法运算。

- DIV/IDIV:实现无符号与有符号除法运算。

3. 逻辑运算指令- AND/OR/XOR:实现与、或、异或逻辑运算。

- NOT:对操作数进行按位取反操作。

4. 条件转移指令- JMP:无条件跳转到指定地址。

- JZ/JNZ:根据零标志位(ZF)的值进行跳转。

- JC/JNC:根据进位标志位(CF)的值进行跳转。

5. 循环指令- LOOP:根据计数器的值进行循环。

- JCXZ/JECXZ:根据CX/ECX寄存器的值进行循环。

二、32位汇编语言常用指令1. 数据传送指令- MOV:同16位汇编语言中的指令,用于数据传送。

- PUSH/POP:将数据推入栈或从栈中弹出。

2. 算术运算指令- ADD/SUB:同16位汇编语言中的指令,用于加法和减法运算。

- MUL/IMUL:同16位汇编语言中的指令,用于乘法运算。

- DIV/IDIV:同16位汇编语言中的指令,用于除法运算。

3. 逻辑运算指令- AND/OR/XOR:同16位汇编语言中的指令,用于逻辑运算。

- NOT:同16位汇编语言中的指令,用于按位取反。

4. 条件转移指令- JMP:同16位汇编语言中的指令,用于无条件跳转。

- JZ/JNZ:同16位汇编语言中的指令,根据零标志位(ZF)进行跳转。

- JB/JNB:根据低位借位标志位(CF)进行跳转。

5. 循环指令- LOOP:同16位汇编语言中的指令,用于循环操作。

常见汇编代码

常见汇编代码

常见汇编代码汇编语言是一种低级语言,主要用于编写计算机的指令集。

在程序开发和系统调试中,掌握常见的汇编代码是非常重要的。

本文将介绍一些常见的汇编代码及其用途。

一、数据传输指令1. MOV:将数据从一个位置复制到另一个位置。

例如,MOV AX, BX将BX寄存器中的数据复制到AX寄存器中。

2. XCHG:交换两个位置的数据。

例如,XCHG AX, BX将AX寄存器和BX寄存器中的数据进行交换。

3. PUSH:将数据推入栈中。

例如,PUSH AX将AX寄存器的数据推入栈中。

4. POP:将数据从栈中弹出。

例如,POP AX将从栈中弹出的数据存储到AX寄存器中。

二、算术指令1. ADD:将两个数相加并将结果存储在目标位置。

例如,ADD AX, BX将AX寄存器和BX寄存器中的数据相加,并将结果存储到AX寄存器中。

2. SUB:将两个数相减并将结果存储在目标位置。

例如,SUB AX, BX将AX寄存器中的数据减去BX寄存器中的数据,并将结果存储到AX寄存器中。

3. MUL:将两个数相乘并将结果存储在目标位置。

例如,MUL AX, BX将AX寄存器和BX寄存器中的数据相乘,并将结果存储到AX寄存器中。

4. DIV:将两个数相除并将结果存储在目标位置。

例如,DIV AX, BX将AX寄存器中的数据除以BX寄存器中的数据,并将商存储到AX寄存器中。

三、逻辑指令1. AND:对两个数进行逻辑与操作,并将结果存储在目标位置。

例如,AND AX, BX将AX寄存器和BX寄存器中的数据进行逻辑与操作,并将结果存储到AX寄存器中。

2. OR:对两个数进行逻辑或操作,并将结果存储在目标位置。

例如,OR AX, BX将AX寄存器和BX寄存器中的数据进行逻辑或操作,并将结果存储到AX寄存器中。

3. XOR:对两个数进行逻辑异或操作,并将结果存储在目标位置。

例如,XOR AX, BX将AX寄存器和BX寄存器中的数据进行逻辑异或操作,并将结果存储到AX寄存器中。

汇编语言程序设计基本命令

汇编语言程序设计基本命令

汇编语言程序设计基本命令汇编语言是一种底层的编程语言,直接操作计算机硬件,其指令由一系列的机器码组成。

在汇编语言程序设计中,我们需要了解一些基本的命令,包括数据传送指令、算术运算指令、控制转移指令等,下面就对这些命令做一详细的介绍。

1.数据传送指令在汇编语言中,数据传送指令用来将数据从一个位置复制到另一个位置,常用的数据传送指令有MOV、LEA和XCHG。

-MOV指令:将源操作数的值复制给目标操作数,格式为MOV目标操作数,源操作数。

-LEA指令:用来将有效地址(即内存中的地址)传送给寄存器,格式为LEA目标操作数,源操作数。

-XCHG指令:交换两个操作数的值,格式为XCHG目标操作数,源操作数。

2.算术运算指令在汇编语言中,我们可以使用一系列算术运算指令来对数据进行运算和处理,常见的算术运算指令有ADD、SUB、MUL和DIV等。

-ADD指令:用于进行加法运算,格式为ADD目标操作数,源操作数。

-SUB指令:用于进行减法运算,格式为SUB目标操作数,源操作数。

-MUL指令:用于进行乘法运算,格式为MUL目标操作数,源操作数。

-DIV指令:用于进行除法运算,格式为DIV目标操作数,源操作数。

控制转移指令用于改变程序的执行流程,常见的控制转移指令有JMP、JZ、JE、JNE等。

-JMP指令:用于无条件地跳转到目标地址继续执行,格式为JMP目标地址。

-JZ指令:用于当结果为零时跳转到目标地址继续执行,格式为JZ目标地址。

-JE指令:用于当结果相等时跳转到目标地址继续执行,格式为JE目标地址。

-JNE指令:用于当结果不相等时跳转到目标地址继续执行,格式为JNE目标地址。

4.逻辑运算指令逻辑运算指令用于对数据进行逻辑运算,常见的逻辑运算指令有AND、OR、XOR和NOT等。

-AND指令:对两个操作数的对应位进行与运算,格式为AND目标操作数,源操作数。

-OR指令:对两个操作数的对应位进行或运算,格式为OR目标操作数,源操作数。

常用汇编指令

常用汇编指令

常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。

在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。

本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。

一、数据传输指令1. MOV指令:MOV指令用于将数据从一个位置复制到另一个位置。

例如,MOV AX, BX将寄存器BX的内容复制到AX中。

2. LEA指令:LEA指令用于将内存地址加载到寄存器中。

例如,LEA BX, [SI+10]将[S1+10]的内存地址加载到寄存器BX中。

3. PUSH指令:PUSH指令用于将数据压入栈中。

例如,PUSH AX将AX中的数据压入栈中。

4. POP指令:POP指令用于从栈中弹出数据。

例如,POP BX将栈中的数据弹出到BX中。

二、算术运算指令1. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。

例如,ADD AX, BX将BX的值加到AX中。

2. SUB指令:SUB指令用于将源操作数的值从目标操作数中减去,并将结果存储在目标操作数中。

例如,SUB AX, BX从AX中减去BX的值。

3. MUL指令:MUL指令用于将源操作数与累加器中的值相乘,并将结果存储在累加器中。

例如,MUL BX将累加器的值与BX相乘。

4. DIV指令:DIV指令用于将累加器的值除以源操作数,并将商存储在累加器中,余数存储在另一个寄存器中。

例如,DIV BX将累加器的值除以BX。

三、逻辑运算指令1. AND指令:AND指令用于对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。

例如,AND AX, BX将AX与BX进行逻辑与操作。

2. OR指令:OR指令用于对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。

例如,OR AX, BX将AX与BX进行逻辑或操作。

3. NOT指令:NOT指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。

汇编的基本常用指令

汇编的基本常用指令

汇编的基本常用指令汇编语言是一种底层的程序设计语言,主要用于编写机器码指令。

以下是一些常用的汇编指令:1. MOV:将数据从一个位置复制到另一个位置。

2. ADD:将两个操作数相加,并将结果存储在目的操作数中。

3. SUB:将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。

4. INC:将一个操作数的值增加1。

5. DEC:将一个操作数的值减少1。

6. CMP:比较两个操作数的值,并将结果影响到标志寄存器中。

7. JMP:无条件跳转到指定的代码位置。

8. JZ / JE:当指定的条件成立时,跳转到指定的代码位置(零标志或相等标志)。

9. JNZ / JNE:当指定的条件不成立时,跳转到指定的代码位置(非零标志或不相等标志)。

10. JL / JB:当源操作数小于目的操作数时,跳转到指定的代码位置(小于标志或借位标志)。

11. JG / JA:当源操作数大于目的操作数时,跳转到指定的代码位置(大于标志或进位标志)。

12. CALL:调用一个子程序或函数。

13. RET:返回子程序或函数的调用处。

14. NOP:空操作,用于占位或调整程序代码的位置。

15. HLT:停止运行程序,将CPU置于停机状态。

这里只列举了一些基本的汇编指令,实际上汇编语言有更多更复杂的指令,具体使用哪些指令取决于所使用的汇编语言和目标处理器的指令集架构。

继续列举一些常用的汇编指令:16. AND:将两个操作数进行按位与运算,并将结果存储在目的操作数中。

17. OR:将两个操作数进行按位或运算,并将结果存储在目的操作数中。

18. XOR:将两个操作数进行按位异或运算,并将结果存储在目的操作数中。

19. NOT:对一个操作数的每一位进行取反操作。

20. SHL / SAL:将一个操作数的每一位向左移动指定的位数。

对于无符号数,使用SHL指令;对于带符号数,使用SAL指令。

21. SHR:将一个操作数的每一位向右移动指定的位数,高位空出的位使用0填充。

30个常用汇编命令

30个常用汇编命令

11、BSWAP(字节交换)
写法:bswap reg32 作用:将 reg32 的第 0 与第 3 个字节,第 1 与第 2 个字节进行交换。 示例:设 EAX=12345678h 执行 bswap eax;后,eax=78563412H
12、XLAT(换码)
写法:XLAT; 作用:AL=DS:[bx+AL] 将 DS:BX 所指内存中的由 AL 指定位移处的一个字节赋值给 AL。原来它的主要用途是查表。注意可以给它提供操作
13、ADD(加法)
写法:ADD reg/mem reg/mem/imm 作用:将后面的操作数加到前面的操作数中 注意:两个操作数必须类型匹配,并且不能同时是内存操作数 ADC (带进位加法) 写法:ADC reg/mem, reg/mem/imm ; 作用:dest=dest+src+cf 当 CF=0 时 ADD 与 ADC 的作用是相同的。 示例:实现 64 位数 EDX:EAX 与 ECX:EBX 的加法: Add EAX,EBX; ADC EDX,ECX;
写法:NEG reg/mem 作用:求补就是求相反数,即:dest=0-dest;
20、CMPXCHG(比较交换)
写法:CMPXCHG reg/mem, reg;
作用:AL/AX/EAX-oprd1,如果等于 0,则 oprd1=oprd2,否则,AL/AX/EAX=oprd1; 即:比较 AL/AX/EAX 与第一个操作数,如果相等,则置 ZF=1,并复制第二个操作数给第一个操作数;否则,置 ZF=0, 并复制第一个操作数给 AL/AX/EAX。 说明:CMPXCHG 主要为实现原子操作提供支持 CMPXCHG8B(8 字节比较交换指令) 写法:CMPXCHG8B MEM64; 功能:将 EDX:EAX 中的 64 位数与内存的 64 位数进行比较,如果相等,则置 ZF=1,并存储 ECX:EBX 到 mem64 指定 的内存地址;否则,置 ZF=0,并设置 EDX:EAX 为 mem64 的 8 字节内容

汇编语言的所有指令

汇编语言的所有指令数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(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,OSUB,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,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,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/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,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,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。

汇编常用指令

汇编常用指令1. 前言汇编语言是一种低级别的计算机语言,它是由一些指令组成的。

指令是一条计算机执行的命令,从基本上讲,这些指令代表着标准的操作,例如加、减、乘、除、移位和比较等。

汇编语言可以通过编写程序来控制一个计算机的行为,这些程序通常被称为汇编程序。

本文将介绍汇编语言中一些常用的指令。

2. 数据传送指令数据传送指令是汇编语言中最基本的指令之一,它主要用来将数据从一个位置传送到另一个位置。

在汇编语言中,数据传送指令通常使用MOV语句来实现。

下面是一些常用的数据传送指令:- MOV AX, BX:将BX中存储的数据传送到AX中。

- MOV AX, [BX]:将BX中存储的地址所指向的数据传送到AX中。

- MOV [BX], AX:将AX中存储的数据传送到BX所指向的地址中。

3. 算术运算指令算术运算指令主要用来执行各种数学运算,例如加法、减法、乘法和除法等操作。

下面是一些常用的算术运算指令:- ADD AX, BX:将BX中存储的数据与AX中存储的数据相加,并将结果存储在AX中。

- SUB AX, BX:将BX中存储的数据从AX中存储的数据中减去,并将结果存储在AX中。

- MUL BX:将AX中存储的数据与BX中存储的数据相乘,并将结果存储在AX中。

- DIV BX:将AX中存储的数据除以BX中存储的数据,并将结果存储在AX和DX中。

4. 位运算指令位运算是一种在二进制数字级别上的运算,它可以执行各种位操作,例如AND、OR、XOR和NOT等操作。

下面是一些常用的位运算指令:- AND AX, BX:将BX中存储的数据与AX中存储的数据按位进行AND运算,并将结果存储在AX中。

- OR AX, BX:将BX中存储的数据与AX中存储的数据按位进行OR 运算,并将结果存储在AX中。

- XOR AX, BX:将BX中存储的数据与AX中存储的数据按位进行XOR运算,并将结果存储在AX中。

- NOT AX:将AX中存储的数据按位进行取反操作。

汇编语言指令大全及实例解析

汇编语言指令大全及实例解析
汇编语言是一种底层的计算机语言,它直接操作计算机的硬件资源。

在汇编语言中,指令是最基本的操作单位,通过指令可以实现对计算机硬件的控制和操作。

本文将为大家介绍一些常用的汇编语言指令,并通过实例解析它们的具体用法和功能。

1. MOV指令。

MOV指令用于将数据从一个位置复制到另一个位置。

例如,下面的汇编代码将把寄存器AX中的值移动到寄存器BX中:
MOV BX, AX.
这条指令将AX中的值复制到BX中。

2. ADD指令。

ADD指令用于将两个操作数相加,并将结果存储到目标操作数中。

例如,下面的汇编代码将把寄存器AX和BX中的值相加,并将结果存储到AX中:
ADD AX, BX.
3. SUB指令。

SUB指令用于将目标操作数减去源操作数,并将结果存储到目标操作数中。

例如,下面的汇编代码将把寄存器AX中的值减去BX 中的值,并将结果存储到AX中:
SUB AX, BX.
4. CMP指令。

CMP指令用于比较两个操作数的大小,并根据比较结果设置标志位。

例如,下面的汇编代码将比较AX和BX中的值:
CMP AX, BX.
以上是一些常用的汇编语言指令及其实例解析。

通过学习和理解这些指令,我们可以更好地理解和掌握汇编语言的编程技巧,从而更好地编写高效的汇编语言程序。

希望本文对大家有所帮助。

汇编语言指令集

mov‎a,b ‎把b的值送‎给a‎ret ‎返回主程序‎n‎o p 无作‎用,英文“‎n o op‎e rati‎o n”的简‎写,意思是‎“do n‎o thin‎g”(机器‎码90)*‎**机器码‎的含义参看‎上面‎(解释:‎u ltra‎e dit打‎开编辑ex‎e文件时你‎看到90,‎等同于汇编‎语句nop‎)‎c all ‎调用子程序‎j‎e或jz‎若相等则‎跳(机器码‎74 或0‎F84) ‎jn‎e或jnz‎若不相等‎则跳(机器‎码75或0‎F85) ‎jm‎p无条件‎跳(机器码‎E B)‎jb ‎若小于则跳‎j‎a若大于‎则跳‎jg 若‎大于则跳‎jg‎e若大于‎等于则跳‎jl‎若小于则‎跳‎j le 若‎小于等于则‎跳‎p op 出‎栈‎p ush ‎压栈三‎.常见修改‎(机器码)‎7‎4=>75‎74=>‎90 74‎=>EB ‎75‎=>74 ‎75=>9‎0 75=‎>EB‎jnz‎->nop‎7‎5->90‎(相应的机‎器码修改)‎j‎n z ->‎jmp ‎75‎-> E‎B(相应的‎机器码修改‎)‎j nz -‎> jz ‎75‎->74 ‎(正常) ‎0F 85‎-> 0‎F 84(‎特殊情况下‎,有时,相‎应的机器码‎修改)‎四.两种不‎同情况的不‎同修改方法‎1‎.修改为j‎m p‎je(j‎n e,jz‎,jnz)‎=>jm‎p相应的机‎器码EB ‎(出错信息‎向上找到的‎第一个跳转‎)jmp 的‎作用是绝对‎跳,无条件‎跳,从而跳‎过下面的出‎错信息‎xxx‎x xxxx‎x xxx ‎出错信息,‎例如:注册‎码不对,s‎o rry,‎未注册版不‎能...,‎"Func‎t ion ‎N ot A‎v aibl‎e in ‎D emo"‎或‎"Com‎m and ‎N ot A‎v aibl‎e" 或‎"Can'‎t sav‎e in ‎S hare‎w are/‎D emo"‎等(我们‎希望把它跳‎过,不让它‎出现)<。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8088指令系统总结一、数据传送指令1.通用传送指令(1)传送指令MOV dst, src功能:dst←src(2)堆栈操作指令人WPUSH 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←→OPR22.累加器传送指令(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的低字高字→ES4.标志寄存器传送指令(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影响标志位OSZAPC(3)减1指令DEC src 影响OSZP(4)求补指令NEG src ;negatesrc←0-src 0-src=FFH-src+1FFH-src=求反(5)比较指令COMP dst, src难在带符号数比较:SF⊕OF=0 A>B,SF⊕OF=1,A<B (6)组合十进制减法调整指令DAS(7)非组合十进制减法调整指令AAS3.乘法类指令multiplication(1)无符号数乘法MUL src ;AX←src8×AL DX:AX←src16×AX,影响F:OC(2)有符号数乘法IMUL src ;AX←src8×AL DX:AX←src16×AX,影响F:OC(3)组合十进制乘法调整指令AAM注意:1乘数和被乘数都是非组合BCD码。

2 AAM用于乘法指令MUL之后。

3影响F:SZP原理:AH←AL/0AH AH←AL%0AH(%为取余操作)4.除法类指令(Division)(1)无符号数除法DIV src ;AX÷src8商进AL,余数进AH;(DX:AX)÷src16商进AX,余数进DX,不影响F。

(2)有符号数除法IDIV src ;算法同上。

注意:1不影响F;2余数的符号与被除数相同,3若被除数和除数都是8位,被除数需扩展成16位;若被除数和除数都是16位,被除数需扩展成32位。

(3)非组合十进制乘法调整指令AA D注意:1除数和被除数都是非组合BCD码。

2AAD放在除法指令前。

原理:(AL)←(AH)×0AH+(AL)(AH)←0(4)字节扩展成字指令CBW;AL中的符号扩展为AX,不影响F原理:(AL)<80H(正数)使AH=00H;(AL)≧80H(负数)使AH=FFH (5)字扩展成双字指令CWB;AX中的符号扩展为DX:AX,不影响F原理:(AH)<8000H(正数)使DX=0000H;(AX)≧8000H(负数)使DX =FFFFH三、逻辑运算与位移指令1.逻辑运算(1)与AND dst, src ;dst←dst AND src 影响F: SZP(2)或OR dst, src ;dst←dst OR src 影响F: SZP(3)异或XOR dst, src ;dst←dst XOR src 影响F: SZP(4)非NOT opr ;dst←opr逐位求反不影响F(5)测试TEST reg, src ;dst AND src 影响F: SZP 不入dst逻辑运算dst src opr符合基本传输原则(不允许seg)2.移位(1)逻辑左移SHL opr, 1 或SHL opr, CL0填最右位(2)逻辑右移SHR opr, 1 或SHR opr, CL0填最左位(3)算术左移SAL opr, 1 或SAL opr, CL0填最右位(4)算术右移SAR opr, 1SAR opr, CL最左位不变注意:opr: reg mem3.循环移位(1)无进位左循环ROL opr, 1 ROL opr, CL(2)无进位右循环ROR opr, 1 ROR opr, CL(3)有进位左循环RCL opr, 1 RCL opr, CL(4)有进位右循环RCR opr, 1 RCR opr, CL注意:opr: reg mem B/W四、串操作和重复指令(唯一的src dst 可以均为mem的指令)特点:A源操作数src在DS:SI,目的操作数在dst ES:DIB修改指针决定于DF,0增1减,字节1字2C串长置于CXD重复靠REP1.串操作指令(1)串传送MOVS / MOVSB / MOVSW dst, src ;dst←src(2)串比较COMP / COMPB / COMPW dst, src ;dst-src影响F: OSZAPC(3)串搜索SCAS / SCASB / SCASW dst ;AL-dst或AX-dst影响F: OSZAPC(4)串进A LODS / LODSB /LODSW src ;AL←src或AX←src(5)A进串STOS / STOSB / STOSW dst ;dst←AL或dst←AX(6)重复指令REP,RETZ / REPE,REPNZ / REPNE2.重复指令(1)REP与MOVS/B/W,STOS/B/W联用①若CX≠0则重复,执行下一条,否则退出串操作②CX←(CX-1)③执行字符串命令④重复1~3(2)RETZ / REPE与CMPS/B/W,SCAS/B/W联用①若CX≠0且ZF=1则重复,执行下一条,若CX=0或ZF=0(两数不等)退出串操作②CX←(CX-1)③执行字符串命令④重复1~3(3)REPNZ / REPNE与CMPS/B/W,SCAS/B/W联用①若CX≠0且ZF=0则重复,执行下一条,若CX=0或ZF=1(两数不等)退出串操作②CX←(CX-1)③执行字符串命令④重复1~3五、控制与转移指令1.无条件转移指令注意:SHORT为运算符,页内,-128~127。

偏移量用补码表示,8位偏移量与IP相加需扩展成16位(1)段内直接短转移JMP SHORT偏移量8;IP←IP+8位偏移量(2)段内直接近转移JMP NEA T PTR偏移量16注意:NEAT PTR为运算符偏移量用补码表示:64K范围-32768~32767 (3)段内间接寻址JMP src ;IP←src src: reg mem注意:mem寻址要加WORD PTR(4)段间直接寻址JMP FAR PTR LABEL;CS←下2字节IP←上2字节注意:FAR PTR为段内转移运算符LABEL为四字节转移地址的首地址,下CS上IP(5)段间间接寻址JMP DWORD PTR mem注意:与段间直接寻址一样,仅mem需要寻址去找,如相对寻址、基址加变址等2.条件转移指令(共19条)特点:双字节指令,短转移。

转移范围-128~127 ,IP←opr opr: reg mem,通常为标号(1)以标志位为条件(F: OSZPC 十种情况)①JO opr ;OF=1转移,溢出转移,②JNO opr ;OF=0转移,不溢出转移③JS opr ;SF=1转移,负数转移④JNS opr ;SF=0转移,正数转移⑤JZ opr ;ZF=1转移,结果为0转移又JE⑥JNZ opr ;ZF=0转移,结果不为0转移又JNE⑦JP opr ;PF=1转移,偶数转移⑧JNP opr ;PF=0转移,奇数转移⑨JC opr ;CF=1转移,有进(借)位转移又JB JNA⑩JNC opr ;CF=0转移,无进(借)位转移又JA JNB(2)无符号数比较大于用A,小于用B,等于用E,四种情况:>≥<≤设参与比较的两数按序为M、NJA opr ;M>N转移到地址opr CF=0且ZF=0JAE opr ;M≥N转移到地址opr CF=0或ZF=1JB opr ;M<N转移到地址opr CF=1且ZF=0JBE opr ;M≤N转移到地址opr CF=1或ZF=1(3)有符号数比较大于用G,小于用L,等于用E,四种情况:>≥<≤设参与比较的两数按序为M、NJG opr ;M>N转移到地址opr SF⊕OF=0且ZF=0JGE opr ;M≥N转移到地址opr SF⊕OF=0或ZF=1JL opr ;M<N转移到地址opr SF⊕OF=1且ZF=0JLE opr ;M≤N转移到地址opr SF⊕OF=1或ZF=1(4)根据CX值转移JCXZ opr ;当CX=0转移到地址opr3.循环控制指令以CX为计数器,短转移,不影响F,IP←Label或IP←IP+扩展的opr8Label通常为符号地址(1)循环指令LOOP SHORT Label①CX-1②若CX≠0,则循环,改变IP③若CX=0执行下一条指令零循环指令LOOPZ SHORT Label 或LOOPE SHORT Label①CX-1②若CX≠0且ZF=1,则循环,改变IP③若CX=0或ZF=1执行下一条指令(2)非零循环指令LOOPNZ SHORT Label 或LOOPNE SHORT Label ①CX-1②若CX≠0且ZF=0,则循环,改变IP③若CX=0或ZF=0执行下一条指令4.子程序调用指令子程序=过程调用=转子返回=返子(1)段内直接调用CALL dst ;dst为子程序入口地址(D16范围)①现IP入栈:SP←(SP-2)(SP+1)SP←IP②子程序入口地址入IP:IP←dst(2)段内直接调用CALL dst ;dst:各种reg mem寻址的EA,D16①现IP入栈:SP←(SP-2)(SP+1)SP←IP②子程序入口地址入IP:IP←EA(3)段间直接调用CALL dst ;dst为子程序入口地址(D32范围)①现CS入栈:SP←(SP-2)(SP+1)SP←CS②现IP入栈:SP←(SP-2)(SP+1)SP←IP③子程序入口有效地址入IP:IP←有效地址④子程序入口段地址入IP:CS←段地址(4)段间间接调用CALL dst ;dst为各种mem寻址的EA,D32范围①现CS入栈:SP←(SP-2)(SP+1)SP←CS②现IP入栈:SP←(SP-2)(SP+1)SP←IP③子程序入口有效地址入IP:IP←EA④子程序入口段地址入IP:CS←EA+25.子程序返回指令(1)段内返回指令RET;与CALL dst成对出现①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)(2)段内带立即数返回指令RET im;与CALL dst成对出现,im为D16①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)③IP加立即数:IP←IP+im(3)段间返回指令RET;与CALL dst成对出现①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)③原CS出栈:IP←(SP+1)SP④修改SP指针:SP←(SP+2)(4)段间带立即数返回指令;与CALL dst成对出现,im为D16①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)③原CS出栈:IP←(SP+1)SP④修改SP指针:SP←(SP+2)⑤IP加立即数:IP←IP+im六、CPU控制指令1.状态标志位操作指令D置位复位,I置位复位,C反置位复位STD;使DF=1CLD;使DF=0STI;使IF=1CLI;使IF=0STC;使CF=1CLC;使CF=0CMC;CF=CF的非2.外部同步HLT;暂停,等待中断或复位W AIT;当引脚TEXT等于0时,等待外部中断,否则顺序执行LOCK;总线封锁前缀3.NOP;空操作。

相关文档
最新文档