汇编基本指令
常见汇编代码
常见汇编代码汇编语言是一种低级语言,主要用于编写计算机的指令集。
在程序开发和系统调试中,掌握常见的汇编代码是非常重要的。
本文将介绍一些常见的汇编代码及其用途。
一、数据传输指令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个常用汇编命令
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 字节内容
arm 汇编 指令
arm 汇编指令ARM汇编指令是一种用于编写ARM处理器程序的语言。
ARM处理器广泛应用于嵌入式系统和移动设备等领域。
ARM汇编指令与x86汇编指令有所不同,它基于RISC(精简指令集计算机)架构。
下面是一些基本的ARM汇编指令:1. 数据传输指令:用于在寄存器之间传输数据。
例如:- mov:将数据从一个寄存器传输到另一个寄存器。
- ldr:将数据从内存传输到寄存器。
2. 算术指令:用于执行加法、减法、乘法和除法等操作。
例如:- add:加法操作。
- sub:减法操作。
- mull:乘法操作。
- div:除法操作。
3. 逻辑指令:用于执行逻辑操作,如与、或、非等。
例如:- and:与操作。
- or:或操作。
- xor:异或操作。
4. 移位指令:用于对数据进行左移、右移或无符号右移。
例如:- lsr:无符号右移。
- asr:带符号右移。
- ror:循环右移。
5. 比较指令:用于比较两个寄存器的值。
例如:- cmp:比较两个寄存器的值,若相等则返回0,否则返回1。
6. 跳转指令:用于改变程序的执行流程。
例如:- b:条件跳转。
- bl:无条件跳转。
- bx:带状态跳转。
7. 循环指令:用于实现循环操作。
例如:- loop:内部循环。
- ldp:外部循环。
8. 调用指令:用于实现函数调用。
例如:- blx:带状态调用。
- bx:不带状态调用。
9. 系统调用指令:用于实现与操作系统交互的功能。
例如:- swi:执行系统调用。
10. 存储器访问指令:用于访问内存数据。
例如:- str:将数据存储到内存。
- ldr:从内存中加载数据。
以上仅为ARM汇编指令的一部分,实际上,ARM汇编指令还有很多其他功能。
为了更好地理解和使用ARM汇编指令,可以参考相关的教程和手册,并进行实际操作。
汇编常用指令
汇编常用指令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中存储的数据按位进行取反操作。
汇编指令大全
汇编指令大全(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)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
汇编指令大全
汇编指令大全1. 引言汇编语言是一种基于计算机硬件体系结构的低级语言。
它用于编写与硬件交互的程序,并且具有直接访问计算机底层硬件的能力。
汇编指令是汇编语言中的基本操作指令,用于执行各种计算机操作,如数据传输、算术运算和逻辑运算等。
本文将为您介绍一些常见的汇编指令。
2. 数据传输指令数据传输指令用于在寄存器之间或内存和寄存器之间传输数据。
2.1 MOV - 数据传送指令mov是最常见的数据传送指令之一。
它用于将数据从一个源操作数传送到一个目的操作数。
mov destination, source其中,destination是目的操作数,source是源操作数。
这两个操作数可以是寄存器、内存地址或立即数。
2.2 LEA - 加载有效地址指令lea指令用于加载一个有效地址到一个目的操作数。
lea destination, source其中,destination是目的操作数,通常为一个寄存器,source是一个内存地址。
3. 算术运算指令算术运算指令用于执行加法、减法、乘法和除法等算术运算。
3.1 ADD - 加法指令add指令用于将两个操作数相加,并将结果存储在目的操作数中。
add destination, source其中,destination是目的操作数,source是源操作数。
这两个操作数可以是寄存器或内存地址。
3.2 SUB - 减法指令sub指令用于将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。
sub destination, source其中,destination是目的操作数,source是源操作数。
这两个操作数可以是寄存器或内存地址。
3.3 MUL - 乘法指令mul指令用于将两个操作数相乘,并将结果存储在目的操作数中。
其中,destination是目的操作数,source是源操作数。
这两个操作数可以是寄存器或内存地址。
3.4 DIV - 除法指令div指令用于将目的操作数除以源操作数,并将商存储在目的操作数中,余数存储在另一个寄存器中。
汇编语言常用指令大全
汇编语言常用指令大全汇编语言是一种计算机编程语言,使用指令来控制计算机硬件执行特定的操作。
在本文中,我们将介绍一些常用的汇编语言指令,以帮助读者更好地理解和学习汇编语言。
一、数据传输指令1. MOV:将数据从一个位置复制到另一个位置。
例子:MOV AX, BX 将寄存器BX中的值复制到寄存器AX中。
2. PUSH:将数据压入堆栈。
例子:PUSH AX 将寄存器AX中的值压入堆栈。
3. POP:从堆栈中弹出并获取数据。
例子:POP AX 从堆栈中弹出一个值,并将其存入寄存器AX中。
二、算术指令1. ADD:将两个操作数相加。
例子:ADD AX, BX 将寄存器AX和BX中的值相加,并将结果存入寄存器AX中。
2. SUB:将一个操作数从另一个操作数中减去。
例子:SUB AX, BX 将寄存器BX中的值从寄存器AX中减去,并将结果存入寄存器AX中。
3. MUL:将两个操作数相乘。
例子:MUL AX, BX 将寄存器AX和BX中的值相乘,并将结果存入寄存器AX中。
三、逻辑指令1. AND:进行逻辑与操作。
例子:AND AX, BX 对寄存器AX和BX中的值进行逻辑与操作,并将结果存入寄存器AX中。
2. OR:进行逻辑或操作。
例子:OR AX, BX 对寄存器AX和BX中的值进行逻辑或操作,并将结果存入寄存器AX中。
3. NOT:进行逻辑非操作。
例子:NOT AX 对寄存器AX中的值进行逻辑非操作。
四、条件分支指令1. JMP:无条件跳转到指定的地址。
例子:JMP label 跳转到标记为label的地址。
2. JZ:当操作数为零时跳转到指定的地址。
例子:JZ label 如果寄存器AX中的值为零,则跳转到标记为label 的地址。
3. JC:当进位标志为1时跳转到指定的地址。
例子:JC label 如果进位标志位为1,则跳转到标记为label的地址。
五、循环指令1. LOOP:当计数器不为零时,循环执行指定的代码块。
汇编基本指令查询
1.数据操作MOV AX,BX 数据传送指令,将BX的值移送给AX中.MOVSX AX,BL 符号填充命令,将BL的值移送给AX中,同时用BL的符号位填充AX 的高位数据为符号位MOVZX AX,BL 零填充指令,将BL的值移送给AX中,同时用0填充AX的高位数据位.XCHG AX,BX 将AX与BX的值互换.2.算术运算ADD AX,BX 加法运算AX=AX+BXSUB AX,BX 减法运算AX=AX-BXINC AX 寄存器加 AX=AX+1DEC AX 寄存器减AX=AX-1MUL 乘法运算DIV 除法运算3.比较语句CMP AX,BX AX寄存器减去BX寄存器的内容AND AX,BX AX与BX做"与运算"OR AX,BX AX与BX做"或运算"TEST AX,BX 与AND AX,BX命令相同的效果XOR AX,AX 使AX的内容清零,每个寄存器与自己做异或运算,等于清零动作.1,根据条件标志位的状态判断的转移指令JZ/JE 结果为零/相等则转移。
JNZ/JNE 结果不为零/不相等则转移。
//============================================================== JS 结果为负则转移。
JNS 结果为正则转移。
//============================================================== JO 溢出则转移。
JNO 不溢出则转移。
//============================================================== JP/JPE 奇偶位为1则转移。
JNP/JPO 奇偶位为0则转移。
//============================================================== JC 进位为1则转移。
汇编指令大全+很全的汇编指令
for Addition)
1. 调整操作如下
格式: DAA
(1) 若(AL) and 0FH>9 或 AF=1
,则(AL)<--(AL)+6,AF<--1,对低
功能: 对AL中的两个组合进制数相加的结果进行调 四位的调整.
整,调整结果仍放在AL中,进位标志放在CF中.
(2) 若(AL) and 0F0H>90H 或
OPRD2为立即数,也可以是任意一 个通用寄存器操作数.立即数只 能用于源操作数.
2. OPRD1和OPRD2均为寄存器是 允许的,一个为寄存器而另一个 为存储器也是允许的, 但不允许 两个都是存储器操作数.
3. 加法指令运算的结果对CF、 SF、OF、PF、ZF、AF都会有影 响.以上标志也称为结果标志.加 法指令适用于无符号数或有符号 数的加法运算. 说明:
作数OPRD2与目的操数OPRD1交换.
2. 段寄存器内容不能用XCHG指
令来交换.
3. 若要实现两个存储器操作数 DATA1及DATA2的交换,可用以下 指令实现: 示例: PUSH DATA1
页码,1/22
星尘-易尘
PUSH DATA2 POP DATA1 POP DATA2
5 XLAT 查表指令 XLAT
注意: 上面LDS DI,[BX]指令的 功能是把BX所指的32位地址指针 的段地址送入DS,偏移地址送入
页码,2/22
星尘-易尘
12 LES
从存储器取出32位地址的指令 LES 格式: LES OPRD1,OPRD2 功能: 从存储器取出32位地址的指令.
13 ADD
加法指令 ADD(Addition) 格式: ADD OPRD1,OPRD2 功能: 两数相加
汇编指令(常用指令)
汇编指令百科名片汇编指令是汇编语言中使用的一些操作符(如mov,inc,loop)和助记符,还包括一些伪指令(如assume,end)。
用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。
目录编辑本段一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。
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.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器.PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.编辑本段二、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)编辑本段三、逻辑运算指令AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如MOV CL,04SHL AX,CL编辑本段四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.编辑本段五、程序转移指令1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为"0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.编辑本段六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.七、处理机控制指令:标志处理指令CLC(进位位置0指令)CMC(进位位求反指令)STC(进位位置为1指令)CLD(方向标志置1指令)STD(方向标志位置1指令)CLI(中断标志置0指令)STI(中断标志置1指令)NOP(无操作)HLT(停机)WAIT(等待)ESC(换码)LOCK(封锁)。
汇编语言 基本指令
①输入指令
将外设数据传送给 将外设数据传送给CPU内的 内的AL/AX 内的
IN 指令 一般格式 IN AL,n ; , IN AX,n ; , IN AL,DX ; , IN AX,DX ; , I/O端口输入数据至 端口输入数据至AL或AX. 功 能 从I/O端口输入数据至AL或AX. 输入指令允许把一个字节或一个字由一个输入端口传 送到AL或 中 若端口地址超过255时,则必须用 送到 或AX中.若端口地址超过 时 则必须用DX 保存端口地址,这样用DX作端口寻址最多可寻找 作端口寻址最多可寻找64K 保存端口地址,这样用 作端口寻址最多可寻找 个端口. 个端口.
常用伪指令(补充) 四 常用伪指令(补充)
data segment BUF1 dw 15H,20H,30H,50H,80H BUF2 dw 10 DUP(?) data ends DB和DW也可以定义一组内存空间 相当于一个数组, DB和DW也可以定义一组内存空间,相当于一个数组, 也可以定义一组内存空间, 变量名指向第一个元素的地址. 变量名指向第一个元素的地址. 如 MOV AX,BUF1 MOV BX,BUF1+4 执行后 (AX)=15H,(BX)=30H 因为是字类型所以每后一个元 素+2. .
显示字符串( 号调用 号调用) ⑸显示字符串(9号调用) LEA DX,待显示字符串首偏移地址 , MOV AH,9 , INT 21H; 将当前数据区中以 ' $ ' ; 将当前数据区中以' 结尾的字符串显示 字符串输入( (号调用 ⑹字符串输入SP 10号调用) ( 号调用) SP)- )-2 )- LEA DX,缓冲区首偏移地址 , MOV AH,10 , INT 21H ;从键盘上输入一字符串 到用户定义的输入缓冲区中,并显示. 到用户定义的输入缓冲区中,并显示.
汇编语言最全指令表
伪指令?1、定位伪指令ORG m?2、定义字节伪指令DB X1,X2,X3, (X)?3、字定义伪指令DW Y1,Y2,Y3,…,Yn4、汇编结束伪指令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)→ RnMOV Rn ,direct;(direct )→ RnMOV Rn ,#data;data → Rn?三、以直接寻址的单元为目的操作数的指令(5条)MOV direct,A;(A)→directMOV direct,Rn;(Rn)→directMOV direct,direct ;(源direct)→目的directMOV direct,@Ri;((Ri))→directMOV 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)→AADD A,direct ;(A)+(direct)→AADD A,@Ri ;(A)+((Ri))→AADD A,#data ;(A)+#data→A二、带进位加法指令(4条)ADDC A,Rn ;(A)+(Rn)+CY→AADDC A,direct ;(A)+(direct)+CY →AADDC A,@Ri ;(A)+((Ri))+CY →AADDC 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)?INC DPTR ;(DPTR)+1 →DPTR四、十进制调整指令(1条)DA A减法指令一、带进位减法指令SUBB A,RnSUBB A,directSUBB A,@RiSUBB A,#data二、减1指令(4条)DEC ADEC RnDEC directDEC @Ri乘法指令MUL AB除法指令DIV AB逻辑运算指令累加器A的逻辑操作指令一、累加器A清0CLR A二、累加器A取反CPL A三、左环移指令RL A四、带进位左环移指令RLC A五、右环移指令RR A六、带进位右环移指令RRC A七、累加器ACC半字节交换指令SWAP A两个操作数的逻辑操作指令逻辑与指令ANL A,RnANL A,directANL A,@RiANL A,#dataANL direct ,AANL direct,#data逻辑或指令ORL A,RnORL A,directORL A,@RiORL A,#dataORL direct,AORL direct,#data逻辑异或指令XRL A,RnXRL A,directXRL A,@RiXRL A,#dataXRL direct,AXRL direct,#data位操作指令位变量传送指令MOV C,bitMOV bit,C位变量修改指令CLR CCLR bitCPL CCPL bitSETB CSETB bit位变量逻辑与指令ANL C,bitANL C,/bit位变量逻辑或指令ORL C,bitORL C,/bit控制转移指令无条件转移指令(4条)1、短跳转指令AJMP addr11 ;先(PC)+2→PC ;addr11→PC10~0 ,(PC15~11)2、跳转指令LJMP addr16 ;Addr16→PC3、转移指令SJMP rel ;先(PC)+2→PC;后(PC)+rel→PC4、寄存器加变址存器间接转移指令(散转指令)JMP @A+DPTR ;(A)+(DPTR)→PC条件转移指令(8条)一、测试条件符合转移指令JZ rel ;当A=0 时,(PC)+rel→(PC)转移;当A≠0时,顺序执行。
汇编语言常用指令大全
MOV指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用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=Tmp1.必须有一个操作数是在寄存器中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_ONEMOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。
汇编语言常用语句一览
汇编语言常用语句一览在学习和使用汇编语言时,熟悉常用的语句和指令是非常重要的。
本文将列举出一些汇编语言中常用的语句,以供参考和学习。
1. 数据传输指令MOV:将源数据移动到目标操作数中PUSH:将数据压入栈中POP:将栈顶元素弹出2. 算术运算指令ADD:将源数据与目标操作数相加SUB:将源数据与目标操作数相减INC:目标操作数自增1DEC:目标操作数自减1MUL:将源数据与目标操作数相乘DIV:将源数据与目标操作数相除3. 条件跳转指令JMP:无条件跳转到指定地址JZ/JNZ:根据零标志位是否为零跳转JE/JNE:根据相等标志位是否为真跳转JL/JLE:根据小于/小于等于标志位是否为真跳转JG/JGE:根据大于/大于等于标志位是否为真跳转4. 循环指令LOOP:循环指令,根据计数寄存器的值判断是否继续循环 INC/DEC + CMP + JNZ:结合使用,实现循环功能5. 标志位设置指令CMP:比较操作数,设置相应标志位TEST:与目标操作数进行按位与操作,设置相应标志位6. 子程序调用指令CALL:调用子程序RET:子程序返回指令7. 输入输出指令IN:从设备或端口读取数据OUT:向设备或端口输出数据8. 定义数据段指令DB:定义字节数据DW:定义字数据DD:定义双字数据9. 定义代码段指令SECTION:定义代码段10. 定义变量和常量指令DW:定义字变量或常量DD:定义双字变量或常量11. 定义字符串指令DB "Hello, World!",0:定义以0结尾的字符串12. 定义宏指令MACRO:定义宏ENDM:结束宏定义13. 定义过程指令PROC:定义过程ENDP:结束过程定义14. 调试指令INT 3:设置断点NOP:空操作以上是汇编语言中常用的语句一览。
通过熟悉和掌握这些语句,可以更好地编写汇编语言程序,并实现所需的功能。
希望本文对你的学习和使用汇编语言有所帮助。
汇编指令大全
汇编指令大全汇编指令是计算机程序设计中的重要组成部分,它是一种低级语言,直接操作计算机硬件,能够对计算机进行精细的控制。
在学习汇编语言时,掌握各种指令是非常重要的,因为它们是编写高效、精确的程序的基础。
本文将对常用的汇编指令进行介绍,帮助读者更好地理解和运用汇编语言。
1. 数据传送指令。
数据传送指令用于在寄存器和内存之间传送数据,常见的指令包括MOV、XCHG等。
MOV指令用于将数据从一个位置复制到另一个位置,XCHG指令用于交换两个位置的数据。
这些指令在编写程序时经常用到,能够实现数据的传递和交换。
2. 算术运算指令。
算术运算指令用于对数据进行加减乘除等数学运算,常见的指令包括ADD、SUB、MUL、DIV等。
ADD指令用于加法运算,SUB指令用于减法运算,MUL指令用于乘法运算,DIV指令用于除法运算。
这些指令能够对数据进行各种数学运算,是编写复杂程序时不可或缺的指令。
3. 逻辑运算指令。
逻辑运算指令用于对数据进行逻辑运算,常见的指令包括AND、OR、NOT、XOR等。
AND指令用于按位与运算,OR指令用于按位或运算,NOT指令用于按位取反,XOR指令用于按位异或运算。
这些指令能够对数据进行逻辑运算,常用于程序中的逻辑判断和条件运算。
4. 跳转指令。
跳转指令用于改变程序的执行顺序,常见的指令包括JMP、JE、JNE、JG等。
JMP指令用于无条件跳转,JE指令用于相等时跳转,JNE指令用于不相等时跳转,JG指令用于大于时跳转。
这些指令能够实现程序的条件分支和循环控制,是编写复杂逻辑的关键指令。
5. 存储器访问指令。
存储器访问指令用于对存储器进行读写操作,常见的指令包括PUSH、POP、LEA等。
PUSH指令用于将数据压入堆栈,POP指令用于将数据弹出堆栈,LEA 指令用于加载有效地址。
这些指令能够对存储器进行高效的读写操作,是程序设计中不可或缺的指令。
6. 输入输出指令。
输入输出指令用于与外部设备进行数据交换,常见的指令包括IN、OUT等。
汇编语言指令大全
9 SUBB A,Rn 累加器带借位减寄存器内容
10 SUBB A,direct 累加器带借位减直接地址单元的内容
11 SUBB A,@Ri 累加器带借位减间接RAM 中的内容
12 SUBB A,#data 累加器带借位减立即数
7 SJMP rel 相对转移
8 JMP @A+DPTR 相对于DPTR 的间接转移
9 JZ rel 累加器为零转移
10 CJNE rel 累加器非零转移
11 CJNE A,direct,rel 累加器与直接地址单元比较,不相等则转移
12 CJNE A,#data,rel 累加器与立即数比较,不相等则转移
15 JB bit,rel 直接地址位为1 则转移
16 JNB bit,rel 直接地址位为0 则转移
17 JBC bit,rel 直接地址位为1 则转移,该位清零
逻辑操作数指令:
1 ANL A,Rn 累加器与寄存器相“与”
2 ANL A,direct 累加器与直接地址单元相“与”
2 CLR bit 清直接地址位
3 SETB C 置进位位
4 SETB bit 置直接地址位
5 CPL C 进位位求反
6 CPL bit 置直接地址位求反
7 ANL C,bit 进位位和直接地址位相“与”
8 ANL C,bit 进位位和直接地址位的反码相“与”
26 XCH A,direct 直接地址单元与累加器交换
27 XCH A,@Ri 间接RAM 与累加器交换
28 XCHD A,@Ri 间接RAM 的低半字节与累加器交换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
符号扩展指令
CBW,CWD: 把AL中的符号扩展到寄存器AH中,不影响各标志位。CWD则把AX中的符号扩展到DX,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR清高8位或高16位。
逻辑运算指令与位移指令
注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。
LOOPE/LOOPZ 标号:等于/全零循环指令。CX的值减1,如果结果不等于0,并且ZF(0标志)等于1,则转移到标号。
LOOPNE/LOOPNZ 标号:不等于/非零循环指令,CX的值减1,如果结果不等于0,并且ZF(0标志)等于0,则跳转到标号。
JCXZ 标号: 该指令实现当寄存器CX的值等于0转移到标号,否则顺序执行。通常该指令用在循环开始前,以便在循环次数位0时,跳过循环体。
CLC:进位位清零。
STC:进位位为1。
CMC:进位位取反。
CLD:使方向标志DF为零,在执行串操作中,使地址按递增方式变化。
STD:DF为1。
CLI:清中断允许标志IF。Cpu不相应来自外部装置的可屏蔽中断。
STI:IF为1。
加减运算指令
注意: 对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。
乘除运算指令
MUL 操作数 :无符号数乘法指令。操作数不能是立即数。操作数是字节与AL中的无符号数相乘,16位结果送AX中。若字节,则与AX乘,结果高16送DX,低16送AX。如乘积高半部分不为零,则CF、OF为1,否则为0。所以CF和OF表示AH或DX中含有结果的有效数。
IMUL 操作数 :有符号数乘法指令。基本与MUL相同。
条件转移指令:所有的条件转移指令都是段内转移。她是由J加上相应的含义字母组合成。有符号数关系G(大于),E(等于),L(小于);无符号数关系A(高于)、E(等于)和B(低于);字母N表示“不”:NB(不小于),NE(不等于)。
循环指令
LOOP 标号:她使寄存器CX减1,若结果不等于0则转到标号,否则顺序执行LOOP指令后的指令。最多循环65536次。
POP 操作数, 操作数不能是CS和立即数
标志操作指令
LAHF:把标志寄存器低8位,符号SF,零ZF,辅助进位AF,奇偶PF,进位CF传送到AH指定的位。不影响标志位。
SAHF:与上相反,把AH中的标志位传送回标志寄存器。
PUSHF:把标志寄存器内容压入栈顶。
POPF:把栈顶的一个字节传送到标志寄存器中。
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)
SHR 操作数 1或CL :逻辑右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL;左边用0补足,移出的最低位进CF(进位)对于无符号数,右移一位相当于除2。
ROL/ROR 操作数 1或CL: 不带进位左移/右移,操作数是通用寄存器或者存储器操作数,位移数为1或为CL。
RCL/RCR循环。操作数是通用寄存器或者存储器操作数,位移数为1或为CL。
JMP 通用寄存器/存储单元:无条件段间间接转移指令,操作数给定的是目标地址处。
JMP FAR PTR 标号:无条件段间直接转移指令,她的具体动作是把指令中包含的目标地址的段值和偏移分别置茹CS和IP。
JMP 操作数:无条件段间间接转移指令,操作数是双字存储单元,给定目标地址,低字节送IP,高字节送CS。
数据传送指令
MOV:寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。
XCHG交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。
转移指令
注意:由于代码段可分为多个段,所以根据转移时是否重置代码段寄存器CS内容,可分为段内转移和段间转移。段内转移仅重置IP的转移,转移后指令仍在同一代码段中。段间转移重置CS,所以转移后继续执行的指令在另一个段中。
JMP 标号 :无条件跳转到标号位置执行,段内直接转移指令。地址差用一个字节表示为短转移,用一个字表示为近转移。
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。
LEA 16位寄存器 存储器操作数 传送有效地址指令:必须是一个16位寄存器和存储器操作数。
LDS 16位寄存器 存储器操作数 传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS中。
LES :同上,只是16位段基址送ES中。
堆栈操作指令
PUSH 操作数,操作数不能使用立即数,
ADD。
ADC:把进位CF中的数值加上去。
INC:加1指令
SUB。
SBB:把进位CF中数值减去。
DEC:减1指令。
NEG 操作数:取补指令,即用0减去操作数再送回操作数。
CMP:比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF(零)是否被置1判断相等;如果两者是无符号数,可根据CF判断大小;如果两者是有符号数,要根据SF和OF判断大小。