一些常用的汇编语言指令

合集下载

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指令: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(将数据从一个位置复制到另一个位置)、XCHG(交换两个位置的数据)、PUSH(将数据压入堆栈)、POP (将数据从堆栈中弹出)等。

2. 算术运算指令算术运算指令用于执行各种算术运算,例如加法、减法、乘法和除法。

常用的算术运算指令包括ADD(将两个数相加)、SUB(将一个数减去另一个数)、MUL(将两个数相乘)、DIV(将一个数除以另一个数)等。

3. 逻辑运算指令逻辑运算指令用于执行各种逻辑运算,例如与、或、非和异或。

常用的逻辑运算指令包括AND(对两个数执行与运算)、OR(对两个数执行或运算)、NOT(对一个数执行非运算)、XOR(对两个数执行异或运算)等。

4. 控制转移指令控制转移指令用于实现程序的跳转和循环执行。

常用的控制转移指令包括JMP(无条件跳转到指定的地址)、JZ(如果前一个运算结果为零则跳转)、JC(如果前一个运算结果进位则跳转)等。

5. 位操作指令位操作指令用于对数据的位进行操作。

常用的位操作指令包括AND(将两个数的对应位执行与运算)、OR(将两个数的对应位执行或运算)、NOT(取反操作)等。

6. 字符串操作指令字符串操作指令用于对字符串进行操作。

常用的字符串操作指令包括MOVSB(将一个字节从源地址复制到目的地址)、LODSB(将一个字节从源地址加载到AL寄存器)、STOSB(将AL寄存器中的值存储到目的地址)等。

7. 输入输出指令输入输出指令用于与计算机的输入输出设备进行交互。

常用的输入输出指令包括IN(从指定的端口读取数据)、OUT(将数据发送到指定的端口)等。

总结:汇编语言中的指令功能丰富多样,可以实现各种复杂的操作。

汇编的基本常用指令

汇编的基本常用指令

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

以下是一些常用的汇编指令: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 字节内容

80c51汇编语言指令

80c51汇编语言指令

80c51汇编语言指令80C51汇编语言是一种常用的低级程序设计语言,广泛应用于嵌入式系统中。

它是基于Intel 8051系列单片机的指令集架构,具有高效、灵活、可靠的特点。

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

一、MOV指令MOV指令是80C51汇编语言中最基本、最常用的指令之一,用于将数据从一个寄存器或内存位置复制到另一个寄存器或内存位置。

例如,MOV A, #25H表示将立即数25H复制到A寄存器中。

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

例如,ADD A, R0表示将A寄存器和R0寄存器中的数据相加,并将结果存储在A寄存器中。

三、SUBB指令SUBB指令用于执行两个操作数的减法运算,并将结果存储在目标操作数中。

与ADD指令不同的是,SUBB指令会考虑进位位的值。

例如,SUBB A, R1表示将A寄存器中的数据减去R1寄存器中的数据,并将结果存储在A寄存器中。

四、MUL指令MUL指令用于执行两个操作数的乘法运算,并将结果存储在累加器A和可选的乘法寄存器B中。

例如,MUL AB表示将累加器A和B 中的数据相乘,并将结果存储在A和B中。

五、DIV指令DIV指令用于执行两个操作数的除法运算,并将结果存储在累加器A和可选的余数寄存器B中。

例如,DIV AB表示将累加器A和B 中的数据相除,并将商存储在A中,余数存储在B中。

六、JC、JNC指令JC指令用于在条件跳转时执行跳转操作,如果进位标志位(C)为1,则执行跳转。

JNC指令则相反,只有当进位标志位为0时才执行跳转。

七、JZ、JNZ指令JZ指令用于在条件跳转时执行跳转操作,如果零标志位(Z)为1,则执行跳转。

JNZ指令则相反,只有当零标志位为0时才执行跳转。

八、CJNE指令CJNE指令用于在条件跳转时执行跳转操作,它比较两个操作数的值,并根据比较结果来确定是否执行跳转。

如果两个操作数相等,则不执行跳转;如果不相等,则执行跳转。

汇编常用指令

汇编常用指令

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

汇编语言常用指令
大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的
希望对大家有帮助!
数据传送指令
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:
与1相或为1,保持不变的位与0相或。

(都为0时为0)
XOR 操作数1 操作数2:自己与自己异或结果为0,标志CF(进位)、OF(溢出)清0,PF (奇偶)ZF(0)SF(符号)反映运算结果,AF(辅助进位)未定义。

主要用于将若干位取反的操作:与1异或取反,与0异或保持不变。

(相同为0,不同为1)
TEST 操作数1 操作数2:测试指令,和AND相同,但结果不送操作数1,各标志位同AND 操作。

位移指令
SAL/SHL 操作数 1或CL:算术左移与逻辑左移进行相同的动作,操作数是通用寄存器或者存储器操作数,位移数为1或为CL;最高位移CF(进位),右边用0补位。

左移一次相当源操作数乘2。

SAR 操作数 1或CL:算术右移,位移数为1或为CL;操作数是通用寄存器或者存储器操作数,左符号位保持不变,移出最低位进CF(进位)。

相当源操作数除2。

SHR 操作数1或CL :逻辑右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL;左边用0补足,移出的最低位进CF(进位)对于无符号数,右移一位相当于除2。

ROL/ROR 操作数1或CL:不带进位左移/右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL。

RCL/RCR 操作数1或CL:带进位左移/右移,CF(进位)参与循环。

操作数是通用寄存器或者存储器操作数,位移数为1或为CL。

转移指令
注意:由于代码段可分为多个段,所以根据转移时是否重置代码段寄存器CS内容,可分为段内转移和段间转移。

段内转移仅重置IP的转移,转移后指令仍在同一代码段中。

段间转移重置CS,所以转移后继续执行的指令在另一个段中。

JMP 标号:无条件跳转到标号位置执行,段内直接转移指令。

地址差用一个字节表示为短转移,用一个字表示为近转移。

JMP 通用寄存器/存储单元:无条件段间间接转移指令,操作数给定的是目标地址处。

JMP FAR PTR 标号:无条件段间直接转移指令,她的具体动作是把指令中包含的目标地址的段值和偏移分别置茹CS和IP。

JMP 操作数:无条件段间间接转移指令,操作数是双字存储单元,给定目标地址,低字节送IP,高字节送CS。

条件转移指令:所有的条件转移指令都是段内转移。

她是由J加上相应的含义字母组合成。

有符号数关系G(大于),E(等于),L(小于);无符号数关系A(高于)、E(等于)和B(低于);字母N表示“不”:NB(不小于),NE(不等于)。

循环指令
LOOP 标号:她使寄存器CX减1,若结果不等于0则转到标号,否则顺序执行LOOP指令后的指令。

最多循环65536次。

LOOPE/LOOPZ 标号:等于/全零循环指令。

CX的值减1,如果结果不等于0,并且ZF(0标志)等于1,则转移到标号。

LOOPNE/LOOPNZ 标号:不等于/非零循环指令,CX的值减1,如果结果不等于0,并且ZF(0标志)等于0,则跳转到标号。

JCXZ 标号:该指令实现当寄存器CX的值等于0转移到标号,否则顺序执行。

通常该指令用在循环开始前,以便在循环次数位0时,跳过循环体。

相关文档
最新文档