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位汇编语言中的指令,用于循环操作。

- JCXZ/JECXZ:同16位汇编语言中的指令,根据CX/ECX寄存

器的值进行循环。

总结:

16位和32位汇编语言都具有广泛的应用领域,在底层程序设计中

发挥重要作用。本文对这两种汇编语言中常用的指令进行了总结,包

括数据传送、算术运算、逻辑运算、条件转移和循环等方面。熟练掌

握这些指令将有助于编写高效、稳定的汇编语言程序。无论是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位汇编语言中的指令,用于按位取反。

常用汇编指令

常用汇编指令 汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以 编写出与硬件相关的程序。在计算机科学领域中,汇编指令是非常重 要的,是理解计算机底层原理和实现的关键。本文将介绍一些常用的 汇编指令,以帮助读者更好地理解和应用这些指令。 一、数据传输指令 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指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。例如,NOT AX对AX进行逻辑非操作。 四、跳转指令 1. JMP指令:JMP指令用于无条件跳转到指定的代码行。例如,JMP LABEL将跳转到指定的LABEL代码行。 2. JZ指令:JZ指令用于在零标志位为真时跳转到指定的代码行。例如,JZ LABEL在零标志位为真时跳转到指定的LABEL代码行。

汇编指令汇总

通用寄存器及标志寄存器 1 通用寄存器: 寄存器是学习汇编知识时的第一课,常用寄存器如下: AX/EAX BX/EBX CX/ECX DX/EDX 是通用的数据寄存器用于暂时存放计算过程中的操作数结果或者其他信息。他们可以分为两个独立的8位寄存器使用,AL/AH BL/BH CL/CH DL/DH,除了通用功能之外还有以下用途: AX/EAX作为累加器用,是算数运算的主要寄存器,在乘除指令中用来存放操作数,另外,所有的IO指令都是用AX或AL与外部设备传送信息。 BX/EBX在计算存储器地址的时候,可以作为基址寄存器使用。 CX/ECX常用来保存计数值,比如移位指令,循环指令和串处理指令中用作隐含的计数器。DX在做双字节长运算的时候,可以把DX和AX组合在一起存放一个双字长数,DX存放高16位数据,对于某些IO操作,DX还常常存放IO的端口地址。 SP/ESP BP/EBP SI/ESI DI/EDI四个16/32位寄存器可以像数据寄存器一样在运算过程中存放操作数,但是他们只能以字(16/32位)为单位来使用,他们的主要用途是在存储器寻址时,提供偏移地址,因此他们可称为指针或变址寄存器。 SP/ESP称为堆栈指针寄存器,用来指出栈顶的偏移地址。 BP/EBP称为基址指针寄存器,用来在寻址的时候作为基地址存放的地方,但他必须和堆栈段寄存器SS联用来确定堆栈段中的存储单元地址。 2 标志寄存器 条件码标志是用来记录程序中运行结果的状态信息,他们是根据有关指令的运行结果由CPU自动设置的,由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。 1 进位标志 CF 记录运算时最高有效位产生的进位值 2 符号标志 SF 记录运算结果的符号1表示负数0表示正数 3 零标志 ZF 运算结果为0时ZF为1 否则为0 4 溢出标志 OF 在运算中如操作数超出了机器可表示数的范围称为溢出溢出时为1 否则为0 5 辅助进位标志 AF 记录运算时第3位产生的进位值 6 奇偶标志 PF 用来为机器中传送信息时可能产生的代码出错情况提供检验条件,当结果操作数中1的个数为偶数时置1 否则为0 常用指令(传送交换取地址取段栈操作) 先写几个英文简写及含义。 reg - 寄存器 mem- 内存 lmm - 立即数 1. 传送指令MOV reg/mem reg/mem/lmm 传送指令,相当于高级语言的赋值语句,把源操作数(reg/mem/lmm)传送到前面的寄存器和内存地址中。 2. 传送填充指令MOVSX/MOVZX reg/mem reg/mem/lmm 传送填充指令,和MOV语句具有相同功能的基础上,对目的操作数的高位进行填充,又分为符号填充(MOVSX)和零(MOVZX)填充。 (1)符号填充指令:MOVSX 用源操作数的符号位填充目的操作数的高位数据位。

汇编语言最全指令表

伪指令• 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 六、堆栈操作指令 进栈指令 PUSH direct ;(SP)+1 →SP ,(direct)→ SP 退栈指令 POP direct 七、字节交换指令(5条) •XCH A,Rn ;(A)→ß(Rn) •XCH A,direct ;(A)→ß(direct) •XCH A,@Ri ;(A)→ß((Ri))• 八、半字节交换指令 •XCHD A,@Ri ;(A)0~3→ß((Ri))0~3 九、加器A与外部数据存贮器传送指令(4条) •MOVX A,@DPTR ;((DPTR))→A •MOVX A,@ Ri ;((Ri))→A i=0,1 •MOVX @ DPTR ,A ;(A)→(DPTR) •MOVX @ Ri , A ;(A)→(Ri)i=0,1 十、查表指令 (i)MOVC A ,@ A+PC ;((A)+(PC))→A •(ii)MOVC A ,@A+ DPTR ;((A)+(DPTR)) 算术运算指令 一、不带进位的加法指令(4条) ADD A,Rn ;(A)+(Rn)→A ADD A,direct ;(A)+(direct)→A ADD A,@Ri ;(A)+((Ri))→A ADD A,#data ;(A)+#data→A 二、带进位加法指令(4条) ADDC A,Rn ;(A)+(Rn)+CY→A ADDC A,direct ;(A)+(direct)+CY →A ADDC A,@Ri ;(A)+((Ri))+CY →A ADDC A,#data ;(A)+ #data +CY →A 三、增量指令(5条) INC A ;(A)+1 →A •INC Rn ;(Rn)+1 → Rn •INC direct ;(direct)+1 → direct •INC @Ri ;((Ri))+1 →(Ri)

32位汇编指令

用OD和CE,总不断找汇编资料,解读指令,实在是累。总算找到篇比较完整的资料,与大家分享。 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 对低16位数据的存取,不会影响高16位的数据。 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。 在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址, 在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果, 而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器

汇编语言常用指令大全

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指令

单片机汇编语言(指令集锦)

单片机汇编语言 一、格式 [标号]:操作码[操作数];[注释] 1.标号 指令的符号地址,与操作码用‘:’分隔,其间可加若干空格。有标号,程序的其他语句才可访问该语句。可有可无。 规定:由8个以内的字母、数字构成,第一个必为字母,同一程序不可有相同标号,不能有助记符、伪指令、寄存器名、特殊符号等。 正确标号:AB1、NEXT、LOOP1。 错误标号:2A、S+M、EQU、ADD。 2.操作码 说明语句功能,必不可少。与操作数之间用空格相隔。 3.操作数 说明操作对象。可以是具体的数、标号(符号地址)、寄存器、直接地址等。 操作数为十六进制,且字母在最高位,则前面应补0. 据指令之异,个数可为1、2、3或无。各操作间用‘,’相隔。 4.注释 程序说明。以‘;’开头,可多行,每行都以‘;’开头。 二、寻址方式 寻找操作数的地址。 1.寄存器寻址 以通用寄存器的内容作为操作数,在指令的助记符中直接以寄存器名字来表示操作数位置。 51中若操作数以R0~R7表示操作数时,就属于此方式。如:‘MOV A,R0’,功能:把寄存器R0的内容传送到累加器A中。 2.直接寻址 在指令中直接给出操作数地址。如:MOV ‘A,3AH’,功能:把内部RAM的3AH单元内容传送到累加器A中。 3.立即寻址 指令的操作数是一个数。该操作数被称为立即数。 立即数前加‘#’,如:’MOV A,#3AH’,功能:把立即数3AH送到累加器A中。 4.寄存器间接寻址 寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的,相应的寄存器前加@。如:‘MOV A,@R0’,功能:取出寄存器R0中的值,将此值作为地址,取该地址单元中的内容传送到A。 5.变址寻址 以某个寄存器的内容为基本地址,在此基本地址基础上加上地址偏移量作为真正的操作地址,并将此地址单元的内容作为指令的操作数。 51中,一般用数据指针DPTR或程序计数器PC的内容为基本地址,累加器A的内容为地址偏移量,并以DPTR+A或PC+A的值作为实际的操作数地址。 此方式只能从ROM中读数据,不能写入。 如:‘MOVC A,@A+DPTR’(设A=54H,DPTR=3F21H,3F75H单元中的内容为7FH),功能:将操作数地址为3F21H+54H=3F75H的内容7FH传送到累加器A,执行后A=7FH,其余不变。

32位汇编入门知识

32位汇编入门知识 简介: 汇编语言是一种低级语言,它直接表达了计算机的指令和数据。本文将介绍32位汇编语言的入门知识,包括寄存器、指令、堆栈和函数调用等内容。 一、寄存器 寄存器是CPU内部用来存储和操作数据的部件,32位汇编语言中常用的寄存器有EAX、EBX、ECX、EDX等。每个寄存器都有特定的用途,例如EAX通常用于存放函数返回值,EBX通常用于存放基址。 二、指令 指令是汇编语言中最基本的单位,它表示一条计算机指令。常见的指令有MOV、ADD、SUB等。例如,MOV指令用于将数据从一个地方移动到另一个地方,ADD指令用于进行加法运算。 三、堆栈 堆栈是用于存储临时数据的一种数据结构,它具有“先进后出”的特点。在汇编语言中,堆栈用于保存函数的局部变量、函数参数和返回地址等信息。例如,PUSH指令用于将数据压入堆栈,POP指令用于将数据从堆栈中弹出。 四、函数调用

函数调用是程序中常见的操作,它用于实现代码的模块化。在汇编语言中,函数调用通常需要进行参数传递和返回值处理。例如,CALL 指令用于调用函数,RET指令用于从函数返回。 五、例子 下面通过一个简单的例子来演示32位汇编语言的使用: ```assembly section .data msg db 'Hello, World!', 0 section .text global _start _start: ; 输出字符串 mov eax, 4 mov ebx, 1 mov ecx, msg mov edx, 13 int 0x80 ; 退出程序 mov eax, 1

xor ebx, ebx int 0x80 ``` 这是一个输出"Hello, World!"的程序。首先将字符串存储在.data节中的msg变量中。然后在.text节中定义了一个入口点_start,通过将相关参数设置到寄存器中,调用系统调用int 0x80来实现输出和退出。 六、总结 本文介绍了32位汇编语言的入门知识,包括寄存器、指令、堆栈和函数调用等内容。汇编语言虽然底层且复杂,但是它可以更加精确地控制计算机的行为,对于理解计算机底层运行原理有很大帮助。希望本文能够帮助读者对32位汇编语言有一个基础的了解。 参考资料: 1. 《汇编语言》 2. Intel® 64 and IA-32 Architectures Software Developer's Manual

汇编语言常见指令

汇编语言常见指令 在计算机科学领域中,汇编语言是一种可以直接与计算机硬件交互 的低级编程语言。与高级语言相比,汇编语言更加接近计算机底层, 它使用特定的指令来控制计算机的硬件操作。本文将介绍一些常见的 汇编语言指令,包括数据传送指令、算术逻辑指令以及控制指令等。 1. 数据传送指令: 数据传送指令用于将数据从一个地方传送到另一个地方,常见的 数据传送指令有MOV、LDR等。例如,MOV指令用于将数据从一个 寄存器传送到另一个寄存器。LDR指令用于将数据从内存中加载到寄 存器中。 2. 算术逻辑指令: 算术逻辑指令用于进行基本的算术和逻辑运算,常见的算术逻辑 指令有ADD、SUB、AND、OR等。例如,ADD指令用于将两个操作 数相加并将结果保存在目标操作数中。AND指令用于进行逻辑与操作。 3. 控制指令: 控制指令用于控制程序的执行流程,常见的控制指令有JMP、CALL、RET等。例如,JMP指令用于无条件跳转到指定的地址。 CALL指令用于调用子程序,将返回地址保存在堆栈中。 4. 条件分支指令:

条件分支指令用于根据条件决定程序的执行流程,常见的条件分 支指令有CMP、JE、JZ等。例如,CMP指令用于进行比较操作,根 据比较结果设置标志位。JE指令用于在相等条件下跳转到指定的地址。 5. 循环指令: 循环指令用于重复执行一段代码,常见的循环指令有LOOP、 FOR等。例如,LOOP指令用于实现简单的循环,根据计数器的值判 断是否继续执行循环体。 6. 串操作指令: 串操作指令用于对数据序列进行处理,常见的串操作指令有REP、MOVSB等。例如,REP指令用于重复执行后面的指令一定次数,常用于串传送和串比较操作。MOVSB指令用于将一个字节从源地址传送到目的地址。 总结: 汇编语言是一种强大的低级编程语言,常见的指令包括数据传送指令、算术逻辑指令、控制指令、条件分支指令、循环指令和串操作指 令等。掌握这些指令的使用可以更好地理解和编写底层程序。尽管汇 编语言的编写相对繁琐,但它可以提供更高的编程灵活性和执行效率,对于一些对性能要求较高的应用场景仍然具有重要价值。

汇编的基本常用指令

汇编的基本常用指令 汇编语言是一种底层的计算机语言,用于编写程序和指令集。在汇编语言中,指令是一种特定的操作码,它告诉计算机执行某种操作。在这篇文章中,我们将介绍汇编语言中一些基本常用的指令。 一、数据传输指令 数据传输指令用于在寄存器和内存之间传输数据。下面是一些常用的数据传输指令: 1. MOV MOV指令用于将数据从一个位置复制到另一个位置。例如,MOV AX, BX将寄存器BX中的数据复制到AX寄存器中。 2. XCHG XCHG指令用于交换两个位置的数据。例如,XCHG AX, BX将AX和BX寄存器中的数据互换。 3. PUSH PUSH指令用于将数据压入栈。例如,PUSH AX将AX寄存器的值压入栈中。 4. POP POP指令用于从栈中弹出数据。例如,POP AX将从栈中弹出的数据存储到AX寄存器中。

算术指令用于执行算术操作,例如加法、减法、乘法和除法。下面 是一些常用的算术指令: 1. ADD ADD指令用于将两个数相加,并将结果存储在指定的位置。例如,ADD AX, BX将AX和BX寄存器中的值相加,并将结果存储在AX寄 存器中。 2. SUB SUB指令用于将第二个操作数的值从第一个操作数的值中减去,并 将结果存储在指定的位置。例如,SUB AX, BX从AX寄存器中减去 BX寄存器的值,并将结果存储在AX寄存器中。 3. MUL MUL指令用于将两个数相乘,并将结果存储在指定的位置。例如,MUL AX, BX将AX和BX寄存器中的值相乘,并将结果存储在AX寄 存器中。 4. DIV DIV指令用于将第一个操作数的值除以第二个操作数的值,并将商 存储在第一个操作数指定的位置,余数存储在指定的位置。例如,DIV AX, BX将AX寄存器中的值除以BX寄存器的值,并将商存储在AX 寄存器中,余数存储在DX寄存器中。

汇编语言指令功能总结

汇编语言指令功能总结 汇编语言是一种低级语言,主要用于编写机器码指令的程序。在计算机科学领域中,汇编语言是非常重要的,因为它可以直接操作计算机的硬件资源。本文将对汇编语言中常用的指令功能进行总结。 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:将一个操作数的值传送给另一个操作数。例如,"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"表示将BX的值加到AX中。 2. SUB:将第一个操作数减去第二个操作数。例如,"SUB AX, BX"表示用BX的值减去AX,并将结果存储到AX中。 3. MUL:将两个操作数相乘。例如,"MUL AX, BX"表示将AX乘以BX,并将结果存储到一组寄存器中。 4. DIV:将第一个操作数除以第二个操作数。例如,"DIV AX, BX"表示用AX的值除以BX,并将商存储到一组寄存器中。 5. AND:对两个操作数执行逻辑与运算。例如,"AND AX, BX"表示将AX和BX进行逻辑与操作。 6. OR:对两个操作数执行逻辑或运算。例如,"OR AX, BX"表示将AX和BX进行逻辑或操作。 7. NOT:对一个操作数执行逻辑非运算。例如,"NOT AX"表示对AX进行逻辑非操作。 三、条件转移指令 条件转移指令根据指定的条件,将程序的控制转移到不同的地址。常用的条件转移指令包括:

汇编语言常用语句一览

汇编语言常用语句一览 一、数据传输指令 ────────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. 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 字节查表转换.── 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 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例:

【一些常用的汇编语言指令】汇编语言cli指令

【一些常用的汇编语言指令】汇编语言cli指令 【一些常用的汇编语言指令】汇编语言cli指令 汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的希望对大家有帮助! 数据传送指令 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

32位汇编指令

32位汇编指令 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 对低16位数据的存取,不会影响高16位的数据。 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高;

寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要 用CL来指明移位的位数; 寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作 为默认的操作数参与运算,也可用于存放I/O的端口地址。 在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单 元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、 暂存数据保存算术逻辑运算结果, 而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器 32位CPU有2个32位通用寄存器ESI和EDI。 其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位 的数据。 寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于 存放存储单元在段内的偏移量, 用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单 元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术 逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有 特定的要求,而且还具有特殊的功能。

汇编语言常用指令大全

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段寄存器中。 LES (Load ES with pointer) 指针送寄存器和ES指令 LES REG , SRC //常指定DI寄存器 执行操作: REG=(SRC) , ES=(SRC+2) //与LDS大致相同,不同之处是将ES代替DS而已.

汇编指令大全

汇编指令大全 (DST:destination目的操作数/地址;SRC:source源操作数/地址;port:端口;ac:Accumulator累加器;reg:register寄存器;cnt:counter计数器;opr:除了立即数之外的所有寻址方式(寄存器);立即数:直接包含在代码中,作为代码的一部分,不需要保存在寄存器中的操作数,相当于高级语言中的常量;r8/r16:8位通用寄存器/16位通用寄存器;SR:segment register段寄存器,包括DS、SS、ES、CS;mem:memory,表示存储器操作数;addr:address,表示内存单元地址;) [数据传送指令] 一、通用数据传送指令 1、传送指令 MOV (move) 指令的汇编格式:MOV DST,SRC 指令的基本功能:(DST)←(SRC) 将原操作数(字节或字)传送到目的地址。 指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。 指令的执行对标志位的影响:不影响标志位。 指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器; 目的操作数DST不能是CS,也不能用立即数方式。 2、进栈指令 PUSH (push onto the stack) 出栈指令 POP (pop from the stack) 指令的汇编格式:PUSH SRC ;POP DST 指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。 PUSH SRC (SP)←(SP)-2 ;(SP)←(SRC) POP DST (DST)←((SP));(SP)←(SP) 指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。 指令对标志位的影响:PUSH 和 POP指令都不影响标志位。 指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2;POP指令的DST不允许是CS寄存器; 3、交换指令 XCHG (exchange) 指令的汇编格式:XCHG OPR1,OPR2 指令的基本功能:(OPR1)←>(OPR2) 指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。 指令对标志位的影戏:不影响标志位。 指令的特殊要求:不允许使用段寄存器。 二、累加器专用传送指令 4、输入指令 IN (input) 输出指令 OUT(output) 指令的汇编格式:IN ac,port port<=0FFH IN ac,DX port>0FFH OUT port,ac port<=0FFH OUT DX,ac port>0FFH 指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。 IN ac,port port<=0FFH (AL)←(port)传送字节或(AX)←(port+1,port)传送字 IN ac,DX port>0FFH (AL)←((DX))传送字节或(AX)←((DX)+1,(DX))传送字 OUT port,ac port<=0FFH (port)←(AL)传送字节或(port+1,port)←(AX)传送字 OUT DX,ac port>0FFH (DX)←(AL)传送字节或((DX)+1,(DX))←(AX)传送字 指令对标志位的影响:不影响标志位。 指令的特殊要求:只限于在AL或AX与I/O端口之间传送信息。 传送16位信息用AX,传送8位信息用AL,这取决于外设端口的宽度。

相关文档
最新文档