汇编通用指令集(含分析)
常用汇编指令

常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。
在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。
本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。
一、数据传输指令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指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。
汇编语言各种指令解释及用法2篇

汇编语言各种指令解释及用法2篇汇编语言指令解释及用法汇编语言是一种低级编程语言,用于编写机器指令,直接控制计算机硬件。
它的指令集相对简单,但是非常灵活,可以直接操作寄存器和内存,实现各种功能。
在这篇文章中,我将为大家解释汇编语言中一些常用指令的含义和用法。
第一篇:数据传输与操作指令1. MOV指令:MOVE(MOV)指令用于在寄存器和内存之间传输数据。
例如,MOV AX, BX将BX的值传输到AX寄存器中。
2. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。
例如,ADD AX, 5将AX寄存器的值与5相加,并将结果存储在AX中。
3. SUB指令:SUB指令用于将两个操作数相减,并将结果存储在目标操作数中。
例如,SUB AX, 3将AX寄存器的值减去3,并将结果存储在AX中。
4. INC指令:INC指令用于将目标操作数的值加1。
例如,INC CX将CX寄存器的值增加1。
5. DEC指令:DEC指令用于将目标操作数的值减1。
例如,DEC DX将DX寄存器的值减去1。
6. MUL指令:MUL指令用于将两个无符号操作数相乘,结果保存在一对寄存器中。
例如,MUL BX将AX寄存器的值与BX相乘,并将结果保存在DX:AX寄存器对中。
7. DIV指令:DIV指令用于将两个无符号操作数相除,商保存在AL中,余数保存在AH中。
例如,DIV CX将DX:AX寄存器对的值除以CX,并将商保存在AL中,余数保存在AH中。
8. CMP指令:CMP指令用于比较两个操作数的值,并设置相应的标志位。
例如,CMP AX, BX将AX寄存器的值与BX进行比较。
第二篇:跳转指令与循环指令1. JMP指令:JMP指令用于无条件跳转到目标地址。
例如,JMP LABEL将程序跳转到标签LABEL处执行。
2. JZ指令:JZ指令用于判断前一次的比较结果是否为零,如果为零则跳转到目标地址。
例如,JZ LABEL将在前一次比较结果为零时跳转到标签LABEL处。
汇编语言指令大全.

字扩展指令 CWD(Convert Word to Double Word)
格式: CWD
功能: 将字扩展为双字长,即把AX寄存器的符号位扩展到DX中.
说明:
1. 两个字或字节相除时,先用本指令形成一个双字长的的被除数.
2. 本指令不影响标志位.
3. 示例: 在B1、B2、B3字节类型变量中,分别存有8们带符号数a、b、c,实现(a*b+c)/a运算。
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中和余数在ahaad指令是在执行除法div之前使用的以便得到二进制结果存于al然后除以oprd得到的商在al中余数在ah示例
AAA
未组合的十进制加法调整指令 AAA(ASCII Adgust for Addition)
3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.
4. 该指令对标志位的影响同ADD指令.
ADD
加法指令 ADD(Addition)
格式: ADD OPRD1,OPRD2
功能: 两数相加
说明:
1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数.
汇编语言指令汇总

四、控件条件移指令
JMP opd 无条件转移指令
1.简单的条件转移指令
JZ(或jE) OPR---------------结果为零转移, 测试条件ZF=1
JNZ(或jNE) OPR --------------结果不为零转移,测试条件ZF=0
JS OPR----------------------结果为负转移, 测试条件SF=1
顺序(MSB到LSB)分别为:SF|ZF|不定|AF|不定|PF|不定|CF| 不影响标志位
PUSHF 标志进栈指令-----------flags---->堆栈,不影响标志位
POPF 标志出栈指令-----------从当前堆栈----->flasg
ADC opd,ops 带进位加法指------------opd+ops+CF--->opd,会影响标志位
INC ops 加1指令-----------------opd+1------->opd,不会影响标志位
XADD opd,ops 交换并相加指令----------opd+ops----->temp,opd--->ops,temp--->opd,
JNA(或JBE) OPD---------------不大于或者小于等于则转移
3.带符号比较条件转移指令
JL(或JNGE) --------------小于或者不大于等于则转移
JNL(或JGE)--------------不小于或者大于等于则转移
JG(或NJLE)---------------大于或者不小于等于则转移
结果对标志位无影响,结果(EA)-->R,(EA+2)-->ds
汇编语言常用指令集

功能 把源操作数送给目的操作数 交换两个操作数的数据 把操作数压入或取出堆栈 堆栈指令群 取地址至寄存器 查表指令 加法指令 减法指令 把OP的值加一或减一 将OP的符号反相(取二进制补码) 乘法指令
有符号数扩展指令 非压BCD码运算调整指令 压缩BCD码调整指令 执行BIT与BIT之间的逻辑运算 移位指令 循环移位指令 设定进位标志 设定方向标志 设定中断标志 比较OP1与OP2的值 跳往指定地址执行 当特定条件成立则跳往指定地址执行
3)逻辑指令:对字或字节执行逻辑运算。 逻辑指令类型 指 令 说 明 逻辑运算指令 AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、TEST(测试)
移动指令 SHL(逻辑左移)、SAL(算术左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR(
4)串处理指令:处理存放存储器里的数据串。 串处理指令类型 指 令 说 明 指 令 MOVS(串传送)、CMPS(串比较)、SCAS(串扫描)、LODS(从串取)、STOS(存入串)
2)算术指令:用来执行算术运算。 算术指令类型 指 令 说 明 加法指令 ADD(加法)、ADC(带进位加法)、INC(加1) 减法指令 SUB(减法)、SBB(带借位减法)、DEC(减1)、NEG(求补)、CMP(比较) 乘法指令 MUL(无符号数乘法)、IMUL(带符号数乘法) 除法指令 DIV(无符号数除法)、IDIV(带符号数除法)、CBW(字节转换为字)、CWD(字转换为双字)
RET时则会将堆栈中的标志值弹回寄存器
处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。
格式及应用,请与amay联系,amay加以更新。
XCHG(交换)
DS)、LES(指针送寄存器和ES)
汇编教程汇编指令详解

汇编教程汇编指令详解
汇编语言可以说是机器语言的一种直观形式,是与硬件直接相关的低
级程序设计语言。
它是一种以简洁的汇编指令来表达操作码机器指令的程
序设计语言,汇编语言的指令代码一般比机器语言的指令代码要短,是编
写高效、可移植的机器级程序的理想语言。
汇编语言的基本构成:
(1)指令集:汇编语言的指令集是机器的最基本和最重要的组成部分,也是机器的指令集,描述了机器所做的操作。
(2)操作数:汇编语言的指令集中涉及到的操作数有多种,比如寄
存器操作数、立即数、内存操作数等。
(3)运算和转移指令:汇编语言中的运算和转移指令包括算术运算
指令、比较指令、逻辑运算指令、移位指令等,它们是机器执行的基本操作。
(4)转移指令:汇编语言中的转移指令可以改变机器指令的执行顺序,并实现分支程序设计。
(5)I/O指令:汇编语言中的I/O指令可以实现与外部设备的通信,获取外部设备提供的数据。
(6)汇编指令:汇编指令用于移植各种汇编程序到不同的处理器上,从而实现程序的机器无关性。
一、MOV指令:
MOV指令用于把操作数的值赋给另一个操作数。
汇编常用指令

汇编常用指令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.
以上是一些常用的汇编语言指令及其实例解析。
通过学习和理解这些指令,我们可以更好地理解和掌握汇编语言的编程技巧,从而更好地编写高效的汇编语言程序。
希望本文对大家有所帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令格式(16进制)机器码(2进制)机器码ADD r/m8,r8 00 /r 00 000 0 0 0 oorrrmmm ADD r/m32,r32 01 /r 00 000 0 0 1 oorrrmmm ADD r/m16,r16 01 /r 00 000 0 0 1 oorrrmmm ADD r8,r/m8 02 /r 00 000 0 1 0 oorrrmmm ADD r16,r/m16 03 /r 00 000 0 1 1 oorrrmmm ADD r32,r/m32 03 /r 00 000 0 1 1 oorrrmmm 前6位全为0ADD AL, imm8 04 ib 00 000 1 0 0 ibADD EAX, imm32 05 id 00 000 1 0 1 idADD AX, imm16 05 iw 00 000 1 0 1 iw前5位为0,第6,7位为10???第6位为0有MOD域PUSH ES 06 00 000 1 1 0POP ES 07 00 000 1 1 1前5位为0,第6,7位为11OR r/m8,r8 08 /r 00 001 000 oorrrmmm OR r/m16,r16 09 /r 00 001 001 oorrrmmm OR r/m32,r32 09 /r 00 001 001 oorrrmmm OR r8,r/m8 0A /r 00 001 010 oorrrmmm OR r16,r/m16 0B /r 00 001 011 oorrrmmmOR r32,r/m32 0B /r 00 001 011 oorrrmmm 前4位为0,第5,6位为10OR AL, imm8 0C ib 00 001 1 0 0 ibOR EAX, imm32 0D id 00 001 1 0 1 idOR AX, imm16 0D iw 00 001 1 0 1 iw前4位为0,第5,6位为11PUSH CS 0E 00 001 1 1 0这里没有0F 0F是以后用于扩展00 001 1 1 1ADC r/m8,r8 10 /r 00 010 0 0 0 oorrrmmm ADC r/m32,r32 11 / r 00 010 0 0 1 oorrrmmm ADC r/m16,r16 11 /r 00 010 0 0 1 oorrrmmm ADC r8,r/m8 12 /r 00 010 0 1 0 oorrrmmm ADC r16,r/m16 13 /r 00 010 0 1 1 oorrrmmm ADC r32,r/m32 13 /r 00 010 0 1 1 oorrrmmm 前5位为00010,6、7位为01ADC AL, imm8 14 ib 00 010 100 ibADC EAX, imm32 15 id 00 010 101 idADC AX, imm16 15 iw 00 010 101 iw前5位为00010,6、7位为10PUSH SS 16 00 010 1 1 0POP SS 17 00 010 1 1 1前5位为00010,6、7位为11SBB r/m8,r8 18 /r 00 011 000 oorrrmmm SBB r/m32,r32 19 / r 00 011 001 oorrrmmm SBB r/m16,r16 19 /r 00 011 001 oorrrmmm SBB r8,r/m8 1A /r 00 011 010 oorrrmmm SBB r16,r/m16 1B /r 00 011 011 oorrrmmm SBB r32,r/m32 1B /r 00 011 011 oorrrmmm 前5位为00011,6位为0SBB AL, imm8 1C ib 00 011 100 ibSBB EAX, imm32 1D id 00 011 101 idSBB AX, imm16 1D iw 00 011 101 iw前5位为00011,6位为1PUSH DS 1E 00 011 1 10POP DS 1F 00 011 1 11前5位为00011,6、7位为11AND r/m8,r8 20 /r 00 100 000 oorrrmmm AND r/m16,r16 21 /r 00 100 001 oorrrmmm AND r/m32,r32 21 /r 00 100 001 oorrrmmm AND r8,r/m8 22 /r 00 100 010 oorrrmmmAND r16,r/m16 23 /r 00 100 011 oorrrmmm AND r32,r/m32 23 /r 00 100 011 oorrrmmm 前5位为00100,6位为0AND AL, imm8 24 ib 00 100 100 ibAND EAX, imm32 25 id 00 100 101 idAND AX, imm16 25 iw 00 100 101 iw前5位为00100,6位为1ES前缀26 00 100 11000 100 111 把al调为DAA 27前5位为00100,6位为1,后两位为11SUB r/m8,r8 28 /r 00 101 000 oorrrmmm SUB r/m32,r32 29 / r 00 101 001 oorrrmmm SUB r/m16,r16 29 /r 00 101 001 oorrrmmm SUB r8,r/m8 2A /r 00 101 010 oorrrmmmSUB r16,r/m16 2B /r 00 101 011 oorrrmmm SUB r32,r/m32 2B /r 00 101 011 oorrrmmm 前5位为00101,6位为 0SUB AL, imm8 2C ib 00 101 100 ibSUB EAX, imm32 2D id 00 101 101 idSUB AX, imm16 2D iw 00 101 101 iw前5位为00101,6位为1CS前缀2E 00 101 110DAS 2F 00 101 111前5位为00101,6位为1,后两位为11XOR r/m8,r8 30/r 00 110 000 oorrrmmm XOR r/m16,r16 31/r 00 110 001 oorrrmmm XOR r/m32,r32 31/r 00 110 001 oorrrmmm XOR r8,r/m8 32/r 00 110 010 oorrrmmm XOR r16,r/m16 33/r 00 110 011 oorrrmmm XOR r32,r/m32 33/r 00 110 011 oorrrmmm 前5位为00110,6位为 0XOR AL,imm8 34 ib 00 110 100 ibXOR EAX,imm32 35 id 00 110 101 idXOR AX,imm16 35 iw 00 110 101 iw前5位为00110,6位为 1SS前缀36 00 110 110AAA 37 00 110 111前5位为00110,6位为1,后两位为11CMP r/m8,r8 38 /r 00 111 000 oorrrmmm CMP r/m32,r32 39 /r 00 111 001 oorrrmmm CMP r/m16,r16 39 /r 00 111 001 oorrrmmm CMP r8,r/m8 3A /r 00 111 010 oorrrmmm CMP r16,r/m16 3B /r 00 111 011 oorrrmmm CMP r32,r/m32 3B /r 00 111 011 oorrrmmm 前5位为00111,6位为0CMP AL, imm8 3C ib 00 111 100 ibCMP EAX, imm32 3D id 00 111 101 idCMP AX, imm16 3D iw 00 111 101 iw前5位为00111,6位为1DS前缀3E 00 111 110AAS 3F 00 111 111以上为0-3开头的操作码,按2-3-1-1-1拆分,第六位定有无mod 域,为0有MOD域,3、4、5位决定功能(表1),为1无MOD域,看第7位,为1则看(表2),为0看(表1);(表1)第8位定操作数长度(表2)第8位定操作;经典呀!!INC r32 40+rd 01 0 00 000 +rdINC r16 40+rw 01 0 00 000 +rwDEC r32 48 +rd 01 0 01 000 +rdDEC r16 48 +rw 01 0 01 000 +rw前4位为0100后三位为000,第5位为0位为INC,为1为DEC PUSH r32 50+rd 01 0 10 000+rdPUSH r64 50+rd 01 0 10 000+rdPUSH r16 50+rw 01 0 10 000+rw前4位为0101,第5位为0,后3为000POP r32 58+rd 01 0 11 000+rdPOP r64 58+rd 01 0 11 000+rdPOP r16 58+rw 01 0 11 000+rw由第3位定最后三位是否为寄存器,4、5位定4种操作;按2-1-2-3拆分最规整中间两位定操作,最后3为定寄存器000是eax ……111是ediPUSHA 60 01 1 0 0 0 0 0 PUSHAD 60 01 1 0 0 0 0 0POPA 61 01 1 0 0 0 0 1POPAD 61 01 1 0 0 0 0 1前7位为0110000,最后一位为0为PUSHA,为1为POPABOUND r16,m16/16 62 /r 01 1 0 0 0 1 0 oorrrmmm BOUND r32,m48/48这里改成了4862 /r 01 1 0 0 0 1 0 oorrrmmmARPL r/m16,r16 这里改成16了63 /r01 1 0 0 0 1 1 oorrrmmm64 FS段超越64 01 1 0 0 1 0 065 GS段超越65 01 1 0 0 1 0 166 数据宽度66 01 1 0 0 1 1 067 地址宽度67 01 1 0 0 1 1 1 PUSH imm16 68 01 1 0 1 0 0 0 PUSH imm32 68 01 1 0 1 0 0 0特殊IMULr32,r/m32,imm32 69 /r id01 1 0 1 0 0 1 oorrrmmmidIMULr16,r/m16,imm16 69 /r iw01 1 0 1 0 0 1 oorrrmmmiwPUSH imm8 6A 01 1 0 1 0 1 0 特殊IMULr16,r/m16,imm8 6B /r ib01 1 0 1 0 1 1 oorrrmmmibIMULr32,r/m32,imm8 6B /r ib01 1 0 1 0 1 1 oorrrmmmib前6位为011010,最后一位为1 ,第7位为0时表示同类寄存器之间,为1表示的为不同类寄存器之间,第七位决定立即数宽度最后一位为0,表示push立即数,第七位为0表示8位立即数,第七位为1,表示16/32位立即数。