汇编指令分类介绍
汇编语言指令详解

汇编语言指令详解汇编语言是一种低级语言,它直接操作计算机的硬件。
与高级语言相比,汇编语言更具操作性,可以更精确地控制计算机的执行过程。
在编写汇编语言程序时,我们需要使用指令来完成各种操作,并且对不同的指令进行详细的了解。
本文将详细介绍一些常用的汇编语言指令及其功能。
一、数据传输指令数据传输指令用于在寄存器间传输数据或将数据从寄存器传送到内存中。
常用的数据传输指令包括MOV、LDA、STA等。
MOV指令用于将数据从一个寄存器传送到另一个寄存器。
例如,MOV AX, BX表示将寄存器BX中的数据传送到寄存器AX中。
LDA指令用于将一个内存单元的数据传送到累加器中。
例如,LDA 1000H将内存单元1000H中的数据传送到累加器中。
STA指令用于将累加器的数据传送到一个内存单元中。
例如,STA 2000H将累加器中的数据传送到内存单元2000H中。
二、算术运算指令算术运算指令用于对数据进行加、减、乘、除等运算操作。
常用的算术运算指令包括ADD、SUB、MUL、DIV等。
ADD指令用于将两个操作数相加,并将结果存储在目的操作数中。
例如,ADD AX, BX表示将寄存器AX和寄存器BX的数据相加,并将结果存储在寄存器AX中。
SUB指令用于将目的操作数减去源操作数,并将结果存储在目的操作数中。
例如,SUB AX, BX表示将寄存器AX减去寄存器BX的数据,并将结果存储在寄存器AX中。
MUL指令用于执行无符号整数乘法运算。
例如,MUL AX, BX表示将寄存器AX和寄存器BX的数据相乘,并将结果存储在寄存器AX 中。
DIV指令用于执行无符号整数除法运算。
例如,DIV AX, BX表示将寄存器AX的数据除以寄存器BX的数据,并将商存储在寄存器AX 中,余数存储在寄存器DX中。
三、逻辑运算指令逻辑运算指令用于对数据进行逻辑操作,如与、或、非、位移等。
常用的逻辑运算指令包括AND、OR、NOT、SHL等。
AND指令用于对两个操作数执行位与操作,并将结果存储在目的操作数中。
汇编语言基本指令详解

汇编语言基本指令详解在计算机科学和计算机工程领域,汇编语言是一种计算机底层编程语言,用于直接控制计算机硬件。
它是机器语言的文本形式,使用符号和助记符来代表机器指令,相对于高级编程语言来说更加底层。
汇编语言基本指令是使用汇编语言进行编程时必不可少的内容。
下面将详细介绍汇编语言中常用的基本指令。
1. 数据传送指令数据传送指令用于在寄存器之间传递数据,常见的指令有MOV、ADD、SUB、MUL等。
MOV指令用于将数据从一个位置传送到另一个位置,格式为MOV 目标操作数, 源操作数。
例如,MOV AX, BX可以将BX的值传送给AX。
ADD指令用于将两个操作数相加,并将结果保存到目标操作数中。
格式为ADD 目标操作数, 源操作数。
例如,ADD AX, BX可以将AX与BX的值相加,并将结果保存在AX中。
SUB指令用于将源操作数的值从目标操作数中减去,并将结果保存到目标操作数中。
格式为SUB 目标操作数, 源操作数。
例如,SUB AX, BX可以将BX的值从AX中减去,并将结果保存在AX中。
MUL指令用于将两个操作数相乘,并将结果保存到目标操作数中。
格式为MUL 目标操作数, 源操作数。
例如,MUL AX, BX可以将AX与BX的值相乘,并将结果保存在AX中。
2. 算术逻辑指令算术逻辑指令用于进行各种算术和逻辑运算,例如加法、减法、乘法、除法、与、或、非等。
ADD指令在前面已经提到,用于将两个操作数相加。
SUB指令在前面已经提到,用于将源操作数的值从目标操作数中减去。
MUL指令在前面已经提到,用于将两个操作数相乘。
DIV指令用于将目标操作数除以源操作数,并将商保存到目标操作数,余数保存在DX中。
格式为DIV 操作数。
例如,DIV BX可以将AX的值除以BX,并将商保存在AX中,余数保存在DX中。
AND指令用于对两个操作数进行按位与运算,并将结果保存到目标操作数中。
格式为AND 目标操作数, 源操作数。
例如,AND AX,BX可以将AX与BX的值按位与,并将结果保存在AX中。
常用汇编指令

常用汇编指令一、汇编语言简介汇编语言是一种低级语言,与计算机硬件直接相关。
在编写汇编程序时,我们使用汇编指令来告诉计算机执行特定的操作。
汇编指令是一条条的机器码,通过汇编器将其转换为可执行的机器代码。
二、汇编指令的分类汇编指令可以分为以下几类:1. 数据传输指令数据传输指令用于将数据从一个位置传输到另一个位置。
常见的数据传输指令有:•MOV:将数据从一个位置复制到另一个位置。
•XCHG:交换两个位置的数据。
•PUSH:将数据压入栈中。
•POP:将数据从栈中弹出。
2. 算术指令算术指令用于进行算术运算。
常见的算术指令有:•ADD:将两个数相加。
•SUB:将一个数减去另一个数。
•MUL:将两个数相乘。
•DIV:将一个数除以另一个数。
3. 逻辑指令逻辑指令用于进行逻辑运算。
常见的逻辑指令有:•AND:对两个数进行逻辑与运算。
•OR:对两个数进行逻辑或运算。
•XOR:对两个数进行逻辑异或运算。
•NOT:对一个数进行逻辑非运算。
4. 控制指令控制指令用于控制程序的执行流程。
常见的控制指令有:•JMP:无条件跳转到指定的地址。
•JZ:如果上一次的运算结果为零,则跳转到指定的地址。
•JC:如果上一次的运算结果产生了进位或借位,则跳转到指定的地址。
•CALL:调用一个子程序。
三、汇编指令的应用汇编指令广泛应用于嵌入式系统、驱动程序和操作系统等领域。
下面是一些常见的应用场景:1. 嵌入式系统嵌入式系统通常具有资源有限的特点,因此需要高效地使用计算资源。
汇编语言可以直接访问硬件,提供更高的执行效率和更小的代码体积,因此在嵌入式系统中广泛使用。
2. 驱动程序驱动程序是操作系统与硬件之间的桥梁,负责将操作系统的指令翻译成硬件可以理解的指令。
由于驱动程序需要直接与硬件进行交互,因此使用汇编语言编写驱动程序可以提高执行效率和精确控制硬件。
3. 操作系统操作系统是计算机系统的核心软件,需要高效地管理计算资源和提供各种服务。
汇编语言可以直接操作硬件,提供更底层的控制和更高的执行效率,因此在操作系统的内核部分经常使用汇编语言编写。
汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法汇编语言是一种低级语言,通过编写汇编程序可以直接操作计算机硬件。
在汇编语言中,各种指令起到了关键的作用。
本文将对常用的汇编语言指令进行解释,并说明其用法。
1. 数据传输指令数据传输指令用于在存储器和寄存器之间传输数据。
常用的数据传输指令包括MOV、PUSH和POP。
- MOV指令用于将数据从一个位置传送到另一个位置。
语法格式为:MOV 目的地,源。
- PUSH指令用于将数据压入栈中。
语法格式为:PUSH 寄存器/内存地址。
- POP指令用于从栈中弹出数据并存放到指定位置。
语法格式为:POP 寄存器/内存地址。
2. 算术运算指令算术运算指令用于进行各种算术运算,如加法、减法、乘法和除法。
常用的算术运算指令有ADD、SUB、MUL和DIV。
- ADD指令实现两个操作数的加法。
语法格式为:ADD 目的操作数,源操作数。
- SUB指令实现两个操作数的减法。
语法格式为:SUB 目的操作数,源操作数。
- MUL指令实现两个操作数的乘法。
语法格式为:MUL 操作数。
- DIV指令实现两个操作数的除法。
语法格式为:DIV 操作数。
3. 分支控制指令分支控制指令用于根据条件来选择不同的执行路径,包括条件跳转和无条件跳转。
常用的分支控制指令有JMP、JZ、JE和JNE。
- JMP指令用于无条件跳转到指定的地址。
语法格式为:JMP 标号/偏移量。
- JZ指令用于在零标志位为1时跳转到指定地址。
语法格式为:JZ标号/偏移量。
- JE指令用于在相等标志位为1时跳转到指定地址。
语法格式为:JE 标号/偏移量。
- JNE指令用于在不相等标志位为1时跳转到指定地址。
语法格式为:JNE 标号/偏移量。
4. 逻辑运算指令逻辑运算指令用于实现与、或、非、异或等逻辑运算。
常用的逻辑运算指令有AND、OR、NOT和XOR。
- AND指令用于执行按位与运算。
语法格式为:AND 目的操作数,源操作数。
- OR指令用于执行按位或运算。
汇编指令与运算符

汇编指令与运算符1000字汇编指令和运算符是计算机系统中非常重要的组成部分,它们是编写高效计算机程序的关键。
下面将详细介绍汇编指令和运算符。
一、汇编指令1. 汇编指令的定义汇编指令是计算机系统中用于控制计算机进行不同操作的命令。
汇编指令通常由一个操作码(opcode)和一组操作数(operand)组成,可以直接映射到机器指令。
2. 汇编指令的分类根据功能不同,汇编指令可以分为以下几种类型:(1)数据传输指令数据传输指令用于在不同寄存器和存储器位置之间传输数据,例如MOV和PUSH指令。
(2)算术指令算术指令用于执行加、减、乘、除等数学运算,例如ADD、SUB、IMUL和IDIV指令。
(3)逻辑指令逻辑指令用于执行逻辑运算,例如AND、OR、XOR和NOT指令。
(4)条件转移指令条件转移指令用于根据特定条件跳转到不同的代码块,例如JZ、JNZ、JG和JL指令。
(5)无条件转移指令无条件转移指令用于跳转到程序的其他部分,例如JMP指令。
3. 汇编指令的示例以下是一些常用的x86汇编指令:(1)MOV指令:将数据从一个位置传输到另一个位置。
MOV AX, 0x1234这条指令将0x1234的值传输到AX寄存器中。
(2)ADD指令:执行加法运算。
ADD AX,BX这条指令将AX寄存器中的值与BX寄存器中的值相加,并将结果存储在AX寄存器中。
(3)CMP指令:比较两个值的大小。
CMP AX,BX这条指令将比较AX寄存器中的值与BX寄存器中的值的大小,然后将结果存储在标志寄存器中。
(4)JMP指令:无条件跳转到指定位置。
JMP 0x1234这条指令将跳转到0x1234处执行程序。
二、运算符1. 运算符的定义运算符是用于执行算术、逻辑和比较运算的符号。
在计算机编程中,运算符用于对数据进行操作和运算。
不同的编程语言支持不同的运算符。
2. 运算符的分类根据功能不同,运算符可以分为以下几种类型:(1)算术运算符算术运算符用于执行加、减、乘、除等数学运算,例如+、-、*和/运算符。
汇编指令分类介绍

汇编指令全集ZZ以下是80X86汇编过程中经常用到的一些汇编指令。
从功能分类上来说,一共可分为一、数据传送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。
二、算术指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、DAA、DAS、AAA、AAS。
三、逻辑指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、RCL、RCR、ROL、ROR。
四、控制转移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、CALL、RET、INT。
五、串操作指令:MOVS、LODS、STOS、CMPS、SCAS。
六、标志处理指令:CLC、STC、CLD、STD。
七、32位CPU新增指令------------------------------------------------数据传送指令---------------------------1、MOV(传送)指令写法:MOV target,source功能描述:将源操作数source的值复制到target中去,source值不变注意事项:1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。
2)target和source不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS)3)不能将立即数传送给段寄存器4)target 和source必须类型匹配,比如,要么都是字节,要么都是字或者都是双字等。
4)由于立即数没有明确的类型,所以将立即数传送到target时,系统会自动将立即数零扩展到与target数的位数相同,再进行传送。
有时,需要用BYTE PTR、WORD PTR、DWORD PTR明确指出立即数的位数写法示例:MOV dl,01H;MOV eax,[bp]; eax =ss:[bp]双字传送。
汇编教程汇编指令详解

汇编教程汇编指令详解汇编语言是一种底层的计算机语言,通过使用汇编指令对计算机进行编程。
本文将对汇编指令进行详细解释,帮助读者理解和使用汇编语言。
1.数据传送指令:数据传送指令用于将数据从一个位置传送到另一个位置。
例如,MOV指令可以将数据从一个寄存器移动到另一个寄存器,或从存储器中读取数据并将其移动到寄存器中。
2.算术运算指令:算术运算指令用于执行各种算术运算,如加法、减法、乘法和除法。
例如,ADD指令可以将两个操作数相加,而MUL指令可以将两个操作数相乘。
3.逻辑运算指令:逻辑运算指令用于执行逻辑运算,如与、或、非和异或。
例如,AND指令可以对两个操作数执行按位与运算,而OR指令可以对两个操作数执行按位或运算。
4.控制转移指令:控制转移指令用于在程序执行过程中改变控制流。
例如,JMP指令可以无条件地将程序跳转到指定的地址,而条件分支指令(如JE、JNE等)可以根据特定的条件决定是否跳转。
5.程序调用指令:程序调用指令用于调用子程序。
例如,CALL指令可以将控制交给一个子程序,并在子程序执行完后返回到调用点。
6.中断指令:中断指令用于触发计算机的中断处理程序。
例如,INT 指令可以使计算机执行与指定中断向量相关联的中断处理程序。
7.输入输出指令:输入输出指令用于与计算机的外部设备进行数据交换。
例如,IN指令可以从外部设备中读取数据,而OUT指令可以向外部设备发送数据。
除了上述常用的汇编指令外,不同的计算机体系结构可能还有其他特定的指令。
因此,在学习和使用汇编语言时,了解特定体系结构的指令集是很重要的。
此外,汇编语言还包括一些程序框架和编程技巧,如标号、注释、宏定义、条件编译等。
这些工具和技巧可用于简化和优化汇编程序的开发过程。
总结起来,汇编语言是一种底层的计算机语言,通过使用各种指令对计算机进行编程。
掌握和理解各种汇编指令对于编写高效和优化的汇编程序非常重要。
希望本文能够帮助读者更好地理解和使用汇编语言。
汇编语言指令分类介绍

8086/8088汇编语言指令集一、数据传送指令集MOV功能:把源操作数复制到目的操作数语法: MOV 目的操作数,源操作数格式:MOV ra,rbMOV r,mMOV m,rMOV r,dataXCHG功能:交换两个操作数的数据语法: XCHG 目的操作数,源操作数格式:XCHG ra,rbXCHG m,rXCHG r,mPUSH,POP功能:把操作数压入或取出堆栈语法: PUSH 操作数 POP 操作数格式:PUSH r16 ;不能使用立即数作为操作数PUSH m16POP r16POP m16PUSHF,POPF功能:保护、恢复标志寄存器格式:PUSHFPOPFLEA,LDS、LES功能:取地址至寄存器语法:LEA r16,m ;取得变量的偏移量LDS/LES r16,m ;从存储器指定单元读取连续的两个字分别存入r16及DS或ES.XLAT功能:查表指令语法: XLA T ; AL = (BX + AL)二、算数运算指令集ADD,ADC功能:加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式:ADD ra,rbADD r,mADD m,rADD r,dataADD m,data影响标志:所有SUB,SBB功能:减法指令格式:SUB/SBB ra,rbSUB/SBB r,mSUB/SBB m,rSUB/SBB r,dataSUB/SBB m,data影响标志:所有INC,DEC功能:把OP的值加一或减一格式: INC/DEC r/m影响标志:P,A,Z,S,O(不影响CF!)NEG功能:对操作数求负格式: NEG r/m影响标志:所有MUL功能:乘法指令格式: MUL r/m隐含操作数:AL/AX/DX影响标志:若AH / DX 的内容为0,则CF=OF=0;否则为1。
IMUL功能:乘法指令格式:IMUL r/m隐含操作数:AL/AX/DX影响标志:若AH / DX的内容是AL / AX符号位的扩展,则:CF=OF=0;否则为1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编指令全集ZZ以下是80X86汇编过程中经常用到的一些汇编指令。
从功能分类上来说,一共可分为一、数据传送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。
二、算术指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、DAA、DAS、AAA、AAS。
三、逻辑指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、RCL、RCR、ROL、ROR。
四、控制转移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、CALL、RET、INT。
五、串操作指令:MOVS、LODS、STOS、CMPS、SCAS。
六、标志处理指令:CLC、STC、CLD、STD。
七、32位CPU新增指令------------------------------------------------数据传送指令---------------------------1、MOV(传送)指令写法:MOV target,source功能描述:将源操作数source的值复制到target中去,source值不变注意事项:1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。
2)target和source不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS)3)不能将立即数传送给段寄存器4)target 和source必须类型匹配,比如,要么都是字节,要么都是字或者都是双字等。
4)由于立即数没有明确的类型,所以将立即数传送到target时,系统会自动将立即数零扩展到与target数的位数相同,再进行传送。
有时,需要用BYTE PTR、WORD PTR、DWORD PTR明确指出立即数的位数写法示例:MOV dl,01H;MOV eax,[bp]; eax =ss:[bp]双字传送。
2、XCHG(交换)指令写法:XCHG object1,object2功能描述:交换object1与object2的值注意事项:1)不能直接交换两个内存数的值2)类型必须匹配3)两个操作数任何一个都不能是段寄存器【看来段寄存器的写入的限制非常的严格,MOV指令也不能对段寄存器进行写入】,4)必须是通用寄存器(ax、bx、cx、dx、si、di)或内存数写法示例:XCHG ax,[bx][si]; XCHG ax,bx;3、LEA(装入有效地址)指令写法:LEZ reg16,mem功能描述:将有效地址MEM的值装入到16位的通用寄存器中。
写法示例:假定bx=5678H,EAX=1,EDX=2Lea si,2[bx];si=567AHLea di,2[eax][edx];di=5注意,这里装入的是有效地址,并不是实际的内存中的数值,如果要想取内存中该地址对应的数值,还需要加上段地址才行,而段地址有可能保存在DS中,也有可能保存在SS或者CS中哦:>不知道我的理解可正确。
4、LDS\LES\LGS\LSS(注意,与LEA不同的是,这里是装入的值,而不是有效地址)这几个指令,名称不同,作用差不多。
写法:LDS reg16,mem32功能描述:reg16等于mem32的低字,而DS对应于mem32的高字(当为LES时,这里就是ES对应于mem32的高字)用来给一个段寄存器和一个16位通用寄存器同时复制。
注意事项:第一个操作数必须是16位通用寄存器在接着往下说之前,先熟悉下堆栈的概念。
堆栈,位于内存的堆栈段中,是内存的一部分,具有“先进后出”的特点,堆栈只有一个入口,即当前栈顶,当堆栈为空时,栈顶和栈底指向同一内存地址,在WINDOWS中,可以把堆栈理解成一个倒着的啤酒瓶,上面的地址大,下面的地址小,当从瓶口往啤酒瓶塞啤酒时(进栈),栈顶就会往瓶口下移动,也就是往低地址方向移动,同理,出栈时,正好相反,把啤酒给倒出来,栈顶向高地址方向移动。
这就是所谓的堆栈,哼哼,很Easy吧。
在汇编语言中,堆栈操作的最小单位是字,也就是说,只能以字或双字为单位,同时,SS:SP指向栈顶(SS为堆栈段寄存器,SP为堆栈指针,二者一相加,就构成了堆栈栈顶的内存地址)。
5、PUSH(进栈)写法:PUSH reg16(32)/seg/mem16(32)/imm功能描述:将通用寄存器/段寄存器/内存数/立即数的值压入栈中,即:SP=SP-2 SS:[SP]=16位数值(当将32位数值压入栈中时,SP=SP-4,SS:[SP]=32为数值)6、POP(出栈)写法:POP reg16(32)/seg/mem16(32)【不能出栈到CS中】功能描述:将堆栈口的16(32)位数据推出到通用寄存器/段寄存器/内存中,即:寄存器/段寄存器/内存= SS:[SP] SP=SP+2(当将32位数值出栈时,SP=SP+4)(注意,不能出栈给立即数哦,常量不可变嘛)7、PUSHA、PUSHAD、POPA、POPAD作用:将所有16/32位通用寄存器进栈/出栈如:PUSHA ;将AX、CX、DX、BX、原SP、BP、SI、DI依次进栈。
POPA出栈顺序正好相反,但要注意的是,弹出到SP的值被丢弃,SP通过增加16位来恢复(当然嘛,不然栈顶地址就被修改了,就会出息不对齐的情况,就有可能乱套了)POPAD PUSHAD一样,只不过是32位的罢了。
8、PUSHF、PUSHFD、POPF、POPFD功能描述:标志寄存器FLAGS(EFLAGS)进栈或出栈如:PUSHF;FLAGS进栈POPF;栈顶字出栈到FLAGS总结下,POP和PUSH通常可以用来交换两个寄存器的值,也可以用来保护寄存器的值,如下:交换ax与cx的值:push ax;push cx;pop ax;pop cx;保护寄存器:push ax;push cx;….中间有很多执行的代码…pop cx;pop ax;9、LAHF\SAHF(标志寄存器传送指令)写法:lahf;作用:AH=FLAGS的低8位写法:sahf;作用:FLAGS的低8位=AH10、符号扩展和零扩展指令CBW;AL符号扩展为AXCWD;AX符号扩展为32位数DX:AXCWDE;AX符号扩展为EAX;CDQ:EAX符号扩展为64位数EDX:EAXMOVSX(符号扩展指令的一般形式)写法:MOVSX reg16\32,reg8\reg16\mem8\mem16作用:用来将8位符号扩展到16位,或者16位符号扩展到32位MOVZX(零扩展指令)写法:MOVZX reg16\32,reg8\reg16\mem8\mem16零扩展,就是高位补0进行扩展。
通常用在将数据复制到一个不同的寄存器中,如AL零扩展为EBX。
相同寄存器的零扩展,可以使用MOV 高位, 0来实现。
11、BSWAP(字节交换)写法:bswap reg32作用:将reg32的第0与第3个字节,第1与第2个字节进行交换。
示例:设EAX=12345678h执行bswap eax;后,eax=78563412H12、XLAT(换码)写法:XLAT;作用:AL=DS:[bx+AL]将DS:BX所指内存中的由AL指定位移处的一个字节赋值给AL。
(貌似这是一个方便偷懒的指令哦。
),原来它的主要用途是查表。
注意可以给它提供操作数,用来指定使用哪个段地址,如:XLAT ES:table;使用ES来作为段地址,table不起作用。
XLAT table ;使用table所在段对应的段寄存器作为段地址。
------------------------------------------------数据传送指令结束-----------------------------------------------------------------------------------------算术指令开始-----------------------------------------------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;14、INC(自加一)写法:INC reg/mem;作用:dest=dest+1;15、XADD(交换加)写法:XADD reg/mem, reg作用:先将两个数交换,然将二者之和送给第一个数16、SUB(减法)写法:SUB reg/mem, reg/mem/imm;作用:dest=dest-src;SBB(带借位减法)写法:SBB reg/mem, reg/mem/imm作用:dest=dest-src-cf;注意:两个操作数必须类型匹配,且不能同时是内存数17、DEC(自减1)写法:DEC reg/mem;作用:dest=dest-1;18、CMP(比较)写法:CMP reg/mem, reg/mem/imm作用:dest-src注意:这里并不将结果存入dest中,而仅仅是执行相减的运算,达到依据运算结果去影响EFLAG标志位的效果19、NEG(求补)写法: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字节内容21、MUL(无符号乘法)写法:MUL reg/mem;作用:当操作数为8位时,AX=AL*src;当操作数为16位时,DX:AX=AX*src;当操作数为32位时,EDX:EAX=EAX*src;22、IMUL(带符号位乘法)写法:IMUL reg/mem;(作用同上)IMUL reg16,reg16/mem16,imm16;IMUL reg32,reg32/mem32,imm32;IMUL reg16,imm16/reg16/imm16;IMUL reg32,reg32/mem32/imm32;注意:没有两个操作数均为8位的多操作数乘法。