ARM汇编指令列表

ARM汇编指令列表
ARM汇编指令列表

CPSR

位[31:24]为条件位域,用f表示;位[23:16]为状态位域,用s表示;位[15:8] 为扩展位域,用x表示;位[7:0] 为控制位域,用c表示;与指令MSR相关

关于移位

中断向量表

Load and Store指令

LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。

LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。

LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。

LDR R0,[R1,R2] !;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。

LDR R0,[R1,#8] !;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址 R1+8写入R1。

LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址 R1+R2写入R1。

LDR R0,[R1,R2,LSL#2]!;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。LDR R0,[R1],R2,LSL#2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。

LDRB R0,[R1] ;将存储器地址为R1的字节数据读入寄存器 R0,并将R0的高24 位清零。

LDRB R0,[R1,#8] ;将存储器地址为R1+8的字节数据读入寄存器R0,并将 R0的高24位清零。

LDRH R0,[R1] ;将存储器地址为R1的半字数据读入寄存器 R0,并将R0的高16位清零。

LDRH R0,[R1,#8] ;将存储器地址为R1+8的半字数据读入寄存器R0,并将R0 的高16位清零。

LDRH R0,[R1,R2] ;将存储器地址为R1+R2的半字数据读入寄存器R0,并将 R0的高16位清零。

STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。

STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中。

STRB R0,[R1] ;将寄存器R0中的字节数据写入以R1为地址的存储器中。

STRB R0,[R1,#8] ;将寄存器R0中的字节数据写入以R1+8为地址的存储器中。

STRH R0,[R1] ;将寄存器R0中的半字数据写入以R1为地址的存储器中。

STRH R0,[R1,#8] ;将寄存器R0中的半字数据写入以R1+8 为地址的存储器中。

LDR r, =label 会把label表示的值加载到寄存器中,而LDR r, label会把label当做地址,把label指向的地址中的值加载到寄存器中。v

LDM STM

LDM(或STM){条件}{类型} 基址寄存器{!},寄存器列表{∧}

{类型}:

IA 每次传送后地址加1(inc after);

IB 每次传送前地址加1(inc before);

DA 每次传送后地址减1(dec after);

DB 每次传送前地址减1(dec before);

FD 满递减堆栈(full dec);

ED 空递减堆栈(empty dec);

FA 满递增堆栈(full add);

EA 空递增堆栈(empty add);

{!}为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。

基址寄存器不允许为R15,寄存器列表可以为R0~R15的任意组合。

{∧}为可选后缀,当指令为LDM且寄存器列表中包含R15,选用该后缀时表示:除了正常的数据传送之外,还将SPSR复制到CPSR。同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。

STMFD R13!,{R0,R4-R12,LR} ;将寄存器列表中的寄存器(R0,R4到R12,LR)存入堆栈。

LDMFD R13!, {R0,R4-R12,PC} ;将堆栈内容恢复到寄存器(R0,R4到R12,LR)。

Keil函数调用

入栈: STMDB R13!,{R4,R14} 出栈: LDMIA R13!,{R4,R14} 满自减栈

DSP汇编指令总结

DSP汇编指令总结 一、寻址方式: 1、立即寻址: 短立即寻址(单指令字) 长立即数寻址(双指令字) 第一指令字 第二指令字 16位常数=16384=4000h 2、直接寻址 ARU 辅助寄存器更新代码,决定当前辅助寄存器是否和如何进行增或减。N规定是否改变ARP值,(N=0,不变)

4.3.1、算术逻辑指令(28条) 4.3.1.1、加法指令(4条); 4.3.1.2、减法指令(5条); 4.3.1.3、乘法指令(2条); 4.3.1.4、乘加与乘减指令(6条); 4.3.1.5、其它算数指令(3条); 4.3.1.6、移位和循环移位指令(4条); 4.3.1.7、逻辑运算指令(4条); 4.3.2、寄存器操作指令(35条) 4.3.2.1、累加器操作指令(6条) 4.3.2.2、临时寄存器指令(5条) 4.3.2.3、乘积寄存器指令(6条) 4.3.2.4、辅助寄存器指令(5条) 4.3.2.5、状态寄存器指令(9条) 4.3.2.6、堆栈操作指令(4条) 4.3.3、存储器与I/O操作指令(8条)4.3.3.1、数据移动指令(4条) 4.3.3.2、程序存储器读写指令(2条) 4.3.3.3、I/O操作指令(2条) 4.3.4、程序控制指令(15条) 4.3.4.1、程序分支或调用指令(7条) 4.3.4.2、中断指令(3条) 4.3.4.3、返回指令(2条) 4.3.4.4、其它控制指令(3条)

4.3.1、算术逻辑指令(28条) 4.3.1.1、加法指令(4条); ▲ADD ▲ADDC(带进位加法指令) ▲ADDS(抑制符号扩展加法指令) ▲ADDT(移位次数由TREG指定的加法指令) 4.3.1.2、减法指令(5条); ★SUB(带移位的减法指令) ★SUBB(带借位的减法指令) ★SUBC(条件减法指令) ★SUBS(减法指令) ★SUBT(带移位的减法指令,TREG决定移位次数)4.3.1.3、乘法指令(2条); ★MPY(带符号乘法指令) ★MPYU(无符号乘法指令) 4.3.1.4、乘加与乘减指令(6条); ★MAC(累加前次积并乘)(字数2,周期3) ★MAC(累加前次积并乘) ★MPYA(累加-乘指令) ★MPYS(减-乘指令) ★SQRA(累加平方值指令) ★SQRS(累减并平方指令) 4.3.1.5、其它算数指令(3条); ★ABS(累加器取绝对值指令) ★NEG(累加器取补码指令) ★NORM(累加器规格化指令) 返回 4.3.1.6、移位和循环移位指令(4条); ▲ SFL(累加器内容左移指令) ▲ SFR(累加器内容右移指令) ▲ROL(累加器内容循环左移指令) ▲ROR(累加器内容循环右移指令) 返回 4.3.1.7、逻辑运算指令(4条); ▲ AND(逻辑与指令) ▲ OR(逻辑或指令) ▲ XOR(逻辑异或指令) ▲ CMPL(累加器取反指令) 返回 4.3.2、寄存器操作指令(35条) 4.3.2.1、累加器操作指令(6条)

(完整word版)汇编语言常用指令大全,推荐文档

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段寄存器中。

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

AVRmega8汇编指令汇总.

指令集概述 指令操作数说明操作标志 # 时钟数 算数和逻辑指令 ADD Rd, Rr 无进位加法Rd ← Rd + Rr Z,C,N,V,H 1 ADC Rd, Rr 带进位加法Rd ← Rd + Rr + C Z,C,N,V,H 1 ADIW Rdl,K 立即数与字相加Rdh:Rdl ← Rdh:Rdl + K Z,C,N,V,S 2 SUB Rd, Rr 无进位减法Rd ← Rd - Rr Z,C,N,V,H 1 SUBI Rd, K 减立即数Rd ← Rd - K Z,C,N,V,H 1 SBC Rd, Rr 带进位减法Rd ← Rd - Rr - C Z,C,N,V,H 1 SBCI Rd, K 带进位减立即数Rd ← Rd - K - C Z,C,N,V,H 1 SBIW Rdl,K 从字中减立即数Rdh:Rdl ← Rdh:Rdl - K Z,C,N,V,S 2 AND Rd, Rr 逻辑与Rd ← Rd ? Rr Z,N,V 1 ANDI Rd, K 与立即数的逻辑与操作Rd ← Rd ? K Z,N,V 1 OR Rd, Rr 逻辑或Rd ← Rd v Rr Z,N,V 1 ORI Rd, K 与立即数的逻辑或操作Rd ← Rd v K Z,N,V 1 EOR Rd, Rr 异或Rd ← Rd ⊕ Rr Z,N,V 1 COM Rd 1 的补码Rd ← 0xFF ? Rd Z,C,N,V 1 NEG Rd 2 的补码Rd ← 0x00 ? Rd Z,C,N,V,H 1 SBR Rd,K 设置寄存器的位Rd ← Rd v K Z,N,V 1

CBR Rd,K 寄存器位清零Rd ← Rd ? (0xFF - K Z,N,V 1 INC Rd 加一操作Rd ← Rd + 1 Z,N,V 1 DEC Rd 减一操作Rd ← Rd ? 1 Z,N,V 1 TST Rd 测试是否为零或负Rd ← Rd ? Rd Z,N,V 1 CLR Rd 寄存器清零Rd ← Rd ⊕ Rd Z,N,V 1 SER Rd 寄存器置位Rd ← 0xFF None 1 MUL Rd, Rr 无符号数乘法R1:R0 ← Rd x Rr Z,C 2 MULS Rd, Rr 有符号数乘法R1:R0 ← Rd x Rr Z,C 2 MULSU Rd, Rr 有符号数与无符号数乘法 R1:R0 ← Rd x Rr Z,C 2 FMUL Rd, Rr 无符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2 FMULS Rd, Rr 有符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2 FMULSU Rd, Rr 有符号小数与无符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2跳转指令 RJMP k 相对跳转PC ← PC + k + 1 无 2 IJMP 间接跳转到(Z PC ← Z 无 2 RCALL k 相对子程序调用PC ← PC + k + 1 无 3 ICALL 间接调用(Z PC ← Z 无 3 RET 子程序返回PC ← STACK 无 4 RETI 中断返回PC ← STACK I 4

汇编语言指令汇总

汇编语言程序设计资料简汇 通用寄存器 8位通用寄存器8个:AL、AH、BL、BH、CL、CH、DL、DH。 16位通用寄存器8个:AX、BX、CX、DX、SI、DI、BP、SP。 AL与AH、BL与BH、CL与CH、DL与DH分别对应于AX、BX、CX和DX的低8位与高8位。专用寄存器 指令指针:IP(16位)。 标志寄存器:没有助记符(FLAGS 16位)。 段寄存器 段寄存器:CS、DS、ES、SS。 内存分段:80x86采用分段内存管理机制,主要包括下列几种类型的段: ?代码段:用来存放程序的指令序列。 ?数据段:用来存放程序的数据。 ?堆栈段:作为堆栈使用的内存区域,用来存放过程返回地址、过程参数等。 物理地址与逻辑地址 ?物理地址:内存单元的实际地址,也就是出现在地址总线上的地址。 ?逻辑地址:或称分段地址。 ?段地址与偏移地址都是16位。 ?系统采用下列方法将逻辑地址自动转换为20位的物理地址: 物理地址= 段地址×16 + 偏移地址 ?每个内存单元具有唯一的物理地址,但可由不同的逻辑地址描述。 与数据有关的寻址方式 立即寻址方式 立即寻址方式所提供的操作数紧跟在操作码的后面,与操作码一起放在指令代码段中。立即数可以是8位数或16位数。如果是16位数,则低位字节存放在低地址中,高位字节存放在高地址中。 例:MOV AL,18 指令执行后,(AL)= 12H 寄存器寻址方式 在寄存器寻址方式中,操作数包含于CPU的内部寄存器之中。这种寻址方式大都用于寄存器之间的数据传输。 例3:MOV AX,BX 如指令执行前(AX)= 6789H,(BX)= 0000H;则指令执行后,(AX)= 0000H,(BX)保持不变。 直接寻址方式 直接寻址方式是操作数地址的16位偏移量直接包含在指令中,和指令操作码一起放在代码段,而操作数则在数据段中。操作数的地址是数据段寄存器DS中的内容左移4位后,加上指令给定的16位地址偏移量。直接寻址方式适合于处理单个数据变量。 寄存器间接寻址方式 在寄存器间接寻址方式中,操作数在存储器中。操作数的有效地址由变址寄存器SI、DI或基址寄存器BX、BP提供。 如果指令中指定的寄存器是BX、SI、DI,则用DS寄存器的内容作为段地址。 如指令中用BP寄存器,则操作数的段地址在SS中,即堆栈段。

常用汇编指令表

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.

汇编指令大全

ORG 0000H NOP ;空操作指令 AJMP L0003 ;绝对转移指令 L0003: LJMP L0006 ;长调用指令 L0006: RR A ;累加器A内容右移(先置A为88H) INC A ; 累加器A 内容加1 INC 01H ;直接地址(字节01H)内容加1 INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1 ;(设R0=02H,02H=03H,单步执行后02H=04H) INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1 ;(设R1=02H,02H=03H,单步执行后02H=04H) INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少) INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用 S0019: LCALL S001C ;长调用 S001C: RRC A ;累加器A的内容带进位位右移(设A=11H,C=0 ;单步执行后查A和C内容为多少) DEC A ;A的内容减1 DEC 01H ;直接地址(01H)内容减1 DEC @R0 ;R0间址减1,即R0的内容为地址,该地址的内容减1 DEC @R1 ; R1间址减1 DEC R0 ; R0内容减1 DEC R1 ; R1内容减1 DEC R2 ; R2内容减1 DEC R3 ; R3内容减1 DEC R4 ; R4内容减1 DEC R5 ; R5内容减1 DEC R6 ; R6内容减1 DEC R7 ; R7内容减1 JB 20H,L002D;如果位(20H,即24H的0位)为1则转移 L002D: AJMP L0017 ;绝对转移 RET ;子程序返回指令 RL A ;A左移 ADD A,#01H ;A的内容与立即数(01H)相加 ADD A,01H ; A的内容与直接地址(01H内容)相加 ADD A,@R0 ; A的内容与寄存器R0的间址内容相加 ADD A,@R1 ; A的内容与寄存器R1的间址内容相加

汇编指令大全

汇编指令大全 (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,这取决于外设端口的宽度。

微型计算机汇编指令大全

数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O

INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

汇编指令大全[pdf阅读版]

汇编指令大全 一、数据传输指令 ───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.汇编指令大全 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.

汇编语言最全指令表

伪指令? 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 六、堆栈操作指令

汇编指令大全汇总

一、数据传输指令 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 累加器, ) OUT I/O端口输出. ( 语法: OUT ,累加器) 输入输出端口由立即方式指定时, 其范围是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标志出栈. PUSHD32位标志入栈. POPD32位标志出栈. 二、算术运算指令 ─────────────────────────────────────── ADD加法. ADC带进位加法. INC加1. AAA加法的ASCII码调整. DAA加法的十进制调整. SUB减法. SBB带借位减法. DEC减1. NEC求反(以0 减之). CMP比较.(两操作数作减法,仅修改标志位,不回送结果). AAS减法的ASCII码调整. DAS减法的十进制调整. MUL无符号乘法. IMUL整数乘法. 以上两条,结果回送AH和AL(字节运算),或DX和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. 例: 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 标志入栈.

汇编语言指令大全

AAA 未组合的十进制加法调整 指令 AAA(ASCII Adgust for Addition) 格式: AAA 功能: 对两个组合的十进 制数相加运算(存在AL中) 的结果进行调整,产生一个 未组合的十进制数放在AX 中. 说明: 1. 组合的十进制数和未组合的十进制数:在计算中,十进制数可用四位二进制数编码,称为BCD码. 当一个节(8位)中存放一位BCD码,且放在字节的低4位, 高4位为时称为未组合的BCD码. 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中)和余数(在AH中). 说明: 1. AAD指令是在执行除法DIV之前使用的,以便得到二进制结果存于AL中,然后除以OPRD,得到的商在AL中,余数在AH 中. 2. 示例: MOV BL,5 MOV AX,0308H AAD ;(AL)<--1EH+08H=26H,(AH)<--0 DIV BL ;商=07H-->(AL),余数=03H-->(AH). AAM 未组合十进制数乘法调整 指令 AAM(ASCII Adjust MULtiply) 格式: AAM 功能: 对两个未组合的十 进制数相乘后存于AX中的 结果进行调整,产生一个未 组合的十进制数存在AL中. 说明: 1. 实际上是两个未组合的十进制数字节相乘,一个0~9的数与另一个0~9的数相乘其积最大为81.为了得到正确的结果,应进行如下调整: 乘积: (AH)<--(AL)/10 (AL)<--(AL)MOD10 2. 本指令应跟在MUL指令后使用,乘积的两位十进制结果,高位放在AH中,低位放在AL中.AH内容是MUL指令的结果被10除的商,即(AL)/10,而最后的AL内容是乘积被10整除的余数(即个位数). AAS 未组合十进制减法调整指 令 AAS(ASCII Adjust for Subtraction) 格式: AAS 功能: 对两个未组合十进 制数相减后存于AL中的结 果进行调整,调整后产生一 个未组合的十进制数数且 仍存于AL中. 说明: 1. 本指令影响标志位CF及AF. 2. 调整操作 若(AL) and 0FH > 9 或 AF=1 则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH, 否则(AL)<--(AL) and 0FH ADC 带进位加法指令 ADC(Addition Carry) 格式: ADC OPRD1,OPRD2 功能: OPRD1<--OPRD1 + OPRD2 + CF 说明: 1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一 个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即 数只能用于源操作数. 2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另 一个为存储器也是允许的,但不允许两个都是存储器操作数. 3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志. 4. 该指令对标志位的影响同ADD指令. ADD 加法指令 ADD(Addition) 格式: ADD OPRD1,OPRD2 功能: 两数相加说明: 1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数. 2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数. 3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.加法指令适用于无符号数或

8086汇编指令大全

8086汇编指令大全 标志寄存器:9个有效位,分6个状态寄存器和3个控制寄存器 CF 当执行一个加法(减法)使最高位产生进位(借位)时CF=1 否则CF=0 PF 指令执行的结果低8位有偶数个一时,CF=1 否则CF=0 AF 当执行一个加法(减法)使运算结果低4位向高4位有进位(借位)时AF=1 否则AF+0 ZF 当前运算结果为零,ZF=1 否则ZF=0 SF 符号标志位 OF 溢出标志位 DF 方向标志位 IF 中断允许位IF=1时响应外部中断 TF 跟踪标志位 操作数:[目的操作数(OPD),源操作数(OPS)] ;立即操作数,寄存器操作数,存储器操作数。 寻址方式: 1) 寄存器寻址例:INC AX;MOV AX,BX 2) 寄存器间接寻址(寄存器只能是BX,DI,SI,BP);[PA=(BX、DI、SI)+DS》4)或BP+SS》4]

3) 寄存器相对寻址 4) 基址变址寻址 5) 相对基址变址寻址 6) 直接寻址 7) 立即数寻址 i. 立即数寻址立即数寻址不能用在单操作数指令中 ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段 指令系统: 1) 数据传送指令mov 注意: 不允许在两个存储单元之间直接传送数据 不允许在两个段寄存器之间传送数据 不允许用立即数直接为段寄存器赋值 不影响标志位 不允许寄存器或存储单元到除CS外的段寄存器 2) 入栈(出栈)指令PUSH(POP) 注意: PUSH操作数不能是“立即数”POP操作数不能是段寄存器CS 不影响标志位 先进后出

单操作符 3) 交换指令XCHG 注意: 只允许寄存器与存储单元之间的交换 不影响标志位 4) 换码指令XLAT 5) 地址传送指令LEA(load effective address):偏移地址() 6) 数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI)、高地址的字送DS 7) 附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI)、高地址送ES 上三指令不影响标志位 8) 标志寄存器传送指令 LAHF :标志寄存器低八位送AH SAHF :AH送标志寄存器低八位 PUSHF:标志寄存器压入堆栈 POPF :栈顶内容送标志寄存器 9) 加法指令ADD 目的操作数只能是寄存器或存储单元 对CF,OF,SF,PF,ZF,AF有影响 10) 加1指令INC

相关文档
最新文档