2-瑞萨汇编指令简介
- 格式:doc
- 大小:35.50 KB
- 文档页数:5
汇编语言常用指令汇总持续更新汇编语言常用指令汇总汇编语言是一种低级编程语言,用于与计算机硬件进行直接交互。
熟悉汇编语言的常用指令对于理解计算机底层原理和进行底层编程非常重要。
本文将对汇编语言常用指令进行汇总,并持续更新。
1. 数据传输指令:- MOV:用于将数据从一个位置复制到另一个位置。
- LXI:用于将双字节立即数加载到指定的寄存器对中。
- LDA:用于将累加器加载到内存地址中的数据。
- STA:用于将累加器中的数据存储到指定的内存地址中。
2. 算术运算指令:- ADD:用于将累加器的内容与给定的寄存器或内存位置中的数据相加。
- SUB:用于从累加器中减去给定的寄存器或内存位置中的数据。
- INR:用于将给定的寄存器或内存位置中的数据增加1。
- DCR:用于将给定的寄存器或内存位置中的数据减少1。
3. 逻辑运算指令:- AND:用于将累加器的内容与给定的寄存器或内存位置中的数据进行逻辑与操作。
- OR:用于将累加器的内容与给定的寄存器或内存位置中的数据进行逻辑或操作。
- XOR:用于将累加器的内容与给定的寄存器或内存位置中的数据进行逻辑异或操作。
- NOT:用于对累加器的内容进行逻辑非操作。
4. 控制指令:- JMP:用于无条件转移到指定的内存地址。
- JZ:在累加器为零时,转移到指定的内存地址。
- JC:在进位标志为1时,转移到指定的内存地址。
- CALL:用于调用子程序。
5. 栈操作指令:- PUSH:用于将给定的寄存器或数据压入栈中。
- POP:从栈中弹出数据并存储到给定的寄存器中。
6. 输入输出指令:- IN:从外部设备读取数据,并存储到累加器中。
- OUT:将累加器中的数据发送到外部设备。
以上仅是汇编语言中常用指令的一小部分,还有许多其他指令可用于执行更复杂的任务。
在实际的汇编语言程序中,这些指令通常会与标签、变量和宏指令一起使用。
总结:汇编语言常用指令汇总了数据传输、算术运算、逻辑运算、控制、栈操作和输入输出等方面的指令。
常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。
在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。
本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。
一、数据传输指令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篇汇编语言指令解释及用法汇编语言是一种低级编程语言,用于编写机器指令,直接控制计算机硬件。
它的指令集相对简单,但是非常灵活,可以直接操作寄存器和内存,实现各种功能。
在这篇文章中,我将为大家解释汇编语言中一些常用指令的含义和用法。
第一篇:数据传输与操作指令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处。
汇编常用指令汇编语言是计算机底层的一种编程语言,通过编写汇编指令可以直接控制机器的硬件和内存。
在使用汇编语言编写程序时,掌握一些常用指令是非常重要的。
本文将介绍一些常用的汇编指令,帮助读者更好地理解和应用汇编语言。
一、数据传输指令数据传输指令用于在寄存器和内存之间传输数据,包括将数据从内存加载到寄存器中,以及将寄存器中的数据存储到内存中。
常用的数据传输指令包括: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:对两个操作数执行逻辑或运算。
汇编常用命令总结汇编语言是一种底层的计算机语言,通过使用汇编命令对机器指令进行编写和控制。
在学习和使用汇编语言时,掌握常用的汇编命令非常重要。
以下是汇编常用命令的详细总结:1.MOV:将数据从一个位置复制到另一个位置。
例如,将数据从寄存器复制到内存或者将数据从内存复制到寄存器。
2.ADD:将两个数相加,并将结果保存在目标位置。
可以用于寄存器之间的相加或者将寄存器和内存中的数据相加。
3.SUB:从一个数中减去另一个数,并将结果保存在目标位置。
与ADD命令类似,可以用于寄存器之间或者寄存器和内存之间的相减。
4.CMP:比较两个数,一些条件下,设置标志位用于后续的条件分支。
例如,当两个数相等时,设置零标志位。
6.JE、JNE、JG、JL、JA等:基于条件进行转移。
例如,JE用于当ZF标志位被设置为1时,跳转到指定位置,即上一次比较的结果是相等的。
7.AND、OR、XOR:对两个数位进行逻辑运算,并将结果保存在目标位置。
AND用于逻辑与运算,OR用于逻辑或运算,XOR用于逻辑异或运算。
8.NOT:对一个数位取反。
9.PUSH:将数据压入栈顶。
用于将寄存器、内存中的数据或者立即数压入栈中。
10.POP:从栈顶弹出数据。
用于将栈中的数据弹出到寄存器或者内存中。
11.CALL:调用子程序或函数。
将当前的程序状态保存到栈上,并跳转到子程序的入口地址。
12.RET:从子程序中返回。
将存储在栈上的返回地址弹出,恢复程序的现场,并返回到调用者。
13.LOOP:循环指令。
根据计数寄存器的值,重复执行指定的循环代码。
14.MOVZX:将一个无符号字节或无符号字进行零扩展,转换为更大的数据类型。
15.MOVSX:将一个有符号字节或有符号字进行符号扩展,转换为更大的数据类型。
16.LEA:将一个偏移地址加载到寄存器中。
17.INC、DEC:递增或递减寄存器或内存中的值。
18.NOP:空操作。
用于占位或延时。
19.INT:软中断。
汇编语言指令大全及实例解析
汇编语言是一种底层的计算机语言,它直接操作计算机的硬件资源。
在汇编语言中,指令是最基本的操作单位,通过指令可以实现对计算机硬件的控制和操作。
本文将为大家介绍一些常用的汇编语言指令,并通过实例解析它们的具体用法和功能。
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.
以上是一些常用的汇编语言指令及其实例解析。
通过学习和理解这些指令,我们可以更好地理解和掌握汇编语言的编程技巧,从而更好地编写高效的汇编语言程序。
希望本文对大家有所帮助。
汇编指令大全(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)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
声明:本文以瑞萨R8CTiny系列的单片机R5F2L368CDFP为例(R8C/L36C群)第一步:新建工程新建一个汇编项目Project Type 为Application类型。
自动生成如下源代码文件:nc_define.inc --------------------------------------------------------配置堆栈sect30.inc --------------------------------------------------------内存分配ncrt0.a30 -------------------------------------------------------启动代码sfr_r8l36c.h ------------------------------CPU相关SFR寄存器FOR Csfr_r8l36c.inc ------------------------------CPU相关SFR寄存器FOR ASM下面着重分析前三个文件:nc_define.inc 英文注释已经很清楚了。
__STANDARD_IO__ .equ0; STANDARD I/O flag definition__HEAPSIZE__ .equ080H; HEEP SIZE definition__STACKSIZE__ .equ080H; STACK SIZE definition__ISTACKSIZE__ .equ080H; INTERRUPT STACK SIZE definition__VECTOR_ADR__ .equ0fed8H; INTERRUPT VECTOR ADDRESS definition __ROM_TOPADR__ .equ04000H; ROM TOP ADDRESS definitionsect30.inc (已经去除部分注释)本文件的主要功能是各种段地址的定义,固定中断向量定义,可变中断向量的定义。
汇编_指令_SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR ;SHL(Shift Left): 逻辑左移
;SHR(Shift Right): 逻辑右移
;SAL(Shift Arithmetic Left): 算术左移
;SAR(Shift Arithmetic Right):算术右移
;其中的 SHL 和 SAL 相同, 但 SHR 和 SAR 不同.
;SHL、SAL: 每位左移, 低位补 0, ⾼位进 CF
;SHR : 每位右移, 低位进 CF, ⾼位补 0
;SAR : 每位右移, 低位进 CF, ⾼位不变
;它们的结果影响 OF、SF、ZF、PF、CF
;它们的指令格式相同:
SHL r/m, i8
SHL r/m, CL
ROL、ROR、RCL、RCR: 循环移位指
;ROL(Rotate Left): 循环左移
;ROR(Rotate Right): 循环右移
;RCL(Rotate through Carry Left): 带进位循环左移
;RCR(Rotate through Carry Right): 带进位循环右移
;ROL: 循环左移, ⾼位到低位并送 CF
;ROR: 循环右移, 低位到⾼位并送 CF
;RCL: 循环左移, 进位值(原CF)到低位, ⾼位进 CF
;RCR: 循环右移, 进位值(原CF)到⾼位, 低位进 CF
;它们的结果影响 OF、CF
;它们的指令格式相同:
SHL r/m, i8
SHL r/m, CL。
汇编指令大全汇编语言是一种低级语言,它直接面向计算机硬件,使用符号指令来代替机器语言指令,能够直接控制计算机硬件。
汇编指令是汇编语言中最基本的部分,它直接对应着计算机的机器指令,是程序员编写程序时直接使用的指令集合。
在汇编指令大全中,我们将详细介绍常见的汇编指令及其功能,帮助读者更好地理解和掌握汇编语言。
1. 数据传送指令。
数据传送指令是汇编语言中最基本的指令之一,用于在寄存器和内存之间传送数据。
常见的数据传送指令包括MOV、XCHG等,它们可以将数据从一个位置传送到另一个位置,是程序中最常用的指令之一。
2. 算术运算指令。
算术运算指令用于对数据进行算术运算,包括加法、减法、乘法、除法等。
常见的算术运算指令有ADD、SUB、MUL、DIV等,它们可以对寄存器或内存中的数据进行相应的算术运算,并将结果存储到指定的位置。
3. 逻辑运算指令。
逻辑运算指令用于对数据进行逻辑运算,包括与、或、非、异或等。
常见的逻辑运算指令有AND、OR、NOT、XOR等,它们可以对数据进行相应的逻辑运算,并将结果存储到指定的位置。
4. 控制转移指令。
控制转移指令用于改变程序的执行顺序,包括无条件转移和条件转移两种。
常见的控制转移指令有JMP、JZ、JG等,它们可以根据指定的条件改变程序的执行流程,实现程序的控制流转移。
5. 程序中断指令。
程序中断指令用于在程序执行过程中产生中断,包括内部中断和外部中断两种。
常见的程序中断指令有INT、IRET等,它们可以在特定的条件下中断程序的执行,并在中断处理程序执行完毕后恢复程序的执行。
6. 栈操作指令。
栈操作指令用于对栈进行操作,包括入栈和出栈两种操作。
常见的栈操作指令有PUSH、POP等,它们可以将数据压入栈中或从栈中弹出数据,实现程序中的数据传递和保存。
以上就是汇编指令大全的简要介绍,通过学习和掌握这些指令,读者可以更好地理解汇编语言的基本原理和运行机制,从而能够编写出高效、精确的汇编程序。
常见汇编语言指令及解释#1常见汇编语言指令解释:1.Rn表示R0~R7中的一个2.#data表示8位的数值00H~FFH3.direct表示8位的地址00H~FFH4.#data1616位立即数5.@Ri表示寄存器间接寻址只能是R0或者R16.@DPTR表示数据指针间接寻址,用于外部64k的RAM/ROM寻址7.bit表示位地址8.$表示当前地址寄存器寻址MOV A,R1将R1中的数值赋予A直接寻址MOV A,3AH将地址3AH中的数值赋予A立即寻址MOV A,#3AH将3AH数值赋予Amov dptr,#1828h寄存器间址MOV A,@Ri将Ri中地址的数值赋予A,Ri或是R0或是R1MOV A,@DPTR变址寻址MOVC A,@A+DPTR以A中的数值为地址偏移量进行查表;变址寻址区是程序存储器ROM,而不是数据存储器RAM相对寻址AJMP MAIN跳转到行号为MAIN处位寻址MOV C,7FH将位地址7FH的数值赋予CMOV C,2FH.7;MOV C,ACC.7MOV A,#3AH数据传输、赋值命令PUSH direct将direct为地址的数值压入堆栈中POP direct将direct为地址的数值弹出堆栈XCH A,direct将direct中的数值与A进行交换ADD A,direct将direct中的数值与A中的数值相加INC direct将direct中的数值加1SUBB A,direct将A中的数值减去direct中的数值和Cy值,并保存在A中,如果想使用不带Cy减法,可以在运算前对Cy清零CLR CDEC direct将direct中的数值减1DA A用于对BCD码加减法后进行10进制调整MUL AB将A和B相乘,并把高八位放在B中,低八位放在A中DIV AB将A和B相除,并把商的整数部分放在A中,余数放在B中ANL A,direct将A与direct中的数值进行与运算,结果保留在A中(与运算规律:有0出0,全1出1)ORL A,direct将A与direct中的数值进行或运算,结果保留在A中(或运算规律:有1出1,全0出0)XRL A,direct将A与direct中的数值进行异或运算,结果保留在A中(异或运算规律:全0出0,全1出0,01、10出1)CLR A对A清零CPL A对A取反RL A对A中数左移RR A对A中数右移RLC A对A中数带Cy左移RRC A对A中数带Cy右移SWAP A对A中的数高4位低4位互相交换LJMP长跳转指令,64K地址范围AJMP短跳转指令,2K地址范围JZ rel如果A为0就跳转到rel行号处JNZ rel如果A不为0就跳转到rel行号处CJNE A,#data,rel如果A不等于data就跳转到rel行号处DJNZ R1,rel如果R1减1后不为0就跳转到rel行号处ACALL rel调用rel子程序,2K地址以内LCALL rel调用rel子程序,64K地址以内RET子程序返回指令RETI中断程序返回指令NOP空操作指令MOV C,bit将位地址bit中的值赋予CCLR bit将bit位地址清0SETB bit将bit位地址置1CPL bit将bit位地址取反ANL C,bit将地址bit中的值和C做与运算,结果存放在C中ORL C,bit将地址bit中的值和C做或运算,结果存放在C中JC rel如果Cy为1,就跳转到rel行号处JNC rel如果Cy为0,就跳转到rel行号处JB bit,rel;若BIT=1则转移JNB bit,rel;若BIT=0则转移JBC bit,reL;若BIT=1则转移,且BIT置11加法指令:ADD A,Rn;ADD A,direct;ADD A,@Ri;ADD A,#DATA2带CY的加法指令:ADDC A,Rn;ADDC A,direct;ADDC A,@Ri;ADDC A,#DATA3加一指令:INC A;INC Rn;INC direct;INC@Ri;INC DPTR4减法指令:SUBB A,Rn;SUBB A,direct;SUBB A,@Ri;SUBB A,#data5减一指令:DEC A;DEC Rn;DEC direct;DEC@Ri6十进制调整指令:DA A7乘法和除法指令:MUL AB;乘积高八位放在B中,低八位放在A中DIV AB;商的整数放在A中,余数放在B中8逻辑异或:XRL A,Rn。
汇编指令分类及使用方法汇编指令可以分为以下几类:数据传输指令、算术运算指令、逻辑运算指令、转移指令和其他指令等。
一、数据传输指令1. MOV(Move)指令:用于将数据从源操作数传输到目的操作数。
例如:MOV AX, BX 将BX寄存器中的数据传输到AX寄存器中。
2. PUSH(Push)指令:将数据压栈。
例如:PUSH AX 将AX寄存器中的数据压入栈中。
3. POP(Pop)指令:将数据从栈弹出。
例如:POP AX 将栈顶数据弹出然后存入AX寄存器中。
二、算术运算指令1. ADD(Addition)指令:将两个操作数相加。
例如:ADD AX, BX 将AX和BX寄存器中的数据相加并存储在AX寄存器中。
2. SUB(Subtraction)指令:将第二个操作数从第一个操作数中减去。
例如:SUB AX, BX 将AX寄存器中的数据减去BX寄存器中的数据并存储在AX寄存器中。
3. MUL(Multiply)指令:将两个操作数相乘,结果存储在一个乘法寄存器中。
例如:MUL AX, BX 将AX寄存器中的数据与BX寄存器中的数据相乘并存储在AX:DX寄存器对中。
三、逻辑运算指令1. AND(And)指令:对两个操作数逐位执行逻辑与运算。
例如:AND AX, BX 将AX和BX寄存器中的数据逐位执行逻辑与运算并存储在AX寄存器中。
2.OR(Or)指令:对两个操作数逐位执行逻辑或运算。
例如:ORAX,BX将AX和BX寄存器中的数据逐位执行逻辑或运算并存储在AX寄存器中。
3. XOR(Exclusive Or)指令:对两个操作数逐位执行逻辑异或运算。
例如:XOR AX, BX 将AX和BX寄存器中的数据逐位执行逻辑异或运算并存储在AX寄存器中。
四、转移指令1.JMP(JuMP)指令:无条件跳转到一些标号或地址。
例如:JMPLABEL1将程序转移到LABEL1处。
2. JE(Jump Equal)指令:当两个操作数相等时跳转。
汇编语言常用指令大全解释汇编语言常用指令大全解释常用汇编指令: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 ----> move 传送字或字节.MOVSX ----> extended move with sign data先符号扩展,再传送.MOVZX ----> extended move with zero data,先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA ----> push all,把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA ----> pop all ,把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD ----> push all data,把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD ----> pop all data,把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP ----> byte swap,交换32位寄存器里字节的顺序XCHG ----> exchange ,交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG----> exchange and add 比较并交换操作数.( 第二个操作数必须为累加器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 ---->load effective address,装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS ----> load DS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES ----> load ES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS ----> load FS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS ----> load GS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS ----> load SS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF ----> load AH from flag 标志寄存器传送,把标志装入AH.SAHF ----> save AH to flag 标志寄存器传送,把AH内容装入标志寄存器.PUSHF ----> push flag 标志入栈.POPF ----> pop flag 标志出栈.PUSHD ----> push dflag , 32位标志入栈.POPD ----> pop dflag, 32位标志出栈.二、算术运算指令─────────────────────────ADD 加法.ADC ----> add with carry; 带进位加法.INC ----> increase 1; 加1.AAA ----> ascii add with adjust ; 加法的ASCII码调整.DAA ----> decimal add with adjust; 加法的十进制调整.SUB ----> substract; 减法.SBB ----> substract with borrow; 带借位减法.DEC ----> decrease 1; 减1.NEG ----> negative; 求反(以0 减之).CMP ----> compare; 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS ----> ascii adjust on substract; 减法的ASCII码调整.DAS ----> decimal adjust on substract; 减法的十进制调整.MUL ----> multiplication; 无符号乘法.IMUL ----> integer multiplication; 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM ----> ascii adjust on multiplication; 乘法的ASCII码调整.DIV ----> divide; 无符号除法.IDIV ----> integer divide; 整数除法.以上两条,结果回送:商回送AL,余数回送AH(字节运算);或商回送AX,余数回送DX, (字运算).AAD ----> ascii adjust on divide; 除法的ASCII码调整.CBW ----> change byte to word; 字节转换为字.(把AL中字节的符号扩展到AH中去) CWD ----> change word to double word; 字转换为双字.(把AX中的字的符号扩展到DX 中去)CWDE ----> change word to double word with sign to EAX;字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ --->change double word to quadrate word 双字扩展.(把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令─────────────────────────AND OPRD1,OPRD2 与运算.两个全是1才是1,其余全是O.与操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位清零的场合.OR OPRD1,OPRD2 或运算.一个是1就是1,其他全是0.或操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位为1的场合.XOR OPRD1,OPRD2 异或运算.一样的为0,不一样的为1.异或指令主要用在使一个操作数的若干位不变,而另外若干位取反的场合.NOT OPRD 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL ----> shift left; 逻辑左移.SAL ----> arithmatic shift left; 算术左移.(=SHL)SHR ----> shift right; 逻辑右移.SAR ----> arithmatic shift right; 算术右移.(=SHR)ROL ----> rotate left; 循环左移.ROR ----> rotate right; 循环右移.RCL ----> rotate left with carry; 通过进位的循环左移.RCR ----> rotate right with carry; 通过进位的循环右移.以上八种移位指令,其移位次数可达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 ----> move string; 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS ----> compare string; 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS ----> scan string; 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS ----> load string; 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符.LODSW 传送字. LODSD 传送双字. )STOS ----> store string; 保存串.是LODS的逆过程.REP ----> repeat 当CX/ECX<>0时重复.REPE/REPZ ----> repeat when equal/repeat when zero flag 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ ----> repeat when not equal/repeat when zero flag 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC ----> repeat when carry flag ; 当CF=1且CX/ECX<>0时重复.REPNC ----> repeat when not carry flag ; 当CF=0且CX/ECX<>0时重复.五、程序转移指令─────────────────────────1>无条件转移指令(长转移)JMP ---->jump 无条件转移指令CALL 过程调用RET/RETF---->return/return far;过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 ) JA/JNBE 不小于或不等于时转移.JAE/ JNB ---->jump when above or equal/ jump when not below大于或等于转移.JB/JNAE --->jump when below/ jump when not above or equal小于转移.JBE/JNA ---->jump when below or equal/ jump when not above;小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE ---->jump when greater/ jump when not less or equal/ jump when not less or equal;大于转移.JGE/JNL ---->jump when greater or equal/ jump when not less大于或等于转移.JL/JNGE ---->jump when less/ jump when not greater or equal;小于转移.JLE/JNG ---->jump when less or equal/ jump when not greater;小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ ---->jump when equal/ jump when has zero flag等于转移.JNE/JNZ ---->jump when not equal/ jump when not has zero flag;不等于时转移.JC --->jump when has carry flag 有进位时转移.JNC ---->jump when not has carry flag 无进位时转移.JNO ---->jump when not has overflow flag 不溢出时转移.JNP/JPO ---->jump when not has parity flag/ jump when parity flag is odd 奇偶性为奇数时转移JNS ---->jump when not has sign flag 符号位为"0" 时转移.JO ---->jump when has overflow flag 溢出转移.JP/JPE ---->jump when has parity flag / jump when parity flag is even 奇偶性为偶数时转移.JS ---->jump when has sign flag 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ ---->jump when has sign flag/ loop zero CX不为零且标志Z=1时循环. LOOPNE/LOOPNZ ---->loop not equal/ loop not zero; CX不为零且标志Z=0时循环. JCXZ ---->jump when CX is zero CX为零时转移.JECXZ ---->jump when ECX is zero ECX为零时转移.4>中断指令INT ---->interrupt 中断指令INTO ---->overflow interrup 溢出中断IRET ---->interrupt return 中断返回5>处理器控制指令HLT ---->halt 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.ESC ---->escape 转换到外处理器.LOCK 封锁总线.NOP ---->no operation 空操作.STC ---->set carry 置进位标志位.CLC ---->clear carry 清进位标志位.CMC ---->carry make change 进位标志取反.STD ---->set direction 置方向标志位.CLD ---->clear direction 清方向标志位.STI ---->set interrupt 置中断允许位.CLI ---->clear interrupt 清中断允许位.六、伪指令─────────────────────────DW ---->definw word 定义字(2字节).PROC ---->procedure 定义过程.ENDP ---->end of procedure 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS ---->end segment 段结束.END 程序结束.。