汇编语言学习知识指令速查表

合集下载

汇编指令速查

汇编指令速查

汇编指令速查汇编指令速查GAS中每个操作都是有⼀个字符的后缀,表明操作数的⼤⼩。

C声明GAS后缀⼤⼩(字节)char b1short w2(unsigned) int / long / char*l4float s4double l8long double t10/12注意:GAL使⽤后缀“l”同时表⽰4字节整数和8字节双精度浮点数,这不会产⽣歧义因为浮点数使⽤的是完全不同的指令和寄存器。

操作数格式:格式操作数值名称样例(GAS = C语⾔)$Imm Imm⽴即数寻址$1 = 1Ea R[Ea]寄存器寻址%eax = eaxImm M[Imm]绝对寻址0x104 = *0x104(Ea)M[R[Ea]]间接寻址(%eax)= *eaxImm(Ea)M[Imm+R[Ea]](基址+偏移量)寻址4(%eax) = *(4+eax)(Ea,Eb)M[R[Ea]+R[Eb]]变址(%eax,%ebx) = *(eax+ebx)Imm(Ea,Eb)M[Imm+R[Ea]+R[Eb]]寻址9(%eax,%ebx)= *(9+eax+ebx)(,Ea,s)M[R[Ea]*s]伸缩化变址寻址(,%eax,4)= *(eax*4)Imm(,Ea,s)M[Imm+R[Ea]*s]伸缩化变址寻址0xfc(,%eax,4)= *(0xfc+eax*4)(Ea,Eb,s)M(R[Ea]+R[Eb]*s)伸缩化变址寻址(%eax,%ebx,4) = *(eax+ebx*4)Imm(Ea,Eb,s)M(Imm+R[Ea]+R[Eb]*s)伸缩化变址寻址8(%eax,%ebx,4) = *(8+eax+ebx*4)注:M[xx]表⽰在存储器中xx地址的值,R[xx]表⽰寄存器xx的值,这种表⽰⽅法将寄存器、内存都看出⼀个⼤数组的形式。

数据传送指令:指令效果描述movl S,D D <-- S传双字movw S,D D <-- S传字movb S,D D <-- S传字节movsbl S,D D <-- 符号扩展S符号位填充(字节->双字)movzbl S,D D <-- 零扩展S零填充(字节->双字)pushl S R[%esp] <-- R[%esp] – 4;压栈M[R[%esp]] <-- Spopl D D <-- M[R[%esp]];出栈R[%esp] <-- R[%esp] + 4;注:均假设栈往低地址扩展。

汇编速查手册

汇编速查手册
IMUL 整数乘法.
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算).
AAM 乘法的ASCII码调整.
DIV 无符号除法.
IDIV 整数除法.
以上两条,结果回送:
商回送AL,余数回送AH, (字节运算); 或商回送AX,余数回送DX, (字运算).
8088 汇编速查手册
一、数据传输指令
二、算术运算指令
三、逻辑运算指令
四、串指令
五、程序转移指令
六、伪指令
8088 汇编速查手册
一、数据传输指令
───────────────────────────────────────
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
DS:SI 源串段寄存器 :源串变址.
ES:DI 目标串段寄存器:目标串变址.
CX 重复次数计数器.
AL/AX 扫描值.
D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
Z标志 用来控制扫描或比较操作的结束.
3. 目的地址传送指令.
LEA 装入有效地址.
例: LEA DX,string ;把偏移地址存到DX.
LDS 传送目标指针,把指针内容装入DS.
例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
SHL 逻辑左移.
SAL 算术左移.(=SHL)
SHR 逻辑右移.
SAR 算术右移.(=SHR)
ROL 循环左移.
ROR 循环右移.
RCL 通过进位的循环左移.
RCR 通过进位的循环右移.
REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.

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

(完整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):堆栈段寄存器;ES(Extra Segment):附加段寄存器。

常用汇编指令表

常用汇编指令表

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 程序结束.。

汇编指令大全

汇编指令大全

汇编指令大全汇编指令大全(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)1.1数据传送指令MOV (2)1.2程序存储器取数据指令MOVX,MOVC (3)1.3 数据交换指令XCH,XCHD,SWAP (3)1.4 逻辑运算指令ANL,ORL(按位进行) (4)续表1.4 逻辑运算指令XRL CLR CPL RL RLC RR RRC(按位进行) (5)1.5 控制转移指令LJMP AJMP SJMP JMP JZ JNZ CJNE (6)续表1.5 控制转移指令DJNZ LCALL ACALL RET RETI NOP (7)1.6 布尔处理(位操作)指令CLR SETB CPL ANL ORL (8)续表1.6 布尔处理(位操作)指令JC JNC JB JNB JBC (9)1.7堆栈操作指令PUSH POP (10)2.MCS-51系列单片机算术运算指令表ADD ADDC SUBB INC DEC MUL DIV DA (10)表1 寻址方式与相应的寻址空间1.1数据传送指令MOV方式 利用的变量 使用的空间寄存器 R0∽R7,A ,B ,CY ,DPTR直接寻址 direct片内RAM 低128字节特殊功能寄存器SFR寄存器间址 @Ro ,@R1 SP @R0,@R1,@DPTR片内RAM 片外RAM立即数 #data程序存储器 基址加变址 @A+PC @A+DPTR程序存储器 相对寻址 PC+rel程序存储器位寻址bit片内RAM 的20H ∽2FH 部分SFR目的操作数汇编指令机器码功能字节数 机器周期A 累加器 立即数送AMOV A ,#data 74H data data 传至A 2 1 内部RAM 或SFR 内容送AMOV A ,direct E5H direct(direct)传至A2 1 寄存器内容送AMOV A ,Rn (n=0∽7) E8H ∽EFH 11101rrr (Rn)传至A 1 1 内部RAM 内容送A MOV A ,@Ri (i=0,1) 1110011i((Ri))传至A 1 1 Direct内部RAM 或SFR立即数送内部RAM 或SFR MOV direct ,#data 75H direct data data 传至direct 3 2 内部RAM 和SFR 直接直接传送 MOV direct ,direct 85H direct direct (direct)传至direct 3 2 累加器内容送内部RAM 或SFR MOV direct ,AF5H direct(A)传至direct 2 1 寄存器内容送内部RAM 或SFR MOV direct ,Rn (n=0∽7) 10001rrr direct (Rn)传至direct 2 2 内部RAM 内容送内部RAM 或SFRMOV direct ,@Ri (i=0,1) 1000011i direct ((Ri))传至direct 2 2 Rn 寄存器立即数送寄存器 MOV Rn,#data (n=0∽7) 01111rrr data data 传至Rn 2 1 内部RAM 或SFR 内容送寄存器MOV Rn,direct (n=0∽7) 10101rrr direct (direct)传至Rn 2 2 累加器内容送寄存器MOV Rn,A (n=0∽7) 11111rrr (A)传至Rn 1 2 @Ri 内部RAM立即数送内部RAMMOV @Ri,#data (i=0,1) 0111011i data data 传至(Ri) 2 1 内部RAM 或SFR 内容送内部RAMMOV @Ri,direct (i=0,1) 1010011i direct (direct)传至(Ri) 2 2 累加器内容送内部RAM MOV @Ri,A (i=0,1) 1111011i(A)传至(Ri) 1 1 DPTR 16位立即数传送指令MOV DPTR,#data1690H dataH dataLdata16传至DPTR321.2程序存储器取数据指令MOVX ,MOVC1.3 数据交换指令XCH ,XCHD ,SWAP目的操作数汇编指令机器码功能字节数 机器周期A 外部数据存储器内容送A MOVX A ,@Ri (i=0,1) E2H E3H ((Ri))传至A 1 2 A 外部数据存储器内容送A MOVX A ,@DPTR E0H ((DPTR))传至A 1 2 @Ri 累加器内容送外部数据存储器 MOVX @Ri,A (i=0,1) F2H ,F3H A 传至(Ri) 1 2 DPTR 累加器内容送外部数据存储器 MOVX @DPTR,A F0H A 传至(DPTR) 1 2 A 以PC 为基址寄存器加变址寻址 MOVC A,@A+PC 83H ((A)+(PC))传至A 1 2 A以DPTR 为基址寄存器加变址寻址MOVC A,@A+DPTR93H((A)+(DPTR))传至A12目的操作数指令机器码 功能字节数 机器周期 A 内部RAM 或SFR 内容与累加器内容互换 XCH A,directC5H direct (A)←(direct) 2 1 A 寄存器内容与累加器内容互换 XCH A,Rn (n=1-7) 11001rrr (A)←(Rn) 1 1 A 内部RAM 内容与累加器内容互换XCH A,@Ri (i=0,1) 1100011i (A)←((Ri))1 1 A 内部RAM 低4位内容与累加器低4位内容互换XCHD A,@Ri (i=0,1) 1101011i (A)0∽3←((Ri))0∽3 1 1 A累加器高4位与低4位交换SWAP AC4H(A)0∽3←(A)4∽7111.4 逻辑运算指令ANL,ORL(按位进行)目的操作数指令机器码功能字节数机器周期逻辑与ANLA内容∧立即数ANL A ,#data54H A←(A)∧#data 2 1 A内容∧内部RAM或SFR当direct为端口地址P0∽P3时,操作数由端口锁存器读入。

8086汇编语言指令表(按字母顺序)

8086汇编语言指令表(按字母顺序)
(2) 若(AL) and 0F0H>90H 或 CF=1,则(AL)<--(AL)+60H,CF<--1.
2. 示例: (AL)=18H,(BL)=06H
ADD AL,BL ; (AL)<--(AL)+(BL) ; (AL)=1EH
DAA ; (AL)
DAS
组合十进制减法调整指令 DAS(Decimal Adjust for Subtraction)
则(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
DAA
组合的十进制加法调整指令 DAA(Decimal Adjust for Addition)
格式: DAA
功能: 对AL中的两个组合进制数相加的结果进行调整,调整结果仍放在AL中,进位标志放在CF中.
说明:
1. 调整操作如下
(1) 若(AL) and 0FH>9 或 AF=1,则(AL)<--(AL)+6,AF<--1,对低四位的调整.
格式: DAS
功能: 对两个组合十进制数相减后存于AL中的结果进行调整,调整后产生一个组合的十进制数且仍存于AL中.
说明:
调整操作
若(AL) and 0FH > 9 或 AF=1,则(AL)<--(AL)-6,AF=1
若(AL) and 0F0H > 90H 或 CF=1,则(AL)<--(AL)-60,CF=1

汇编语言命令大全

汇编语言命令大全

1 汇编语言命令大全汇编命令大全<---->MOV(MOVe)传送指令P28 PUSH 入栈指令P32POP 出栈指令P33XCHG(eXCHanG)交换指令P34XLAT(TRANSLATE)换码指令P34LEA (Load Effective Address)有效地址送寄存器指令P35 LDS(Load DS with pointer)指针送寄存器和DS指令P35 LES(Load ES with pointer)指针送寄存器和ES指令P35 LAHF(Load AH with Flags)标志位送AH指令P36 SAHF(Store AH into Flgs)AH送标志寄存器指令P36 PUSHF(PUSH the Flags)标志进栈指令P36POPF(POP the Flags)标志出栈指令P37ADD 加法指令P38ADC 带进位加法指令P39INC 加1指令P39SUB(SUBtract)不带借位的减法指令P40SBB(SuVtrach with borrow)带借位的减法指令P40DEC(DECrement)减1指领P41NEG(NEGate)求补指令P41CMP(CoMPare)比较指令P42MUL(unsinged MULtiple)无符号数乘法指令P46IMUL(sIgned MUL tiple)有符号数乘法指令P46DIV(unsigned DIVide)无符号数除法指令P48IDIV(sIgned DIVide)有符号数除法指令P48CBW(Count Byte to Word)字节转换为字指令P50CWD(Count Word to Doble word)字转换为双字指令P50 DAA 压缩的BCD码加法十进制调整指令P53DAS 压缩的BCD码减法十进制调整指令P53AAA 非压缩的BCD码加法十进制调整指令P54AAS 非压缩的BCD码加法十进制调整指令P54AND 逻辑与指令P54OR 逻辑或指令P55XOR 逻辑异或指令P56NOT 逻辑非指令P56TEST 测试指令P57SHL(SHift logical Letf)逻辑左移指令P57SHR(SHift logical Right)逻辑右移指令P57ROL(Rotate Left )循环左移指令P58ROR(Rotate Right)循环右移指令P58RCL(Rotate Left through Carry)带进位循环左移P58 RCR(Rotate Right through Carry)带进位循环左移P58 MOVS(MOVe String)串传送指令P58STOS(STOre into String)存入串指令P60LODS(LOad from string)从串取指令P60REP(REPeat)重复操作前缀P61CLD(CLear Direction flag)清除方向标志指令P61STD(SeT Direction flag)设置方向标志指令P61CMPS(CoMPare String)串比较指令P62SCAS(SCAn String)串扫描指令P63REPE/REPZ(REPeat while Equal/Zero)相等/为零时重复操作前缀P63REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重复前缀IN(INput)输入指令P65OUT(OUTput)输出指令P65JMP(JuMP)无条件转移指令P66JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 条件转移指令P67LOOP 循环指令P70LOOPZ/LOOPE 为零/相等时循环指令P70LOOPNZ/LOOPNE 不为零/不相等时循环指令P70CALL 子程序调用指令P71RET(RETun)子程序返回指令P72CLC(CLear Carry)进位位置0指令P77CMC(CoMplement Carry)进位位求反指令P77SRC(SeT Carry)进位位置1指令P77NOP(No OPeretion)无操作指令P77HLT(HaLT)停机指令P77OFFSET 返回偏移地址P85SEG 返回段地址P85EQU(=) 等值语句P90PURGE 解除语句P91DUP 操作数字段用复制操作符P93SEGMENT,ENDS 段定义指令P95ASSUME 段地址分配指令P95ORG 起始偏移地址设置指令P96$ 地址计数器的当前值P97PROC,ENDP 过程定义语句P97NAME,TITLE,END 程序开始结束语句P98MACRO,ENDM 宏定义指令P99---------------------------------------------------------------------------------- 作者:wutoyou-- 发布时间:2004-2-3 14:42:45--段内直接短跳转JMP SHORT OPR段内直接近转移JMP NEAR PTR OPR段内间接转移JMP WORD PTR OPR 段间直接转移JMP FAR PTR OPR段间间接转移JMP DWORD PTR OPRJZ OPR //结果为零转移JNZ OPR //结果不为零转移JS OPR //结果为负转移JNS OPR //结果为正转移JO OPR //溢出转移JNO OPR //不溢出转移JP OPR //结果为偶转移JNP OPR //结果为奇转移JC OPR //有进位转移JNC OPR //无进位转移。

常用基本汇编指令汇总(L~X)

常用基本汇编指令汇总(L~X)

常用基本汇编指令汇总(L~X)常用基本汇编指令汇总(L~X)本汇总主要供个人学习使用,如果大家觉得方便自己学习尽可以拿去用,为了查阅方便,本表格按照字母顺序排序,若有错误之处希望大家予以指出!谢谢!说明:SRC和DST分别表示源操作数和目的操作数,ACC表示AL/AX/EAX寄存器,PORT表示I/O端口,TEMP表示临时存储单元。

REG、MEM和IMM分别表示寄存器、存储器和立即数指令格式作用说明对应处理器LAHF (AH)←(FLAGS低字节) 8086/8088 LDS REG,SRC (REG)←(SRC),(DS)←(SRC+2或4) 8086/8088 LEA REG,SRC (REG)←SRC8086/8088 LES REG,SRC (REG)←(SRC),(ES)←(SRC+2或4) 8086/8088 LFS REG,SRC (REG)←(SRC),(FS)←(SRC+2或4) PentiumLGS REG,SRC (REG)←(SRC),(GS)←(SRC+2或4) PentiumLOCK 封锁指令,可作为其他指令的前缀联合使用,以保持总线的封锁信号8086/8088LODS 将DS:SI/ESI指向的数据串元素取到ACC中(允许带位标识后缀)8086/8088LOOP DST (CX/ECX)-1≠0,则循环8086/8088 LOOPNZ/LOOPNEDST(CX/ECX)-1≠0且ZF=0,则循环8086/8088 LOOPZ/LOOPE DST (CX/ECX)-1≠0且ZF=1,则循环8086/8088 LSS REG,SRC (REG)←(SRC),(SS)←(SRC+2或4) Pentium MOV DST,SRC (DST)←(SRC)8086/8088MOVS DS:SI/ESI指向的数据串传送到ES:DI/EDI指向的内存区(允许带位标识后缀)8086/8088MOVSX DST,SRC (DST)←符号扩展(SRC) 80386 MOVZX DST,SRC (DST)←零扩展(SRC) 80386MUL SRC (AX)或(DX,AX)或(EDX,EAX)←(ACC)*(SRC),无符号8086/8088NEG DST (DST)←0-(DST),取操作的补码8086/8088 NOP 空操作,使指令指针加1 8086/8088 NOT DST (DST)←(DST)取反8086/8088 OR DST,SRC (DST)←(DST)∪(SRC)8086/8088OUT PORT,ACC (PORT)←(ACC)8086/8088OUTS 将DS:SI/ESI指向的数据串传送到DX指示的端口中去(允许带位标识后缀)80286POP DST (DST)←(SP或ESP),(SP或ESP)←(SP或ESP)+2或48086/8088POPA/POPAD 8个16/32位通用寄存器数据依次出栈80286 POPF FLAGS出栈8086/8088 POPFD FLAGS出栈80386PUSH SRC (SP或ESP)←(SP或ESP)-2或4,(SP或ESP)←(SRC)8086/8088PUSHA/PUSHAD 8个16/32位通用寄存器数据依次进栈80286 PUSHF FLAGS进栈8086/8088 PUSHFD FLAGS进栈80386RCL DST,SRC 带进位循环左移,CF作为操作数的扩展,一起参加循环移位8086/8088RCR DST,SRC 带进位循环右移,CF作为操作数的扩展,一起参加循环移位8086/8088REP (CX/ECX)≠0,重复执行后续串指令,CX/ECX的数据减18086/8088REPE/REPZ (CX/ECX)≠0且ZF=1,重复执行后续串指令,CX/ECX的数据减18086/8088REPNE/REPNZ (CX/ECX)≠0且ZF=0,重复执行后续串指令,CX/ECX的数据减18086/8088RET n 子程序返回主程序,(SP/ESP)←(SP/ESP)+n8086/8088ROL DST,SRC 循环左移,移出的位送到操作数的另一端,CF不参加循环移位8086/8088ROR DST,SRC 循环右移,移出的位送到操作数的另一端,CF不参加循环移位8086/8088SAHF (FLAGS低字节)←(AH)8086/8088SAL DST,SRC 算术左移,操作与SHL相同,但符号为发生变化时,OF置18086/8088SAR DST,SRC 算术右移,操作与SHR类似,但每次移位通过复制保持符号位不变8086/8088SBB DST,SRC (DST)←(DST)-(SRC)-CF 8086/8088SCAS 用ACC中的关键字扫描ES:DI/EDI指向的目标串,若相同,则ZF=1(允许带位标识后缀)8086/8088SETcc DST 测试指定的标志位所处的状态,根据测试结果将指定的一个8位寄存器或存储单元置0或置18086/8088SHL DST,SRC 逻辑左移,SRC决定移位的次数,最高位进入标志位CF,最低位补08086/8088SHLDDST,REG,SRC双精度左移80286SHR DST,SRC 逻辑右移,操作与SHL类似,不同的只是移位方向相反8086/8088SHRDDST,REG,SRC双精度右移80286 STC 进位标志置1 8086/8088 STD 方向标志置1 8086/8088 STI 中断允许标志置1 8086/8088STOS 将ACC中的内容存入ES:DI/EDI指向的内存单元中(允许带位标识后缀)8086/8088SUB DST,SRC (DST)←(DST)-(SRC) 8086/8088 TEST (DST)∩(SRC)8086/8088WAIT 是处理器处于空转状态,定期检查TEST信号是否为高电平8086/8088XADD DST,SRC TEMP←(DST)+(SRC),(SRC)←(DST),(DST)←TEMP80486XCHG DST,SRC (DST)←→(SRC)8086/8088 XLAT tran_tab (AL)←((BX或EBX)+(AL)) 8086/8088 XOR (DST)←(DST)?(SRC)。

汇编指令一览表!!!

汇编指令一览表!!!

一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换.MOV指令格式为: MOV DST,SRC执行的操作:(DST)<-(SRC).PUSH进栈指令格式为:PUSH SRC执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(SRC).POP出栈指令格式为:POP DST执行的操作:(DST)<-((SP+1),(SP))(SP)<-(SP)+2.XCHG 交换指令格式为:XCHG OPR1,OPR2执行的操作:(OPR1)<-->(OPR2)2.累加器专用传送指令IN(Input) 输入OUT(Output) 输出XLAT(Translate) 换码这组指令只限于使用累加器AX或AL传送信息. .IN 输入指令长格式为: IN AL,PORT(字节)IN AX,PORT(字)执行的操作: (AL)<-(PORT)(字节)(AX)<-(PORT+1,PORT)(字)短格式为: IN AL,DX(字节)IN AX,DX(字)执行的操作: AL<-((DX))(字节)AX<-((DX)+1,DX)(字).OUT 输出指令长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)<-(AL)(字节)(PORT+1,PORT)<-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))<-(AL)(字节)((DX)+1,(DX))<-AX(字)在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用 IN或OUT指令来传送信息..XLAT 换码指令格式为: XLAT OPR或: XLAT执行的操作:(AL)<-((BX)+(AL))3.有效地址送寄存器指令LEA(Load effective address)有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DSLES(Load ES with Pointer)指针送寄存器和ES.LEA 有效地址送寄存器格式为: LEA REG,SRC执行的操作:(REG)<-SRC指令把源操作数的有效地址送到指定的寄存器中..LDS 指针送寄存器和DS指令格式为: LDS REG,SRC执行的操作:(REG)<-(SRC)(DS)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器..LES 指针送寄存器和ES指令格式为: LES REG,SRC执行的操作: (REG)<-(SRC)(ES)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器.4.标志寄存器传送指令LAHF(Load AH with flags)标志送AHSAHF(store AH into flags)AH送标志寄存器PUSHF(push the flags) 标志进栈POPF(pop the flags) 标志出栈.LAHF 标志送AH格式为: LAHF执行的操作:(AH)<-(PWS的低字节).SAHF AH送标志寄存器格式为: SAHF执行的操作:(PWS的低字节)<-(AH).PUSHF 标志进栈格式为: PUSHF执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW) .POPF 标志出栈格式为: POPF执行的操作:(PWS)<-((SP)+1,(SP))(SP)<-(SP+2)二、算术指令1.加法指令ADD(add)加法ADC(add with carry)带进位加法INC(increment)加1.ADD 加法指令格式: ADD DST,SRC执行的操作:(DST)<-(SRC)+(DST).ADC 带进位加法指令格式: ADC DST,SRC执行的操作:(DST)<-(SRC)+(DST)+CF .ADD 加1指令格式: INC OPR执行的操作:(OPR)<-(OPR)+12.减法指令SUB(subtract)减法SBB(subtract with borrow)带借位减法DEC(Decrement)减1NEG(Negate)求补CMP(Compare)比较.SUB 减法指令格式: SUB DST,SRC执行的操作:(DST)<-(DST)-(SRC).SBB 带借位减法指令格式: SBB DST,SRC执行的操作:(DST)<-(DST)-(SRC)-CF .DEC 减1指令格式: DEC OPR执行的操作:(OPR)<-(OPR)-1.NEG 求补指令格式: NEG OPR执行的操作:(OPR)<- -(OPR).CMP 比较指令格式: CMP OPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球.3.乘法指令MUL(Unsigned Multiple)无符号数乘法IMUL(Signed Multiple)带符号数乘法.MUL 无符号数乘法指令格式: MUL SRC执行的操作:字节操作数:(AX)<-(AL)*(SRC)字操作数:(DX,AX)<-(AX)*(SRC).IMUL 带符号数乘法指令格式: IMUL SRC执行的操作:与MUL相同,但必须是带符号数,而MUL是无符号数.4.除法指令DIV(Unsigned divide)无符号数除法IDIV(Signed divide)带符号数除法CBW(Convert byte to word)字节转换为字CWD(Contert word to double word)字转换为双字.DIV 无符号数除法指令格式: DIV SRC执行的操作:字节操作:(AL)<-(AX)/(SRC)的商(AH)<-(AX)/(SRC)的余数字操作: (AX)<-(DX,AX)/(SRC)的商(AX)<-(DX,AX)/(SRC)的余数.IDIV 带符号数除法指令格式: DIV SRC执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同..CBW 字节转换为字指令格式: CBW执行的操作:AL的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH.CWD 字转换为双字指令格式: CWD执行的操作:AX的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.三、逻辑指令1.逻辑运算指令AND(and) 逻辑与OR(or) 逻辑或NOT(not) 逻辑非XOR(exclusive or)异或TEST(test) 测试.AND 逻辑与指令格式: AND DST,SRC执行的操作:(DST)<-(DST)^(SRC).OR 逻辑或指令格式: OR DST,SRC执行的操作:(DST)<-(DST)V(SRC).NOT 逻辑非指令格式: NOT OPR执行的操作:(OPR)<-(OPR).XOR 异或指令格式: XOR DST,SRC执行的操作:(DST)<-(DST)V(SRC).TEST 测试指令格式: TEST OPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码2.移位指令SHL(shift logical left) 逻辑左移SAL(shift arithmetic left) 算术左移SHR(shift logical right) 逻辑右移SAR(shift arithmetic right) 算术右移ROL(Rotate left) 循环左移ROR(Rotate right) 循环右移RCL(Rotate left through carry) 带进位循环左移RCR(Rotate right through carry) 带进位循环右移格式: SHL OPR,CNT(其余的类似)其中OPR可以是除立即数以外的任何寻址方式.移位次数由CNT决定,CNT可以是1或CL.循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用来无符号数运算,SHL用来乘2,SHR用来除以2.四、串处理指令1.与REP相配合工作的MOVS,STOS和LODS指令.REP重复串操作直到(CX)=0为上格式: REP string primitive其中String Primitive可为MOVS,LODS或STOS指令执行的操作:1)如(CX)=0则退出REP,否则往下执行.2)(CX)<-(CX)-13)执行其中的串操作4)重复1)~3).MOVS串传送指令格式:可有三种MOVS DST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVS ES:BYTE PTR[DI],DS:[SI]执行的操作:1)((DI))<-((SI))2)字节操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1当方向标志DF=0时用+,当方向标志DF=1时用-3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2当方向标志DF=0时用+,当方向标志DF=1时用-该指令不影响条件码..CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;.STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量..STOS 存入串指令格式: STOS DSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))<-(AL),(DI)<-(DI)+-1字操作: ((DI))<-(AX),(DI)<-(DI)+-2该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中..LODS 从串取指令格式: LODS SRCLODSBLODSW执行的操作:字节操作:(AL)<-((SI)),(SI)<-(SI)+-1字操作: (AX)<-((SI)),(SI)<-(SI)+-2该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.2.与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令.REPE/REPZ 当相等/为零时重复串操作格式: REPE(或REPZ) String Primitive其中String Primitive可为CMPS或SCAS指令.执行的操作:1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)<-(CX)-13)执行其后的串指令4)重复1)~3).REPNE/REPNZ 当不相等/不为零时重复串操作格式: REPNE(或REPNZ) String Primitive其中String Primitive可为CMPS或SCAS指令执行的操作:除退出条件(CX=0)或ZF=1外,其他操作与REPE完全相同..CMPS 串比较指令格式: CMP SRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同..SCAS 串扫描指令格式: SCAS DSTSCASBSCASW执行的操作:字节操作:(AL)-((DI)),(DI)<-(DI)+-1字操作: (AL)-((DI)),(DI)<-(DI)+-2该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS的规定相同.五、控制转移指令1.无条件转移指令.JMP(jmp) 跳转指令1)段内直接短转移格式:JMP SHORT OPR执行的操作:(IP)<-(IP)+8位位移量2)段内直接近转移格式:JMP NEAR PTR OPR执行的操作:(IP)<-(IP)+16位位移量3)段内间接转移格式:JMP WORD PTR OPR执行的操作:(IP)<-(EA)4)段间直接(远)转移格式:JMP FAR PTR OPR执行的操作:(IP)<-OPR的段内偏移地址(CS)<-OPR所在段的段地址5)段间间接转移格式:JMP DWORD PTR OPR执行的操作:(IP)<-(EA)(CS)<-(EA+2)2.条件转移指令1)根据单个条件标志的设置情况转移.JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移格式:JE(或JZ) OPR测试条件:ZF=1.JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移格式:JNZ(或JNE) OPR测试条件:ZF=0.JS(Jump if sign) 结果为负则转移格式: JS OPR测试条件:SF=1.JNS(Jump if not sign) 结果为正则转移格式:JNS OPR测试条件:SF=0.JO(Jump if overflow) 溢出则转移格式: JO OPR测试条件:OF=1.JNO(Jump if not overflow) 不溢出则转移格式: JNO OPR测试条件:OF=0.JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移格式: JP OPR测试条件:PF=1.JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移格式: JNP(或JPO) OPR测试条件:PF=0.JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移格式:JB(或JNAE,JC) OPR测试条件:CF=1.JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移格式:JNB(或JAE,JNC) OPR测试条件:CF=02)比较两个无符号数,并根据比较的结果转移.JB(或JNAE,JC)格式:同上.JNB(或JAE,JNC)格式:同上.JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移格式:JBE(或JNA) OPR测试条件:CFVZF=1.JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移格式:JNBE(或JA) OPR测试条件:CFVZF=03)比较两个带符号数,并根据比较的结果转移.JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移格式:JL(或JNGE) OPR测试条件:SFVOF=1.JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移格式:JNL(或JGE) OPR测试条件:SFVOF=0.JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移格式:JLE(或JNG) OPR测试条件:(SFVOF)VZF=1.JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移格式:JNLE(或JG) OPR测试条件:(SFVOF)VZF=04)测试CX的值为0则转移指令.JCXZ(Jump if CX register is zero) CX寄存器的内容为零则转移格式:JCXZ OPR测试条件:(CX)=0注:条件转移全为8位短跳!3.循环指令.LOOP 循环指令格式: LOOP OPR测试条件:(CX)<>0.LOOPZ/LOOPE 当为零或相等时循环指令格式: LOOPZ(或LOOPE) OPR测试条件:(CX)<>0且ZF=1.LOOPNZ/LOOPNE 当不为零或不相等时循环指令格式: LOOPNZ(或LOOPNE) OPR测试条件:(CX)<>0且ZF=0这三条指令的步骤是:1)(CX)<-(CX)-12)检查是否满足测试条件,如满足则(IP)<-(IP)+D8的符号扩充.4.子程序.CALL调用指令.RET返回指令5.中断.INT指令格式: INT TYPE或 INT执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(TYPE*4)(CS)<-(TYPE*4+2).INTO 若溢出则中断执行的操作:若OF=1则:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(10H)(CS)<-(12H).IRET 从中断返回指令格式: IRET执行的操作:(IP)<-((SP)+1,(SP))(SP)<-(SP)+2(CS)<-((SP)+1,(SP))(SP)<-(SP)+2(PSW)<-((SP)+1,(SP))(SP)<-(SP)+2六、处理机控制指令1.标志处理指令.CLC进位位置0指令(Clear carry)CF<-0.CMC进位位求反指令(Complement carry)CF<-CF.STC进位位置1指令(Set carry)CF<-1.CLD方向标志置0指令(Clear direction)DF<-0.STD方向标志置1指令(Set direction)DF<-1.CLI中断标志置0指令(Clear interrupt)IF<-0.STI中断标志置1指令(Set interrupt)IF<-02.其他处理机控制指令NOP(No Opreation) 无操作HLT(Halt) 停机WAIT(Wait) 等待ESC(Escape) 换码LOCK(Lock) 封锁这些指令可以控制处理机状态.这们都不影响条件码..NOP 无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代..HLT停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序..WAIT等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT指令继续德行..ESC换码指令格式ESC mem其中mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去.当然ESC指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件..LOCK封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU与其他处理机协同工作时,该指令可避免破坏有用信息.。

汇编常用指令速查手册

汇编常用指令速查手册

汇编常用指令速查手册一、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。

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;把偏移地址存到DXLDS传送目标指针,把指针内容装入DS。

例:LDS SI,string;把段地址:偏移地址存到DS:SI LES传送目标指针,把指针内容装入ES。

例:LES DI,string;把段地址:偏移地址存到ES:DI LFS传送目标指针,把指针内容装入FS。

例:LFS DI,string;把段地址:偏移地址存到FS:DILGS传送目标指针,把指针内容装入GS。

6502汇编指令速查表

6502汇编指令速查表

语法 BRK JMP oper JMP (oper) JSR oper RTI RTS CLC CLD CLI CLV SEC SED SEI CMP #oper CMP oper CMP oper,X CMP oper CMP oper,X CMP oper,Y CMP (oper,X) CMP (oper),Y CPX #oper CPX oper CPX oper CPY #oper CPY oper
字节数 2 2 2 3 3 3 2 2 2 2 2 3 3 3 2 2 2 2 2 3 3 3 2 2 2 3
周期数 2 3 4 4 4* 4* 6 5* 2 3 4 4 4* 4* 6 5* 2 3 4 4 4* 4* 6 5* 3 4
位测试。A∧M,M7→N,M6→V。 位 6 和位 7 被传送到状态寄存器, M7 如果 A∧M 的 结果是零则 Z=1,否则 Z=0
代码 69 65 75 6D 7D 79 61 71 E6 F6 EE FE E8 C8 E9 E5 F5 ED FD F9 E1 F1 C6 D6 CE DE CA 88
寻址方式 立即型 零页 零页 X 变址型 绝对型 绝对 X 变址型 绝对 Y 变址型 变址间接型 间接变址型 零页 零页 X 变址型 绝对型 绝对 X 变址型 隐含型 隐含型 立即型 零页 零页 X 变址型 绝对型 绝对 X 变址型 绝对 Y 变址型 变址间接型 间接变址型 零页 零页 X 变址型 绝对型 绝对 X 变址型 隐含型 隐含型
语法 ADC #oper ADC oper ADC oper,X ADC oper ADC oper,X ADC oper,Y ADC (oper,X) ADC (oper),Y INC oper INC oper,X INC oper INC oper,X INX INY SBC #oper SBC oper SBC oper,X SBC oper SBC oper,X SBC oper,Y SBC (oper,X) SBC (oper),Y DEC oper DEC oper,X DEC oper DEC oper,X DEX DEY

8086 汇编速查手册 (超详细)

8086 汇编速查手册 (超详细)
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位标志出栈.
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
ESC 转换到外处理器.
LOCK 封锁总线.
NOP 空操作.
STC 置进位标志位.
CLC 清进位标志位.
JC 有进位时转移.
JNC 无进位时转移.
JNO 不溢出时转移.
JNP/JPO 奇偶性为奇数时转移.
JNS 符号位为 "0" 时转移.
JO 溢出转移.
JP/JPE 奇偶性为偶数时转移.
8088 汇编速查手册
一、数据传输指令
二、算术运算指令
三、逻辑运算指令
四、串指令
五、程序转移指令
六、伪指令
8088 汇编速查手册
一、数据传输指令
───────────────────────────────────────
LES 传送目标指针,把指针内容装入ES.
例: LES DI,string ;把段地址:偏移地址存到ES:DI.
LFS 传送目标指针,把指针内容装入FS.
例: LFS DI,string ;把段地址:偏移地址存到FS:DI.

单片机汇编语言指令查表

单片机汇编语言指令查表

1.片内ram 数据传送指令表2.程序调用及返回指令表 类型 指令机器码 功能字节数 机器周期 长调用 Lcall addr16 12H addr16 (PC )+3传至PC ;(SP)+1传至SP ;PC 7~0传至(SP ) 32 绝对调用 Acall addr11 Addr 10~810001,addr 7~0(SP)+1传至SP,PC 15~8传至(SP);addr 15~0传至PC 2 2 子程序返回 ret 22H (PC )+2传至PC;SP)+1传至SP,PC 7~0传至(SP )1 2 中断返回reti32H(SP)+1传至SP,PC 15~8传至(SP);addr 10~0传至PC.(SP)传至PC 15~8,SP -1传至SP. (SP)传至PC 7~0,SP -1传至SP. (SP)传至PC 15~8,SP -1传至SP. (SP)传至PC 7~0,SP -1传至SP.1 23.无条件转移指令表 类型 指令 操作码 功能 字节数 机器周期 长转移 Ljmp addr16 02H addr16 Addr 15~03 2 绝对转移Ajmp addr11 Addr 10~80000(PC)+2传至PC;addr 10~0传至2 2目的操作数 汇编指令机器码功能机器周期 字节数 A mov A ,#data 74H data data 传至A 1 2 A mov A ,direct E5H direct (direct)传至A 1 2 A mov A ,Rn 11101rrr (Rn)传至A 1 1 Amov A ,@Ri1110011i((Ri))传至A 1 1 direct mov direct ,#data 75H direct data data 传至direct 2 3 direct mov direct ,direct 85H direct direct (direct)传至direct2 3 direct mov direct ,A F5H direct(A)传至direct 1 2 direct mov direct ,Rn 10001rrr direct (Rn)传至direct 2 2 direct mov direct ,@Ri 1000011i direct ((Ri))传至direct 2 2 Rn mov Rn,#data 01111rrr data data 传至Rn 1 2 Rn mov Rn,direct 10101rrr direct (direct)传至Rn 2 2 Rn mov Rn,A11111rrr(A)传至Rn 2 1 @Ri mov @Ri,#data 0111011i data data 传至(Ri) 1 2 @Ri mov @Ri,direct 1010011i direct (direct)传至(Ri) 2 2 @Ri mov @Ri,A1111011i(A)传至(Ri)1 1 dptrmov dptr,#data1690H dataH dataLdata16传至dptr231,addr7~0PC;PC15~11不变相对转移Sjmp rel 80H rel (PC)+2+rel传至PC 2 2 间接转移jmp@A+dptr 73H (A)+(dptr)传至PC 1 24.条件转移指令类型汇编指令操作码功能字节数机器周期A为零转移Jz rel 60H rel (PC)+2传至PC;(A)=0,则(PC)+rel传至PC2 2A非零转移Jnz rel 70H rel (PC)+2传至PC;(A)≠0,则(PC)+rel传至PC2 2比较转移CjneA,#data,relB4H data rel (A)≠data,转移 3 2CjneA,direct,rel B5H directrel(A)≠direct,转移 3 2CjneRn,#data,rel 10111rrrdata rel(Rn)≠data,转移 3 2Cjne@Ri,#data,re l 1011011idata rel((Ri))≠data,转移 3 2减1不为零转移Djnz Rn,rel 11011rrr rel (Rn)-1≠0,转移 2 2 Djnzdirect,relD5H directrel(direct)-1≠0,转移 3 25.位操作指令类型汇编指令机器码功能字节数机器周期位传送Mov C,bit A2H bit (bit)传至C 2 1 Mov bit,C 92H bit (C)传至bit 2 1 位清零Clr C C3H 00H传至C 1 1 Clr bit C2H bit 00H传至bit 2 1 位置位Setb C D3H 01H传至C 1 1 Setb bit D2H bit 01H传至bit 2位求反Cpl C B3H /(C)传至C 1 1 Cpl bit B2H bit /(bit)传至bit 2 1 位逻辑与Anl C,bit 82H (C)^(bit)传至C 2 2 Anl C,/bit B0H bit (C)^/(bit)传至C 2 2 位逻辑或Orl C,bit 72H bit (C)v(bit)传至C 2 2 Orl C,/bit A0H bit (C)v/(bit)传至C 2 2 判位转移Jc rel 40H rel (PC)+2传至PC若Cy=1,则(PC)+rel传至PC若Cy=0,顺序执行2 2Jnc rel 50H rel (PC)+2传至PC若Cy=0,则(PC)+rel传至PC若Cy=1,顺序执行2 2Jb bit,rel 20H bit rel (PC)+3传至PC若(bit)=1,则(PC)+rel传至PC若(bit)=0,顺序执行3 2Jnb bit,rel 30H bit rel (PC)+3传至PC若(bit)=0,则(PC)+rel传至PC若(bit)=1,顺序执行3 2Jbc bit,rel 10H bit rel (PC)+3传至PC若(bit)=1,则0传至(bit),(PC)+rel传至PC若(bit)=0,顺序执行3 26.循环移位指令类型汇编指令机器码功能字节数机器周期左移Rl A 23H A0移位至A7循环 1 1 带进位左移Rlc A 33H A0移位至A7溢出位进Cy溢出进A0循环1 1 右移Rr A 03H A7移位至A0循环 1 1 带进位右移Rrc A 13H A7移位至A0溢出位进Cy溢出进A7循环1 17.程序存储器取数据指令汇编指令机器码功能字节数机器周期Movc A,@A+PC 83H ((A)+(PC))传至A 1 2 Movc A,@A+dptr 93H ((A)+(dptr))传至A 1 2 Movx A,@Ri 1110001i ((Ri))传至A 1 2 Movx A,@dptr E0H ((dptr))传至A 1 2 Movx @Ri,A 1111001i (Ri)传至A 1 2 Movx @dptr,A F0H (dptr)传至A 1 28.堆栈操作指令类型汇编指令机器码功能字节数机器周期进栈Push direct C0H direct (SP)+1传至SP(direct)传至(SP)2 2出栈Pop direct DoH direct ((SP))传至direct(SP)-1传至SP2 29.数据交换指令指令机器码功能字节数机器周期Xch A,direct C5H direct (direct)传至(A) 2 1 Xch A,Rn 11001rrr (Rn)传至(A) 1 1 Xch A,@Ri 1100011i ((Ri))传至(A) 1 1 Xchd A,@Ri 1101011i ((Ri))0~3传至(A)0~3 1 1 Swap A C4H (A)4~7传至(A)0~3 1 110.MCS-51系列单片机算术运算指令表类型汇编指令机器码功能字节数机器周期不带进位加法指令Add A,#data 24H data (A)+data传至A 2 1 Add A,direct 25H data (A)+(direct)传至A 2 1 Add A,Rn 00101rrr (A)+Rn)传至A 1 1 Add A,@Ri 0010011i (A)+((Ri))传至A 1 1带进位加法指令Addc A,#data 34H data (A)+data+Cy传至A 2 1 AddcA.direct35H direct (A)+data+Cy传至A 2 1Addc A,Rn 00111rrr (A)+(Rn)+Cy传至A 1 1 Addc A,@Ri 0011011i (A)+((Ri))+Cy传至A 1 1减法指令Subb A,#data 94H data (A)-data-Cy传至A 2 2 SubbA,direct95H direct (A)-(direct)-Cy传至A 2 1 Subb A,Rn 10011rrr (A)-(Rn)-Cy传至A 1 1Subb A,@Ri 1001011i (A)-((Ri))-Cy传至A 1 1 加1指令Inc A 04H (A)+1传至A 1 1 Inc direct 05H direct (direct)+1传至A 2 1Inc Rn 00001H (Rn)+1传至A 1 1Inc @Ri 0000011i ((Ri))+1传至A 1 1Inc dptr A3H (dptr)+1传至A 1 2 减1指令Dec A 14H (A)-1传至A 1 1 Dec direct 15H direct (direct)-1传至A 2 1Dec Rn 00011rrr (Rn)-1传至A 1 1Dec @Ri 0001011i ((Ri))-1传至A 1 1 乘法指令Mul AB A4H (A)x(B)传至A 1 4 除法指令Div AB 84H (A)除以(B)传至A(商)B(余数) 1 4 调整指令Da A D4H 对加法的结果进行十进制调整 1 1 更多。

汇编语言指令速查表

汇编语言指令速查表

汇编语言指令速查表指令集是计算机中执行指令的一组规范。

在汇编语言中,使用指令来编写具体的程序。

为了方便程序员查找和运用各种指令,制作一份汇编语言指令速查表是非常有必要的。

在本文中,我将提供一份完整的汇编语言指令速查表,帮助读者快速查找和了解汇编语言指令。

以下是一份汇编语言指令速查表,按照指令的功能进行分类。

1. 数据传送指令MOV:将数据从源操作数移动到目标操作数。

XCHG:交换两个操作数的值。

2. 运算指令ADD:将源操作数的值与目标操作数的值相加,并将结果存储到目标操作数中。

SUB:将目标操作数的值减去源操作数的值,并将结果存储到目标操作数中。

MUL:将源操作数的值与目标操作数的值相乘,并将结果存储到目标操作数中。

DIV:将目标操作数的值除以源操作数的值,并将商存储到目标操作数中。

3. 逻辑运算指令AND:对源操作数和目标操作数进行逻辑与运算,并将结果存储到目标操作数中。

OR:对源操作数和目标操作数进行逻辑或运算,并将结果存储到目标操作数中。

XOR:对源操作数和目标操作数进行逻辑异或运算,并将结果存储到目标操作数中。

NOT:对目标操作数进行逻辑非运算,并将结果存储到目标操作数中。

4. 分支指令JMP:无条件跳转到指定的地址。

JZ:如果零标志位为1,则跳转到指定的地址。

JNZ:如果零标志位为0,则跳转到指定的地址。

JE:如果相等标志位为1,则跳转到指定的地址。

JNE:如果相等标志位为0,则跳转到指定的地址。

5. 循环指令LOOP:根据计数器的值,循环执行指定的代码块。

LOPZ:如果零标志位为1,则循环执行指定的代码块。

LOPE:如果相等标志位为1,则循环执行指定的代码块。

6. 存储器访问指令MOV:将数据从寄存器移动到存储器中,或将数据从存储器移动到寄存器中。

PUSH:将数据压入堆栈。

POP:将数据从堆栈中弹出。

7. 程序调用指令CALL:调用指定地址处的子程序。

RET:从调用的子程序返回。

8. I/O指令IN:从外部设备读取数据。

汇编指令速查

汇编指令速查

指令功能指令功能Delphi 2010 VCL、JCL 源码中用到的汇AAA调整加EMMS媒体空MMX状态AAD调整除F2XM1浮点栈顶绝对值按名称排序使用次数按使用频率排序AAM调整乘FADD浮点加ADC15MOV AAS调整减FADDP浮点加出栈ADD659PUSH ADC进位加FBLD浮点加载十数AND162CMP ADD加FBSTP浮点保存十数出栈BSF8POP AND与FCHS浮点正负求反BSR7JE ARPL调整优先级FCLEX浮点检查错误清除BSWAP12CALL BOUND检查数组FCMOVB浮点低于传送BT13JMP BSF位右扫描FCMOVBE浮点不高于传送BTC9ADD BSR位左扫描FCMOVE浮点相等传送BTR10JNE BSWAP交换字节FCMOVNB浮点不低于传送BTS10TESTBT位测试FCMOVNBE浮点高于传送CALL847SUB BTC位测试求反FCMOVNE浮点不等传送CDQ6DECBTR位测试清零FCMOVNU 浮点有序传送CLD10LEABTS位测试置一FCMOVU浮点无序传送CMP1372RET CALL过程调用FCOM浮点比较CPUID3INC CBW转换字节FCOMI浮点比较加载标志CWD1JZCDQ转换双字FCOMIP浮点比较加载标志出栈DB241ORCLC进位清零FCOMP浮点比较出栈DD189DB CLD方向清零FCOMPP浮点比较出栈二DEC332DD CLI中断清零FCOS浮点余弦DIV40JNZ CLTS任务清除FDECSTP浮点栈针减一DW63MOVZX CMC进位求反FDISI浮点检查禁止中断ELSE2AND CMOVA高于传送FDIV浮点除END2FLD CMOVB低于传送FDIVP浮点除出栈F2XM16SHR CMOVE相等传送FDIVR浮点反除FABS7JB CMOVG大于传送FDIVRP浮点反除出栈FADD9JGCMOVL小于传送FENI浮点检查禁止中断二FADDP15JACMOVNA不高于传送FFREE浮点释放FBSTP3REP CMOVNB不低于传送FFREEP浮点释放出栈FCHS5JBE CMOVNE不等传送FIADD浮点加整数FCLEX5XCHG CMOVNG不大于传送FICOM浮点比较整数FCOM7JLE CMOVNL不小于传送FICOMP浮点比较整数出栈FCOMP7FSTP CMOVNO不溢出传送FIDIV浮点除整数FCOMPP3LODSB CMOVNP非奇偶传送FIDIVR浮点反除FCOS4JL CMOVNS非负传送FILD浮点加载整数FDIV11FWAIT CMOVO溢出传送FIMUL浮点乘整数FDIVP5NEG CMOVP奇偶传送FINCSTP浮点栈针加一FDIVRP11DW CMOVS负号传送FINIT浮点检查初始化FFREE13LOCK CMP比较FIST浮点保存整数FIADD6STOSB CMPSB比较字节串FISTP浮点保存整数出栈FIDIV2STOSW CMPSD比较双字串FISTTP FILD32MOVSX CMPSW比较字串FISUB浮点减整数FIMUL4FLDCWCMPXCH G 比较交换FISUBR浮点反减整数FINCSTP1FLD1CMPXCHCMPXCH G8B 比较交换8字节FLD1浮点加载一FLD154JAECPUID CPU标识FLDCW浮点加载控制器FLD152DIV CWD转换字FLDENV浮点加载环境FLDCW52JGE CWDE扩展字FLDL2E浮点加载L2E FLDL2E6REPNE DAA调整加十FLDL2T浮点加载L2T FLDLG22LODSW DAS调整减十FLDLG2浮点加载LG2FLDLN29IMUL DEC减一FLDLN2浮点加载LN2FLDZ8FMUL DIV除FLDPI浮点加载PI FMUL32FILD ENTER建立堆栈帧FLDZ浮点加载零FMULP26JNS HLT停FMUL浮点乘FNCLEX11FISTP IDIV符号整除FMULP浮点乘出栈FNINIT2FXCHIMUL符号乘法FNCLEX浮点不检查错误清除FNSTCW20FMULPIN端口输入FNDISI浮点不检查禁止中断FNSTSW6JSINC加一FNENI浮点不检查禁止中断二FPATAN15SBBINSB端口输入字节串FNINIT浮点不检查初始化FPREM3FSTSWINSD端口输入双字串FNOP浮点空FPTAN4LOOPINSW端口输入字串FNSAVE浮点不检查保存状态FRNDINT14FNSTCWJA高于跳转FNSTCW浮点不检查保存控制器FSCALE8FSTCWJB低于跳转FNSTENV浮点不检查保存环境FSIN3NOTJBE不高于跳转FNSTSW浮点不检查保存状态器FSINCOS7JECXZJCXZ计数一六零跳转FPATAN浮点部分反正切FSQRT15FYL2XJE相等跳转FPREM浮点部分余数FST5MULJECXZ计数三二零跳转FPREM1浮点部分余数二FSTCW18JNCJG大于跳转FPTAN浮点部分正切FSTP76SAHFJL小于跳转FRNDINT浮点舍入求整FSTSW22ROR JMP跳转FRSTOR浮点恢复状态FSUB11FSQRT JMPE跳转扩展FSAVE浮点检查保存状态FSUBP5FPATAN JNB不低于跳转FSCALE浮点比例运算FSUBR2FADDP JNE不等跳转FSETPM浮点设置保护FSUBRP4ADC JNG不大于跳转FSIN浮点正弦FTST4FRNDINT JNL不小于跳转FSINCOS浮点正余弦FWAIT72FFREE JNO不溢出跳转FSQRT浮点平方根FXAM1BTJNP非奇偶跳转FST浮点保存FXCH28SARJNS非负跳转FSTCW浮点检查保存控制器FXTRACT1ROLJO溢出跳转FSTENV浮点检查保存环境FYL2X17RCL JP奇偶跳转FSTP浮点保存出栈FYL2XP11JOJS负号跳转FSTSW浮点检查保存状态器HLT1BSWAPLAHF加载标志低八FSUB浮点减IMUL32REPE LAR加载访问权限FSUBP浮点减出栈INC261FSUB LDS加载数据段FSUBR浮点反减INT8FNCLEX LEA加载有效地址FSUBRP浮点反减出栈JA86FDIVRP LEAVE清除过程堆栈FTST浮点比零JAE48FDIV LES加载附加段FUCOM浮点无序比较JB101WAIT LFS加载标志段FUCOMI浮点反比加载标志JBE81CLDLGDT加载全局描述符FUCOMIP浮点反比加载标志出栈JC6BTSLGS加载全局段FUCOMP浮点无序比较出栈JE952BTR LIDT加载中断描述FUCOMPP浮点无序比较出栈JECXZ17SETCLOADALL加载所有FXAM浮点检查JGE35FADD LOADALL286加载所有286FXCH浮点交换JL72BTC LOCK锁FXTRACT浮点分解JLE79INT LODSB加载源变址字节串FYL2X浮点求L2X JMP771FSCALELODSD加载源变址双字串FYL2XP1浮点求L2XP1JNA1FLDZLODSW加载源变址字串MOVED媒体双字传送JNC16BSFLOOP计数循环MOVEQ媒体四字传送JNE503PUSHFD LOOPE相等循环PACKSSDW媒体符号双字压缩JNG2FSINCOSLOOPNE不等循环PACKSSWB媒体符号字压缩JNL1FCOMPLOOPNZ非零循环PACKUSWB媒体无符号字压缩JNS31FCOM LOOPZ为零循环PADDB媒体截断字节加JNZ167FABS LSL加载段界限PADDD媒体截断双字加JO12BSRLSS加载堆栈段PADDSB媒体符号饱和字节加JRCXZ2NOPLTR加载任务PADDSIW JS24JC MONITOR监视PADDSW媒体符号饱和字加JZ252FNSTSWMOV传送PADDUSB媒体无符号饱和字节加LEA288FLDL2EMOVSB传送字节串PADDUSW 媒体无符号饱和字加LEAVE1FIADDMOVSD传送双字串PADDW媒体截断字加LOCK61F2XM1 MOVSW传送字串PAND媒体与LODSB74CDQ MOVSX符号传送PANDN媒体与非LODSW33STOSD MOVZX零传送PAVEB LOOP20POPFD MUL乘PCMPEQB媒体字节比等MOV4053FSUBP MWAIT PCMPEQD媒体双字比等MOVSB1FSTNEG求补PCMPEQW 媒体字比等MOVSX53FDIVPNOP空PCMPGTB媒体字节比大MOVZX166FCLEX NOT非PCMPGTD媒体双字比大MUL16FCHSOR或PCMPGTW 媒体字比大NEG70SHRDOUT端口输出PDISTIB NOP6PUSHFOUTSB端口输出字节串PMACHRIWNOT17POPFOUTSD端口输出双字串PMADDWDOR248FTSTOUTSW端口输出字串PMAGW PAUSE3FSUBRPPOP出栈PMULHRIWPOP1187FPTANPOPA全部出栈PMULHRWCPOPF4FIMUL POPF标志出栈PMULHW POPFD5FCOS PUSH压栈PMVGEZB PUSH1505RCR PUSHA全部压栈PMVLZB PUSHF4PAUSE PUSHF标志压栈PMVNZB PUSHFD7FSIN RCL进位循环左移PMVZB RCL12FPREM RCR进位循环右移POR媒体或RCR3FCOMPP RDMSR读专用模式PSLLD媒体双字左移REP83FBSTPRDPMC读执行监视计数PSLLQ媒体四字左移REPE11CPUIDRDSHR PSLLW媒体字左移REPNE33STD RDTSC读时间戳计数PSRAD媒体双字算术右移RET280SETNZ REP重复PSRAW媒体字算术右移ROL12SETEREPNE不等重复PSRLQ媒体四字右移SAHF15JNG RET过程返回PSRLW媒体字右移SAL1FSUBR RETF远过程返回PSUBB媒体截断字节减SAR12FNINITRETN近过程返回PSUBSB媒体符号饱和字节减SBB22FLDLG2ROL循环左移PSUBSIW SETC9FIDIV ROR循环右移PSUBSW媒体符号饱和字减SETE2ENDRSM恢复系统管理PSUBUSB媒体无符号饱和字节减SETNC1ELSESAHF恢复标志低八PSUBUSW 媒体无符号饱和字减SETNZ2STCSAL算术左移PSUBW媒体截断字减SHL48SHLD SALC PUNPCKHBW媒体字节高位解压SHLD1SETNCSAR算术右移PUNPCKHDQ媒体双字高位解压SHR131SALSBB借位减PUNPCKHWD媒体字高位解压SHRD4MOVSBSCASB扫描字节串PUNPCKLBW媒体字节低位解压STC1LEAVESCASD扫描双字串PUNPCKLDQ媒体双字低位解压STD2JNLSCASW扫描字串PUNPCKLWD媒体字低位解压STOSB58JNA SETA高于置位STOSD5HLT SETB低于置位STOSW54FYL2XP1 SETE相等置位SUB400FXTRACT SETG大于置位TEST452FXAM SETL小于置位WAIT10FINCSTP SETNA不高于置位XCHG79CWD SETNB不低于置位SETNE不等置位SETNG不大于置位SETNL不小于置位SETNO不溢出置位SETNP非奇偶置位SETNS非负置位SETO溢出置位SETP奇偶置位SETS负号置位SGDT保存全局描述符SHL逻辑左移SHLD双精度左移SHR逻辑右移SHRD双精度右移SIDT保存中断描述符SLDT保存局部描述符SMISMINTSMINTOLD SMSW保存状态字STC进位设置STD方向设置STI中断设置STOSB保存字节串STOSW保存字串STR保存任务SUB减SYSCALL系统调用SYSENTE R 系统进入SYSEXIT系统退出SYSRET系统返回TEST数测试UD0未定义指令0 UD1未定义指令1 UD2未定义指令2 UMOVVERW校验写WAIT等WBINVD回写无效高速缓存WRMSR写专用模式WRSHRXADD交换加XBTSXCHG交换XLAT换码XOR异或XSTORE、JCL 源码中用到的汇编指令(只是粗略统计):使用次数4053150513721187952847771659503452400332288280261252248241189167166162154131101928683817979767472727063615854535252484840 35 33 33 32 32 32 31 30 28 26 242222 20 2018 17 1717 16 16 15 15 15 15 15 15 14 13 13 12 12 12 12 12 11 11 11 11 11 10 101010 998 8 88 77 7 77 7 6 6 666 6 6 5 5 5 5 5 5 5 4 444 44 44 3 3 3 3 3 3 3 2 2 22 2 2 2 221 11 1 1 1 1 11 1 1 1 1 1。

汇编指令速查

汇编指令速查
PADDW
媒体截断字加
PAND
媒体与
PANDN
媒体与非
PAVEB
PCMPEQB
媒体字节比等
PCMPEQD
媒体双字比等
PCMPEQW
媒体字比等
PCMPGTB
媒体字节比大
PCMPGTD
媒体双字比大
PCMPGTW
媒体字比大
PDISTIB
PMACHRIW
PMADDWD
PMAGW
PMULHRIW
PMULHRWC
浮点比较出栈二
FCOS
浮点余弦
FDECSTP
浮点栈针减一
FDISI
浮点检查禁止中断
FDIV
浮点除
FDIVP
浮点除出栈
FDIVR
浮点反除
FDIVRP
浮点反除出栈
FENI
浮点检查禁止中断二
FFREE
浮点释放
FFREEP
浮点释放出栈
FIADD
浮点加整数
FICOM
浮点比较整数
FICOMP
浮点比较整数出栈
FIDIV
JNB
不低于跳转
JNE
不等跳转
JNG
不大于跳转
JNL
不小于跳转
JNO
不溢出跳转
JNP
非奇偶跳转
JNS
非负跳转
JO
溢出跳转
JP
奇偶跳转
JS
负号跳转
LAHF
加载标志低八
LAR
加载访问权限
LDS
加载数据段
LEA
加载有效地址
LEAVE
清除过程堆栈
LES
加载附加段
LFS
加载标志段

8051系列单片机汇编语言指令速查表1

8051系列单片机汇编语言指令速查表1

8051系列单片机汇编语言指令速查表编号指令名称指令助记符指令说明数据传送类指令1一般传送MOV A, #data 将立即数#data送累加器A2 MOV direct, #data 将立即数#data送片内RAM direct地址单元内3 Mov Rn, #data 将立即数#data送寄存器Rn4 Mov @Ri, #data 寄存器Ri内为RAM地址,将立即数#data送该地址单元内5 Mov direct2,direct1将direct1地址单元的数据送 direct2地址单元内6 Mov direct, rn 将Rn的数据送 direct地址单元内7 Mov Rn, direct 将direct地址单元内的数据送Rn寄存器8 Mov direct, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据送direct地址单元内9 Mov @Ri, direct 寄存器Ri内为RAM地址,将direct地址单元内的数据送该地址单元内10 Mov A, Rn 将寄存器Rn内的数据送累加器A11 Mov Rn, A 将累加器A内的数据送寄存器Rn12 Mov A, direct 将direct地址单元内的数据送累加器A13 Mov direct, A 将累加器A内的数据送direct地址单元内14 Mov A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据送累加器A15 Mov @Ri , A 寄存器Ri内为RAM地址,将累加器A的数据送该地址单元内16 目的地址传送Mov DPTR, #data16 将16位立即数送数据指针DPTR寄存器17字节交换SWAP A 累加器A高低4位数据交换18 XCH A, Rn 将累加器A数据和寄存器Rn内的数据交换19 XCH A, direct 将累加器A数据和direct地址单元内的数据交换20 XCH A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据与累加器A的数据交换21 XCHD A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据低4位与的低4位交换22与外部RAM传送MOVX @DPTR, A将累加器A的数据送数据指针DPTR寄存器所指外部RAM地址单元内23 MOVX A , @DPTR 将DPTR寄存器所指外部RAM地址单元内的数据送累加器A24 MOVX A, @Ri 寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A25 MOVX @Ri, A 寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A26与ROM传送MOVC A, @A+DPTRA+DPTR构成ROM地址,将该地址内的数据送累加器A内27 MOVC A, @A+PC A+PC构成ROM地址,将该地址内的数据送累加器A内28栈操作PUSH direct堆栈指针SP自加1后,将direct地址单元的数据压进堆栈,29 POP direct 堆栈的数据送direct地址单元中,后堆栈指针减1,算术运算指令30加法指令ADD A, Rn将寄存器Rn与累加器A的数据相加后,结果保存到累加器A31 ADD A, direct 将direct地址单元内的数据与累加器A的数据相加后结果保存到累加器A32 ADD A, @Ri 寄存器Ri内位地址,将该地址单元内的数据与累加器A的数据相加后结果保存到累加器A33 ADD A, #data 将立即数与累加器A的数据相加后结果保存到累加器A34带进位加法ADDC A, Rn将寄存器Rn与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A35 ADDC A, direct 将direct地址单元内的数据与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A36 ADDC A, @Ri 寄存器Ri内为RAM地址,将该地址单元内的数据与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A37 ADDC A, #data 将立即数与累加器A的数据相加,再加上进位标志内的值后结果保存到累加器A38带借位减法SUBB A, Rn将与累加器A的数据减去寄存器Rn的数据,再减去进位标志内的值,结果保存到累加器A39 SUBB A, direct 将与累加器A的数据减去direct地址单元内的数据,再减去进位标志内的值,结果保存到累加器A40 SUBB A, @Ri 寄存器Ri内为RAM地址,将累加器A的数据减去该地址单元内的数据,再减去进位标志内的值后,结果保存到累加器A41 SUBB A, #data 将累加器A的数据减去立即数,再减去进位标志内的值后,结果保存到累加器A42加1指令INC A 累加器A的值自加143 INC Rn 寄存器Rn的值自加144 INC direct direct地址单元内值自加145 INC @Ri 寄存器Ri内为RAM地址,该地址单元内的值自加146 INC DPTR 数据指针寄存器DPTR内的值自加147减1指令DEC A 累加器A的值自减148 DEC Rn 寄存器Rn的值自减149 DEC direct direct地址单元内的值自减150 DEC @Ri 寄存器Ri内为RAM地址,该地址单元内的值自减151 乘法MUL AB 累加器A与寄存器B内的值相乘,乘积的高8位保存在B寄存器,低8位保存在累加器A中52 除法DIV AB 累加器A的值除以寄存器B的值,商保存在累加器A 中,余数保存在B寄存器53 二-十进制调整DA A 对累加器A的结果进行十进制调整逻辑运算指令54逻辑与ANL A, Rn将累加器A的值和寄存器Rn的值进行与操作,结果保存到累加器A中55 ANL A, direct 将累加器A的值和direct地址单元内的值进行与操作,结果保存到累加器A中56 ANL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行与操作,结果保存到累加器A中57 ANL A, #data 将累加器A的值和立即数进行与操作,结果保存到累加器A中58 ANL direct, A 将累加器A的值和direct地址单元内的值进行与操作,结果保存到direct地址单元内59 ANL direct, #data 将立即数和direct地址单元内的值进行与操作,结果保存到direct地址单元内60逻辑或ORL A, Rn将累加器A的值和寄存器Rn的值进行或操作,结果保存到累加器A中61 ORL A, direct 将累加器A的值和direct地址单元内的值进行或操作,结果保存到累加器A中62 ORL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行或操作,结果保存到累加器A中63 ORL A, #data 将累加器A的值和立即数进行或操作,结果保存到累加器A中64 ORL direct, A 将累加器A的值和direct地址单元内的值进行或操作,结果保存到direct地址单元内65 ORL direct, #data 将立即数和direct地址单元内的值进行或操作,结果保存到direct地址单元内66逻辑异或XRL A, Rn将累加器A的值和寄存器Rn的值进行异或操作,结果保存到累加器A中67 XRL A, direct 将累加器A的值和direct地址单元内的值进行异或操作,结果保存到累加器A中68 XRL A, @Ri 寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行异或操作,结果保存到累加器A中69 XRL A, #data 将累加器A的值和立即数进行异或操作,结果保存到累加器A中70 XRL direct, A 将累加器A的值和direct地址单元内的值进行异或操作,结果保存到direct地址单元内71 XRL direct, #data 将立即数和direct地址单元内的值进行异或操作,结果保存到direct地址单元内72 按位取反CPL A 累加器A的值按位取反73 累加器清零CLR A 累加器A清074 逻辑右移RR A 累加器A的值循环右移1位75 逻辑左移RL A 累加器A的值循环左移1位76 带进位右移RRC A 累加器A的值带进位循环右移1位77 带进位左移RLC A 累加器A的值带进位循环左移1位控制转移指令78无条件转移SJMP relrel为地址偏移量,PC加2后的地址加上rel作为目标地址,程序跳到目标地址继续运行79 AJMP addr11(a10- a0) addr11为11位地址,PC加2后的地址高5位与指令中的低11位地址构成目标地址,程序跳到目标地址继续运行80 LJMP addr16 将addr16的16位地址送程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序81 JMP @A+DPTR 目标地址的基地址放在DPTR中,目标地址对基地址的偏移量放在累加器A中,它们相加构成目标地址82条件转移JZ relIf(累加器A=0)则PC加2再加上rel作为目标地址83 JNZ rel If(累加器A!=0)则PC加2再加上rel作为目标地址84 CJNE A, direct, rel If(累加器A!= direct地址单元的值)则PC加3再加上rel作为目标地址85 CJNE A, #data, rel If(累加器A!= 立即数)则PC加3再加上rel作为目标地址86 CJNE Rn, #data, rel If(寄存器Rn的值!= 立即数)则PC加3再加上rel作为目标地址87 CJNE @Ri, #data, rel 寄存器Ri内为RAM地址,If(该地址单元的值!= 立即数)则PC加3再加上rel作为目标地址88循环转移DJNZ Rn, rel寄存器Rn的值减1后,If(寄存器Rn的值!=0)则PC加2再加上rel作为目标地址89 DJNZ direct, rel Direct地址单元的值减1后,If(该值!=0)则PC 加3再加上rel作为目标地址90布尔条件转移JC rel If(CY=1)则PC加2再加上rel作为目标地址91 JNC rel If(CY=0)则PC加2再加上rel作为目标地址92 JB bit, rel If(bit位=1)则PC加3再加上rel作为目标地址93 JNB bit, rel If(bit位=0)则PC加3再加上rel作为目标地址94 JBC bit, rel If(bit位=1)则PC加3再加上rel作为目标地址,且bit位清095调用指令ACALL addr11addr11为11位地址,PC加2后的地址PUSH进堆栈,再将PC的地址高5位与指令中的低11位地址构成目标地址,程序跳到目标地址继续运行96 LCALL addr16 PC加3后的地址PUSH进堆栈,再将16位地址送PC 作为目标地址,程序跳到目标地址继续运行97返回指令RET子程序返回指令,把堆栈中的地址恢复到PC中使程序回到调用处98 RETI 中断程序返回指令,把堆栈中的地址恢复到PC中使程序回到调用处99 空操作NOP 空操作位操作指令100布尔传送MOV C, bit 将bit位地址中的值送PSW中的进位标志位CY101 MOV bit, C 将PSW中的进位标志位CY的值送bit位地址中102 位清0 CLR C 将进位标志位CY清0103 位清0 CLR bit 将bit位地址内清0104位置1 SETB C 将进位标志位CY置1105 SETB bit 将bit位地址内置1106位与ANL C, bit 将Cy和bit位地址中的值进行与操作后,结果送Cy107 ANL C, /bit bit位地址中的值取反后再与Cy进行与操作,结构送Cy108位或ORL C, bit 将Cy和bit位地址中的值进行或操作后,结果送Cy109 ORL C, /bit bit位地址中的值取反后再与Cy进行或操作,结构送Cy110位取反CPL C 将Cy取反111 CPL bit 将bit位地址的值取反说明:Ri, Rn指当前工作寄存器,i=0,1;n = 0 – 7,当前工作寄存器由程序状态字寄存器PSW的2个位RS1, RS0决定。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

附录
附录A 常用80x86指令速查表
指令按助记符字母顺序排列,缩写、符号约定如下:
(1) 指令中,dst, src表示目的操作数和源操作数。

仅一个操作数时,个别处也表示为opr。

(2)imm表示立即数,8/16/32位立即数记作:imm8/imm16/imm32。

(3) reg表示通用寄存器,8/16/32位通用寄存器记作:reg8/reg16/reg32。

(4) mem表示内存操作数,8/16/32等内存操作数记作:mem8/mem16/mem32等。

(5) seg表示段寄存器,CS, DS, SS, ES, FS, GS。

(6) acc表示累加器,8/16/32累加器对应AL/AX/EAX。

(7)OF, SF, ZF, AF, PF, CF分别表示为O, S, Z, A, P, C,相应位置为:字母,根据结果状态设置;?,状态不确定;-,状态不变;1,置1;0,清0;例如:0 S Z ? P -表示:OF 清0,AF不确定,CF不变,其它根据结果设置。

若该栏空白,则表示无关。

(8)寄存器符号诸如(E)CX, (E)SI, (E)DI, (E)SP, (E)BP和(E)IP等,表示在16地址模式下使用16位寄存器(如CX),或在32地址模式下使用32位寄存器(如ECX)。

(9)周期数表示指令执行所需的CPU时钟周期个数,即执行时间为:周期数/主频(秒)。

(10)诸如(386+)是表示该指令只能用于80386及以后微处理器上。

附录B 编程练习环境说明
1. 编程练习软件包
附带软件包x86ASM是在Microsoft的MASM 6.15软件包的基础上,加入CodeView、Win32的开发工具及Turbo C 2.0等,进行简单整理而成的,以便初学者编程练习使用。

软件包中的基本文件有:
MASM.EXE 汇编程序
LINK.EXE 连接程序
ML.EXE 汇编连接程序(自动调用LINK.EXE)
ML.ERR 汇编错误信息文件
LIB.EXE 子程序库管理程序
LIB16.EXE 16位子程序管理程序
LINK16.EXE 生成DOS程序的连接程序
LIB32.EXE Win32的库管理程序
LINK32.EXE 生成Win32程序的连接程序
CV目录CodeView调试程序CV.EXE及相应的环境
INC32目录Win32的API的函数库声明文件
LIB32目录Win32的API的函数库
TC目录Turbo C 2.0命令行环境和集成环境
SET2ML16.BAT ML默认使用LINK16.EXE连接程序
SET2ML32.BAT ML默认使用LINK32.EXE连接程序
使用这个软件包既可以用来练习编写DOS环境下的应用程序,也可以用来练习编写Win32环境下的应用程序。

提供TC的目的是用它来练习16位环境下汇编语言程序模块和C程序模块的连接。

2. DOS系统下的编程练习环境
真正的DOS是运行在实模式下的一个操作系统,所以DOS程序是运行在16位地址模式下的。

这种模式下的程序具有这样的特点:
(1) 偏移地址是16位,所表示的偏移地址只能是0~64K-1。

在默认情况下,指令处理的数据类型是16位的,但也可以处理32位数据。

(2) 应用程序可以访问所有的计算机系统资源,可以使用I/O指令直接与外设交换数据,也可以用INT指令调用DOS环境下的系统功能(DOS和BIOS)。

在DOS系统下有很多系统功能调用可用,但是这里仅将DOS环境作为编程练习的平台,所以只须如下所述的很少几个系统功能就足够了,主要解决字符的输入、输出,以及应用程序退出返回。

如果读者需要开发DOS系统下的应用程序,则必须另外参阅相关的系统资料手册。

1) 编程练习所用的DOS系统调用
(1) 功能01h。

从标准输入设备输入一个字符,并回显。

入口:AH=01h
出口:AL=输入字符的ASCII码
(2) 功能02h。

向标准输出设备输出一个字符。

入口:AH=02h
DL=待输出字符的ASCII码
出口:无
(3) 功能08h。

从标准输入设备输入一个字符,无回显。

入口:AH=08h
出口:AL=输入字符的ASCII码
(4) 功能09h。

输出一个字符串到标准输出设备上。

入口:AH=09h
DS:DX=待输出字符串的地址(字符串须以'$'作为其结束标志)
出口:无
(5) 功能0Ah。

从标准输入设备上读入字符串(以回车结束,有回显)。

入口:AH=0Ah
DS:DX=输入缓冲区地址(字节0须填入允许输入字符数)。

出口:输入缓冲区字节1存放输入的字符数,字节2起存放输入的字符串(6) 功能0Bh。

检查标准输入设备上是否有字符可读。

入口:AH=0Bh
出口:AL=00h——无字符可读;FFh——有字符可读
(7) 功能4Ch。

终止程序的执行,并可返回一个代码。

入口:AH=4Ch
AL=返回的代码
出口:无
2) 示例程序Demo16.ASM
编写程序Demo16.ASM,输入一个字符和一个字符串,并显示。

_STACK SEGMENT STACK 'STACK' USE16 ; 定义堆栈段
DB 2046 DUP(0) ; 堆栈区长度:2KB
TOS DW 0 ; 初始堆栈栈顶
_STACK ENDS ; 堆栈段定义结束
_DATA SEGMENT 'DATA' USE16 ; 定义数据段
Msg DB 13, 10, 'Hello, World!', 13,10,'$'
C1 DB 13, 10, 'Character is: *', 13, 10, '$'
S2 DB 13, 10, 'Buffer content is: '
Buffer DB 9, 0, 10 DUP('*'), 13, 10, '$'
_DATA ENDS ; 数据段定义结束
_TEXT SEGMENT 'CODE' USE16 ; 定义代码段
ASSUME CS: _TEXT, DS:_DATA, SS:_STACK
Start: MOV AX, _DATA ; 取数据内存区段地址MOV DS, AX ; 设置数据段寄存器
CLI ; 设置堆栈期间禁止响应中断
MOV AX, _STACK ; 取堆栈内存区段地址
MOV SS, AX ; 设置堆栈段寄存器
MOV SP, Offset TOS ; 设置初始状态时的堆栈指针
STI ; 堆栈设置完毕允许中断
MOV DX, Offset Msg
MOV AH, 9
INT 21h ; 中断21h的9号功能,显示字符串
MOV AH, 1
INT 21h
MOV S2-4, AL
MOV DX, Offset C1
MOV AH, 9
INT 21H
MOV DX, Offset Buffer
MOV AH, 0Ah
INT 21h
MOV BL, Buffer[1]
MOV BH, 0
MOV Buffer[BX+2], '#'
ADD Buffer[0], '0'
ADD Buffer[1], '0'
MOV DX, Offset S2
MOV AH, 9
INT 21H
MOV AX, 4C00h
INT 21h ; 运行结束,返回DOS
_TEXT ENDS ; 代码段定义结束
END Start ; 源程序到此为止
3) 汇编连接
须汇编成OMF格式的目标代码(.OBJ),使用LINK16.EXE连接程序。

如果ML默认使用的是LINK32.EXE,那么可执行SET2ML16,(用LINK16.EXE和LIB16.EXE覆盖原来的LINK.EXE和LIB.EXE)将LINK16.EXE设置成为ML默认调用的连接程序。

ML的/omf 选项是生成OMF格式的目标码,未指定则默认使用/omf。

汇编:ML /c Demo16.ASM;
连接:LINK Demo16.OBJ;
或汇编、连接:ML Demo16.ASM。

相关文档
最新文档