汇编语言指令集
单片机指令集的汇编语言编程方法介绍
单片机指令集的汇编语言编程方法介绍汇编语言是一种低级语言,它直接与计算机硬件进行交互,被广泛应用于单片机编程中。
本文将介绍单片机指令集的汇编语言编程方法。
一、简介单片机指令集是特定型号单片机支持的操作指令的集合。
每个指令都对应着特定的功能,通过组合和调用这些指令,可以实现复杂的计算和控制任务。
二、基本指令1. 数据传送指令数据传送指令用于将数据从一个位置传送到另一个位置。
常见的指令有MOV(将源操作数传送到目的操作数)、LDR(将存储器位置的数据传送到寄存器)和STR(将寄存器中的数据传送到存储器位置)等。
2. 算术指令算术指令用于进行数学运算,包括加法、减法、乘法和除法等。
常见的指令有ADD(将两个操作数相加并将结果存储到目的操作数中)、SUB(将目的操作数减去源操作数并将结果存储到目的操作数中)等。
3. 逻辑指令逻辑指令用于进行逻辑运算,包括与、或、非和异或等。
常见的指令有AND(将两个操作数进行按位与运算并将结果存储到目的操作数中)、ORR(将两个操作数进行按位或运算并将结果存储到目的操作数中)等。
4. 控制指令控制指令用于控制程序的执行流程,包括无条件跳转、条件跳转和中断等。
常见的指令有B(无条件跳转到指定的地址执行)、BEQ (当条件满足时跳转到指定的地址执行)等。
三、编程方法1. 熟悉指令集编程前需要详细了解所使用的单片机的指令集,包括指令的功能、操作数的类型和寻址方式等。
只有深入了解指令集,才能灵活运用指令编写程序。
2. 设计算法在开始编程之前,需要分析问题,设计出解决问题的算法。
算法应考虑输入、处理和输出等方面,合理利用指令集中的指令实现算法的逻辑。
3. 编写汇编程序根据算法,以汇编语言的格式编写程序。
程序的编写过程需要遵循指令的语法规则和寻址方式,并注意程序的可读性和效率。
4. 调试和优化程序编写完成后,需要进行程序的调试和优化。
通过单步执行程序,观察和检查程序执行过程中的中间结果,确保程序能够正确地执行。
汇编语言的运行方式
汇编语言的运行方式汇编语言是一种低级别的程序设计语言,与机器语言非常接近。
它直接与计算机硬件进行交互,可以实现对硬件的精细控制。
本文将详细探讨汇编语言的运行方式,包括指令集、编译过程和执行过程等。
一、指令集汇编语言的指令集是一组由机器码表示的基本操作,用于完成各种计算机操作。
指令集由操作码和操作数组成,操作码表示操作的类型,操作数则提供了操作所需的数据。
汇编语言的指令集通常为特定的计算机体系结构而定义,不同的处理器具有不同的指令集。
常见的指令包括数据传输指令、算术运算指令、逻辑运算指令和控制指令等。
二、编译过程将汇编语言程序翻译成机器语言的过程称为编译。
编译过程分为两个阶段:汇编和链接。
(1)汇编:汇编是将汇编代码转化为机器码的过程。
编写好的汇编程序被称为源代码,通过汇编器将源代码翻译成机器语言的指令。
(2)链接:链接是将多个汇编程序文件组合成一个可执行程序的过程。
链接器将不同文件中的代码、数据和库函数合并,解决符号引用、地址重定位等问题。
三、执行过程汇编语言程序的执行过程与机器语言非常相似,分为取指、解码、执行和写回四个阶段。
(1)取指:处理器从内存中读取下一条指令,并将其存储在指令寄存器中。
(2)解码:处理器解析指令,确定指令的类型和操作数。
(3)执行:处理器执行指令,进行数据传输、算术运算、逻辑运算或控制操作。
(4)写回:将执行结果写回内存或寄存器,更新程序状态。
汇编语言程序通过不断重复上述四个阶段,按照指令序列依次执行,完成各种计算和操作。
四、应用领域汇编语言虽然复杂而繁琐,但在一些特定的应用领域仍然发挥着重要作用。
(1)嵌入式系统开发:汇编语言可以直接操作硬件,实现对嵌入式系统的高效控制。
(2)低级优化:在对性能要求极高的软件中,使用汇编语言可以进行底层的优化,提高程序的执行效率。
(3)逆向工程:汇编语言是逆向工程的基础,通过分析汇编代码可以理解和修改程序的行为。
总结:汇编语言是一种与计算机硬件直接交互的低级别程序设计语言。
汇编语言指令集
汇编语言指令集1 数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(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,OSUB,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,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,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/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,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 TESTr/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影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注: A: ABOVE,当C=0,Z=0时成立 B: BELOW,当C=1时成立 C: CARRY,当弁时成立 CXZ: CX寄存器的值为0(ZERO)时成立 E: EQUAL,当Z=1时成立 G: GREATER(大于),当Z=0且S=0时成立 L: LESS(小于),当S不为零时成立 N: NOT(相反条件),需和其它符号配合使用 O: OVERFLOW,O=1时成立 P: PARITY,P=1时成立 PE: PARITY EVEN,P=1时成立 PO: PARITY ODD,P=0时成立 S: SIGN,S=1时成立 Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址 LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址 RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定 对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。
汇编语言
MOV 23H,#30H
MOV 12H,#34H MOV R0,#23H MOV R7,#22H MOV R1,12H; MOV A,@R0; r1=? a=?
MOV 34H,@R1; 34h=? MOV DPTR,#6712H MOV 12H,DPH; 12h=? MOV R0,DPL; MOV A,@R0; r0=? a=?
LOOP: ADD INC
R0, #0FF
A, DPTR R1
;1机器周期
;1机器周期 ;2机器周期
DJNZ
RET
R0, LOOP
;2机器周期
;2机器周期
结果:定时时间 =▁▁▁▁▁
六、控制转移类指令
子程序调用:
概念:子程序(c中叫函数),调用。
1)acall/lcall addr11/addr16 区别在于访问的范围:一个是2k一个是64k; 2)ret
三、算术运算类指令
十进制调整:
例: mov a,#23h
add a,#18h; a=? da a; a=?
note: DA指令将十六进制的加法结果调整为BCD码加 法的结果。
四、逻辑运算&位运算
逻辑运算:0-1表示true-false
1)与: anl
2)或: rol 3)异或:xrl 4)非: cpl
xchd a,@r0;
寻址方式
寻址方式: (操作数如何取得的问题) 上述提到了类似的指令:
1)mov a,#30h 2)mov a,30h 3)mov a,r0 4)mov c,30h 5)movc a,@a+dptr
对应的寻址方式是: 1)立即数寻址;2)直接寻址;3)寄存器寻址; 4)位寻址;5)变址寻址;
riscv汇编语言指令
riscv汇编语言指令
RISC-V(精简指令集计算机)是一种基于开放标准的指令集架
构(ISA),它的汇编语言指令集包括以下几类指令:
1. R 型指令,R 型指令用于执行寄存器之间的操作,包括算术
运算和逻辑运算。
例如,add、sub、and、or、xor 等。
2. I 型指令,I 型指令用于执行立即数和寄存器之间的操作,
包括加载、存储和分支操作。
例如,addi、lw、sw、beq 等。
3. S 型指令,S 型指令用于执行立即数偏移量和寄存器之间的
存储操作。
例如,sb、sh、sw。
4. B 型指令,B 型指令用于执行分支操作。
例如,beq、bne、blt、bge。
5. U 型指令,U 型指令用于执行无条件跳转和加载立即数操作。
例如,lui、auipc。
6. J 型指令,J 型指令用于执行无条件跳转操作。
例如,jal。
以上是 RISC-V 汇编语言指令的一些基本类型,每种类型的指令都有特定的操作码和功能码,通过这些指令可以完成对寄存器、内存和控制流的操作。
除了基本指令外,RISC-V 还支持特权指令、浮点指令和原子操作等扩展指令集,以满足不同应用领域的需求。
希望这些信息能够帮助你对 RISC-V 汇编语言指令有一个初步的了解。
汇编语言和指令集的关系
汇编语言和指令集是计算机编程中的两个关键概念,它们之间的关系密切,对于理解计算机系统的工作原理和编写高效的程序至关重要。
汇编语言是一种低级语言,它直接与计算机硬件交互。
汇编语言基于机器语言,机器语言是计算机可以理解的低级语言,它是用二进制代码编写的。
汇编语言将机器语言的指令集中封装成更易于人类理解的格式。
例如,在x86架构的计算机中,汇编语言可能包含如“MOV AX, 1234”这样的指令,这条指令将数值1234存储在寄存器AX中。
指令集则是计算机硬件的一种特性,它是一组为特定任务设计的微小命令。
指令集定义了计算机可以执行的操作,以及这些操作如何进行。
不同的计算机架构有不同的指令集,这使得它们在执行相同的汇编语言程序时可能会有不同的性能。
指令集通常根据应用领域进行优化,例如,为了提高多媒体处理速度,计算机可能会包含专门用于这种处理的指令集。
汇编语言和指令集的关系在于,汇编语言使用指令集来控制计算机执行任务。
在汇编语言程序中,程序员指定要执行的操作,这些操作由指令集中的特定指令实现。
指令集定义了这些操作如何执行,以及它们何时执行。
因此,理解指令集对于编写汇编语言程序至关重要。
总的来说,汇编语言和指令集之间的关系是:汇编语言是人与计算机硬件之间的接口,它使用指令集中定义的指令来控制计算机执行任务。
指令集定义了这些指令如何执行,以及它们在计算机中如何工作。
理解这两个概念对于理解计算机系统的工作原理和编写高效的程序至关重要。
C51汇编语言指令集
51汇编语言指令集一、符号定义表符号含义Rn R0~R7寄存器n=0~7Direc t 直接地址,内部数据区的地址RAM(00H~7FH)SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0@Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH)#data 8位常数#data1616位常数Addr16 16位的目标地址Addr11 11位的目标地址Rel 相关地址bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位二、指令介绍指令字节周期动作说明算数运算指令1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBBA,@Ri1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBBA,0data2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加114.INC Rn 1 1 将寄存器的值加l15.INCdirect2 1 将直接地址的内容加116.INC@Ri1 1 将间接地址的内容加117.INCDPTR1 1 数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位18.DEC A 1 1 将累加器的值减119.DEC Rn 1 1 将寄存器的值减120.DEC direct 2 1 将直接地址的内容减121.DEC@Ri1 1 将间接地址的内容减122.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。
汇编语言指令大全X86和X87汇编指令大全(带注释)
汇编语⾔指令⼤全X86和X87汇编指令⼤全(带注释)⽬录⼀、数据传输指令1. 通⽤数据传送指令.2. 输⼊输出端⼝传送指令.3. ⽬的地址传送指令.4. 标志传送指令.⼆、算术运算指令三、逻辑运算指令四、串指令五、程序转移指令六、伪指令七、处理机控制指令:标志处理指令浮点运算指令集1、控制指令2、数据传送指令3、⽐较指令4、运算指令其它1.机械码,⼜称机器码.2.需要熟练掌握的全部汇编知识(只有这么多)3.常见修改(机器码)4.两种不同情况的不同修改⽅法⼀、数据传输指令它们在存贮器和寄存器、寄存器和输⼊输出端⼝之间传送数据.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.NEG 求反(以 0 减之).CMP ⽐较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的⼗进制调整.MUL ⽆符号乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),IMUL 整数乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV ⽆符号除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).IDIV 整数除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令AND 与运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上⼋种移位指令,其移位次数可达255次.移位⼀次时, 可直接⽤操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04 SHL 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 程序结束.七、处理机控制指令:标志处理指令CMC 进位位求反指令STC 进位位置为1指令CLD ⽅向标志置1指令STD ⽅向标志位置1指令CLI 中断标志置0指令STI 中断标志置1指令NOP ⽆操作HLT 停机WAIT 等待ESC 换码LOCK 封锁浮点运算指令集1、控制指令(带9B的控制指令前缀F变为FN时浮点不检查,机器码去掉9B)FINIT 初始化浮点部件机器码 9B DB E3FCLEX 清除异常机器码 9B DB E2FDISI 浮点检查禁⽌中断机器码 9B DB E1FENI 浮点检查禁⽌中断⼆机器码 9B DB E0WAIT 同步CPU和FPU 机器码 9BFWAIT 同步CPU和FPU 机器码 D9 D0FNOP ⽆操作机器码 DA E9FXCH 交换ST(0)和ST(1) 机器码 D9 C9FXCH ST(i) 交换ST(0)和ST(i) 机器码 D9 C1iiiFSTSW ax 状态字到ax 机器码 9B DF E0FSTSW word ptr mem 状态字到mem 机器码 9B DD mm111mmmFLDCW word ptr mem mem到状态字机器码 D9 mm101mmmFSTCW word ptr mem 控制字到mem 机器码 9B D9 mm111mmmFLDENV word ptr mem mem到全环境机器码 D9 mm100mmmFSTENV word ptr mem 全环境到mem 机器码 9B D9 mm110mmmFRSTOR word ptr mem mem到FPU状态机器码 DD mm100mmmFSAVE word ptr mem FPU状态到mem 机器码 9B DD mm110mmmFFREE ST(i) 标志ST(i)未使⽤机器码 DD C0iiiFDECSTP 减少栈指针1->0 2->1 机器码 D9 F6FINCSTP 增加栈指针0->1 1->2 机器码 D9 F7FSETPM 浮点设置保护机器码 DB E42、数据传送指令FLDZ 将0.0装⼊ST(0) 机器码 D9 EEFLD1 将1.0装⼊ST(0) 机器码 D9 E8FLDPI 将π装⼊ST(0) 机器码 D9 EBFLDL2T 将ln10/ln2装⼊ST(0) 机器码 D9 E9FLDL2E 将1/ln2装⼊ST(0) 机器码 D9 EAFLDLG2 将ln2/ln10装⼊ST(0) 机器码 D9 ECFLDLN2 将ln2装⼊ST(0) 机器码 D9 EDFLD real4 ptr mem 装⼊mem的单精度浮点数机器码 D9 mm000mmmFLD real8 ptr mem 装⼊mem的双精度浮点数机器码 DD mm000mmmFLD real10 ptr mem 装⼊mem的⼗字节浮点数机器码 DB mm101mmmFILD word ptr mem 装⼊mem的⼆字节整数机器码 DF mm000mmmFILD dword ptr mem 装⼊mem的四字节整数机器码 DB mm000mmmFILD qword ptr mem 装⼊mem的⼋字节整数机器码 DF mm101mmmFBLD tbyte ptr mem 装⼊mem的⼗字节BCD数机器码 DF mm100mmmFST real4 ptr mem 保存单精度浮点数到mem 机器码 D9 mm010mmmFST real8 ptr mem 保存双精度浮点数到mem 机器码 DD mm010mmmFIST word ptr mem 保存⼆字节整数到mem 机器码 DF mm010mmmFIST dword ptr mem 保存四字节整数到mem 机器码 DB mm010mmmFSTP real4 ptr mem 保存单精度浮点数到mem并出栈机器码 D9 mm011mmmFSTP real8 ptr mem 保存双精度浮点数到mem并出栈机器码 DD mm011mmmFSTP real10 ptr mem 保存⼗字节浮点数到mem并出栈机器码 DB mm111mmmFISTP word ptr mem 保存⼆字节整数到mem并出栈机器码 DF mm011mmmFISTP dword ptr mem 保存四字节整数到mem并出栈机器码 DB mm011mmmFISTP qword ptr mem 保存⼋字节整数到mem并出栈机器码 DF mm111mmmFBSTP tbyte ptr mem 保存⼗字节BCD数到mem并出栈机器码 DF mm110mmmFCMOVB ST(0),ST(i) <时传送机器码 DA C0iiiFCMOVBE ST(0),ST(i) <=时传送机器码 DA D0iiiFCMOVE ST(0),ST(i) =时传送机器码 DA C1iiiFCMOVNB ST(0),ST(i) >=时传送机器码 DB C0iiiFCMOVNBE ST(0),ST(i) >时传送机器码 DB D0iiiFCMOVNE ST(0),ST(i) !=时传送机器码 DB C1iiiFCMOVNU ST(0),ST(i) 有序时传送机器码 DB D1iiiFCMOVU ST(0),ST(i) ⽆序时传送机器码 DA D1iii3、⽐较指令FCOM ST(0)-ST(1) 机器码 D8 D1FCOMI ST(0),ST(i) ST(0)-ST(1) 机器码 DB F0iiiFCOMIP ST(0),ST(i) ST(0)-ST(1)并出栈机器码 DF F0iiiFCOM real4 ptr mem ST(0)-实数mem 机器码 D8 mm010mmmFCOM real8 ptr mem ST(0)-实数mem 机器码 DC mm010mmmFICOM word ptr mem ST(0)-整数mem 机器码 DE mm010mmmFICOM dword ptr mem ST(0)-整数mem 机器码 DA mm010mmmFICOMP word ptr mem ST(0)-整数mem并出栈机器码 DE mm011mmmFICOMP dword ptr mem ST(0)-整数mem并出栈机器码 DA mm011mmmFTST ST(0)-0 机器码 D9 E4FUCOM ST(i) ST(0)-ST(i) 机器码 DD E0iiiFUCOMP ST(i) ST(0)-ST(i)并出栈机器码 DD E1iiiFUCOMPP ST(0)-ST(1)并⼆次出栈机器码 DA E9FXAM ST(0)规格类型机器码 D9 E54、运算指令FADD 把⽬的操作数 (直接接在指令后的变量或堆栈缓存器) 与来源操作数 (接在⽬的操作数后的变量或堆栈缓存器) 相加,并将结果存⼊⽬的操作数FADDP ST(i),ST 这个指令是使⽬的操作数加上 ST 缓存器,并弹出 ST 缓存器,⽽⽬的操作数必须是堆栈缓存器的其中之⼀,最后不管⽬的操作数为何,经弹出⼀次后,⽬的操作数会变成上⼀个堆栈缓存器了FIADD FIADD 是把 ST 加上来源操作数,然后再存⼊ ST 缓存器,来源操作数必须是字组整数或短整数形态的变数FSUB 减FSUBPFSUBR 减数与被减数互换FSUBRPFISUBFISUBRFMUL 乘FMULPFIMULFDIV 除FDIVPFDIVRFDIVRPFIDIVFIDIVRFCHS 改变 ST 的正负值FABS 把 ST 之值取出,取其绝对值后再存回去。
汇编指令大全
汇编指令大全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指令用于将目的操作数除以源操作数,并将商存储在目的操作数中,余数存储在另一个寄存器中。
汇编语言指令集
mova,b 把b的值送给aret 返回主程序no p 无作用,英文“n o ope ratio n”的简写,意思是“do no thing”(机器码90)***机器码的含义参看上面(解释:u ltrae dit打开编辑exe文件时你看到90,等同于汇编语句nop)c all 调用子程序je或jz若相等则跳(机器码74 或0F84) jne或jnz若不相等则跳(机器码75或0F85) jmp无条件跳(机器码E B)jb 若小于则跳ja若大于则跳jg 若大于则跳jge若大于等于则跳jl若小于则跳j le 若小于等于则跳p op 出栈p ush 压栈三.常见修改(机器码)74=>7574=>90 74=>EB 75=>74 75=>90 75=>EBjnz->nop75->90(相应的机器码修改)jn z ->jmp 75-> EB(相应的机器码修改)j nz -> jz 75->74 (正常) 0F 85-> 0F 84(特殊情况下,有时,相应的机器码修改)四.两种不同情况的不同修改方法1.修改为jm pje(jn e,jz,jnz)=>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp 的作用是绝对跳,无条件跳,从而跳过下面的出错信息xxxx xxxxx xxx 出错信息,例如:注册码不对,so rry,未注册版不能...,"Funct ion N ot Av aible in D emo"或"Comm and N ot Av aible" 或"Can't save in S harew are/D emo"等(我们希望把它跳过,不让它出现)<。
c51汇编语言指令集
资料转移指令MOV 移动MOVC 程式记忆体移动MOVX 外部RAM和扩展I/O口与累加器A的数据传送指令PUSH 放入堆叠POP 由堆叠取回XCH 8位元交换XCHD 低4位元交换SWAP 高低4位元交换算术指令ADD 两数相加ADDC 两数相加再加CSUBB 两数相减再减CINC 加一指令DEC 减一指令MUL (MUL AB乘法指令仅此一条)相乘指令,所得的16位二进制数低8位存累加器A高8位存BDIV (DIV AB 除法指令仅此一条)相除指令,所得商存A,余数存BDA (DA A 只此一条指令)调整为十进数逻辑指令ANL做AND(逻辑与)运算ORL做OR(逻辑或)运算XRL 做(逻辑异或)运算CLR 清除为0CPL 取反指令RL 不带进位左环移RLC 带进位左环移RR 不带进位右环移RRC 带进位右环移控制转移类指令JC C=1时跳JNC C=0时跳JB 位元=1时跳JNB 位元=0时跳JBC 位元=1时跳且清除此位元LCALL 长调用子程序ACALL 绝对调用子程序RET 由副程式返回RETI 由中断副程式返回AJMP 绝对转移SJMP 相对转移JMP @A+DPTR 散转,相对DPTR的间接转移JZ A=0时跳JNZA 0时跳CJNE 二数比较,不相等时跳DJNZ 减一,不等於0时跳NOP 空操作位变量指令SETB 设定为1ORG 程序开始,规定程序的起始地址END 程序结束EQU 等值指令(先赋值后使用)例:SUM EQU 30HDB 定义字节指令DW 定义字内容DS 定义保留一定的存贮单元数目BIT 位地址符号指令例:SAM BIT P1.0 RET 子程序返回指令RETI 中断子程序返回指令$ 本条指令地址算术运算指令指令说明周期ADD A,Rn A←A+Rn 12ADD A,direct A←A+direct 12ADD A,@Ri A←A+Ri 12ADD A,#data A←A+data 12ADDC A,Rn A←A+Rn+C 12ADDC A,direct A←A+direct+C 12 ADDC A,@Ri A←A+Ri+C 12ADDC A,#data A←A+data+C 12SU BB A,Rn A←A-Rn-C 12SUBB A,direct A←A-direct-C 12 SUBB A,@Ri A←A-Ri-C 12SUBB A,#data A←A-data-C 12INC A A←A+1 12INC Rn Rn←Rn+1 12INC direct direct←direct+1 12INC @Ri @Ri←@Ri+1 12INC DPTR DPTR←DPTR+1 12DEC A A←A-1 12DEC Rn Rn←Rn-1 12DEC direct direct←direct-1 12DEC @Ri @Ri←@Ri-1 12MUL AB 两个无符号的8位数据相乘,其中高阶8位放入B缓存器,低阶8位则放入累积器ACC 24DIV AB 两个无符号的8位数据相除,把ACC 值除以B缓存器值,商数放回ACC,余数放在B 48DA A 累加器作十进制调整 48逻辑运算指令指令说明周期ANL A,Rn A←A and Rn 12ANL A,direct A←A and direct 12ANL A,@Ri A←A and Ri 12ANL A,#data A←A and data 12ANL direct,A direct←direct and A 12 ANL direct,#data direct←direct and data 24ORL A,Rn A←A or Rn 12ORL A,direct A←A or direct 12ORL A,Rn A←A or Rn 12ORL A,@Ri A←A or Ri 12ORL A,#data A←A or data 12ORL direct,A direct←direct or A 12 ORL direct,#data direct←direct or data 24XRL A,Rn A←A xor Rn 12XRL A,direct A←A xor direct 12XRL A,@Ri A←A xor Ri 12XRL A,#data A←A xor data 12XRL direct,A direct←direct xor A 12 XRL direct,#data dir ect←direct xor data 12CLR A 清除累加器 12CPL A 累加器反相 12RL A 累加器向左旋转 12RLC A 累加器和C左旋 12RR A 累加器向右旋转 12RRC A 累加器和C右旋 12SWAP A 累加器的高低四位互换 12数据转移指令指令说明周期MOV A,Rn A←Rn 12MOV A,direct A←direct 12MOV A,@Ri A←Ri 12MOV A,#data A←data 12MOV Rn,A Rn←A 12MOV Rn,direct Rn←direct 24MOV Rn,#data Rn←data 12MOV direct,A direct←A 12MOV direct,Rn direct←Rn 24MOV direct,direct direct←direct 24 MOV direct,@Ri direct←Ri 24MOV direct,#data direct←data 24MOV @Ri,A Ri←A 12MOV @Ri,direct Ri←direct 24MOV @Ri,#data Ri←data 12MOV DPTR,#data 16 Ri←16bit data 24 MOVC A,@A+DPTR A←程序内存的数据 24 MOVC A,@A+PC A←程序内存的数据 24 MOVX A,@Ri A←外部RAM的数据(8bit地址) 24MOVX A,@DPTR A←外部RAM的数据(16bit地址) 24MOVX @Ri,A 外部的RAM(8bit)←A 24 MOVX @DPTR,A 外部的RAM(16bit)←A 24 PUSH direc 推迭区←direct 24POP direc direct←堆栈区 24XCH A,Rn A和Rn互换 12XCH A,direct A和direct互换 12XCH A,@Ri A和Ri互换 12XCHD A,@Ri A和Ri的低四位互换 12位运算指令指令说明周期CLR C 清除进位旗标 12CLR bit 清除直接位 12SETB C 设定进位旗标 12SETB bit 设定直接位 12CPL C 进位旗标反相 12CPL bit 直接位反相 12ANL C,bit C←C and bit 24ANL C,/bit C←C and bit(反相) 24 ORL C,bit C←C or bit 24ORL C,/bit C←C or bit(反相) 24 MOV C,bit C←bit 12MOV bit,C bit←C 24JC rel 若C=1跳至rel 24JNC rel 若C=0跳至rel 24JB bit,rel 若bit=1跳至rel 24JNB bit,rel 若bit=0跳至rel 24JBC bit,rel 若bit=1跳至rel,且清除此位24程序跳跃指令指令说明周期ACALL addr11 绝对式子程序呼叫 24 LCALL addr16 远程子程序呼叫 24RET 从子程序返回 24RETI 从中断子程序返回 24AJMP addr11 绝对式跳跃 24LJMP addr16 远程跳跃 24SJMP rel 短程跳跃 24JMP @A+DPTR 间接跳跃 24JZ rel 若A=0跳至rel 24JNZ rel 若A不等于0跳至rel 24CJNE A,direct,rel 若A不等于direct跳至rel 24CJNE A,#data,rel 若A不等于data跳至rel 24CJNE Rn,#data,rel 若Rn不等于data跳至rel 24CJNE @Ri,#data,rel 若Ri不等于data跳至rel 24DJNZ Rn,rel Rn减1不等于0跳至rel 24 DJNZ direct,rel direct减1不等于0跳至rel 24NOP 没动作 12缩写符号说明缩写符号说明备注Rn 缓存器R0-R7direct 8bit内部数据存储器,包括1.内部数据存储器(00-7F)的地址2.特殊功能缓存器(80-FF)的地址,如P0,PSW,TMOD..等@Ri 由缓存器R0或R1所寻址的内部RAM数据#data 8bit常数#data 16 16bit常数addr 16 16bit的目的地址,可使跳跃指令跳跃64kaddr 11 11bit的目的地址,可使跳跃指令跳跃2krel 具正负号的8位地址偏移量,用于相对地址的跳跃bit 1个bit:只所有可以位寻址的位。
汇编语言指令集
汇编语言指令集汇编语言是一种低级编程语言,用于与计算机硬件进行交互。
它直接操作计算机的指令集,通过对机器指令进行编写和调试,实现对硬件资源的有效利用和控制。
在本文中,我们将深入探讨汇编语言指令集的相关内容。
一、指令集概述指令集是汇编语言中的重要组成部分,它定义了可用于执行各种操作的机器指令的集合。
每个指令由一个操作码和零个或多个操作数组成。
操作码表示所要执行的操作类型,操作数则指定了执行操作所需要的数据。
1.1 常见指令类型在汇编语言中,常见的指令类型包括数据传输指令、算术指令、逻辑指令、条件转移指令等。
下面分别介绍这些指令类型的功能和使用方法:1.1.1 数据传输指令数据传输指令用于将数据从一个存储位置传送到另一个存储位置。
常见的数据传输指令有MOV(移动)指令和XCHG(交换)指令。
以MOV指令为例,其语法如下:MOV 目的操作数, 源操作数其中,目的操作数可以是寄存器或内存单元,源操作数可以是寄存器、内存单元或立即数。
MOV指令将源操作数的值传送给目的操作数。
1.1.2 算术指令算术指令用于对数据进行算术运算,如加法、减法、乘法和除法等。
常见的算术指令有ADD(加法)指令和SUB(减法)指令。
以ADD指令为例,其语法如下:ADD 目的操作数, 源操作数其中,目的操作数可以是寄存器或内存单元,源操作数可以是寄存器、内存单元或立即数。
ADD指令将源操作数的值加到目的操作数上。
1.1.3 逻辑指令逻辑指令用于对数据进行逻辑运算,如与、或、非和异或等。
常见的逻辑指令有AND(与)指令和OR(或)指令。
以AND指令为例,其语法如下:AND 目的操作数, 源操作数其中,目的操作数可以是寄存器或内存单元,源操作数可以是寄存器、内存单元或立即数。
AND指令将源操作数的值与目的操作数的值进行逻辑与运算。
1.1.4 条件转移指令条件转移指令用于根据条件判断来改变程序的执行流程。
常见的条件转移指令有JMP(无条件转移)指令和JE(相等转移)指令。
汇编语言指令大全
语法: MOVSB MOVSW MOVSD
标志位: 无
CMPSB,CMPSW,CMPSD
功能: 字符串比较指令
语法: CMPSB CMPSW CMPSD
标志位: C,P,Z,S,O
SCASB,SCASW
功能: 字符串搜索指令
语法: SCASB SCASW
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) 标志进栈指令P36
SEGMENT,ENDS 段定义指令P95
ASSUME 段地址分配指令P95
ORG 起始偏移地址设置指令P96
$ 地址计数器的当前值P97
PROC,ENDP 过程定义语句P97
NAME,TITLE,END 程序开始结束语句P98
MACRO,ENDM 宏定义指令P99
8086/8088汇编语言指令集
标志位: C,P,Z,S,O
LODSB,LODSW,STOSB,STOSW
功能: 字符串载入或存贮指令
语法: LODSB LODSW STOSB STOSW
标志位: 无
REP,REPE,REPNE
功能: 重复前缀指令集
语法: REP 指令S REPE 指令S REPNE 指令S
AAA 非压缩的BCD码加法十进制调整指令P54
AAS 非压缩的BCD码加法十进制调整指令P54
AND 逻辑与指令P54
单片机汇编语言指令集
单片机汇编语言指令集汇编语言是一种低级程序设计语言,广泛应用于单片机的编程和控制。
单片机汇编语言指令集是程序员在开发单片机应用时必须了解和掌握的一项基础知识。
本文将介绍常用的单片机汇编语言指令集及其功能。
1. 指令集概述单片机汇编语言指令集是单片机内部指令的集合,用于完成各种操作和控制功能。
指令集由操作码和操作数组成,操作码表示指令的类型,操作数表示指令要操作的数据或地址。
2. 数据传送指令数据传送指令用于将数据从一个位置传送到另一个位置,包括寄存器之间的传送、寄存器和内存之间的传送等。
常用的数据传送指令有MOV、LDR、STR等。
3. 算术运算指令算术运算指令用于进行各种算术运算,包括加法、减法、乘法、除法等。
常用的算术运算指令有ADD、SUB、MUL、DIV等。
4. 逻辑运算指令逻辑运算指令用于进行各种逻辑运算,包括与、或、非、异或等。
常用的逻辑运算指令有AND、OR、NOT、XOR等。
5. 条件转移指令条件转移指令用于根据条件进行跳转或循环控制,常用的条件转移指令有BEQ、BNE、BGT、BLE等。
通过条件转移指令,程序可以根据不同的条件选择执行不同的代码路径。
6. 程序控制指令程序控制指令用于实现程序的跳转、函数的调用和返回等功能。
常用的程序控制指令有JMP、CALL、RET等。
通过程序控制指令,程序可以按照预定的流程执行,实现复杂的控制逻辑。
7. 输入输出指令输入输出指令用于与外部设备进行数据交互,包括输入数据和输出数据。
常用的输入输出指令有IN、OUT等。
通过输入输出指令,单片机可以与外围设备进行数据的传输和交互。
8. 中断指令中断指令用于处理外部中断或内部中断事件,包括中断的触发、中断的响应和中断的处理等。
常用的中断指令有INT、IRET等。
通过中断指令,单片机可以及时响应和处理各种中断事件。
9. 扩展指令扩展指令是一些额外的指令,用于扩展单片机的功能和性能。
扩展指令的具体内容和功能因不同的单片机而异,常见的扩展指令有乘法指令、移位指令、位操作指令等。
汇编语言-指令集
例:假设(SS) = 2250H , (SP) = 0140H 如果在堆栈中存入5个数据,则栈顶的物理地址是多少? 未存入数据之前物理地址=22500 + 0140=22640H 存入5个数据,栈顶的物理地址为: 22640 – 0A = 22636H
如果又从堆栈中取出3个数据,则栈顶的物理地址是多少? 22636 + 6 = 2263CH
80x86/8088指令系统 8086/8088的指令系统丰富,而且指令的功能也强。 大多数指令既能处理字数据,又能处理字节数据。 指令系统可分为如下6个功能组: (1)数据传送 (2)算术运算 (3)逻辑运算 (4)串操作 (5)程序控制 (6)处理器控制 汇编语言中,指令语句可由四部分组成,一般格式如下: [标号:] 指令助记符 [操作数1 [,操作数2]] [;注释]
例如:PUSH AX 假设(AX) = 2107H
(2)出栈指令POP 格式: POP DST 执行的操作:从堆栈顶弹出一个字数据到目的操作数DST。 步骤为: 1. 把堆栈指针寄存器SP所指的字数据送往目的操作数DST; 2. 堆栈指针寄存器器SP的值加2。 DST可以是通用寄存器、段寄存器(CS除外),也可以是字 存储单元
3.加1指令INC(INCrement) 其格式如下:INC OPRD (OPRD) <- (OPRD) + 1 功能:对操作数加1. OPRD可以是通用寄存器,也可以是存储单元。 指令执行的结果影响ZF、SF、OF、PF、AF, 但不影响CF. 改指令主要用于调整地址指针和用于计算器。
例:写出把首地址为BLOCK的字数组的第6个字送到DX寄存 器的指令。 (1)使用寄存器间接寻址 MOV BX , OFFSET BLOCK ADD BX , 000AH MOV DX , [BX] (2)寄存器相对寻址 MOV BX , OFFSET BLOCK MOV DX , [BX + 000AH]
汇编语言x86汇编指令集大全
汇编语言x86汇编指令集大全汇编语言是计算机体系结构学科中的重要内容之一,它可以直接操作计算机硬件,实现对机器指令的精确控制。
而x86汇编则是汇编语言中最常用的一种,它广泛应用于各类个人电脑和服务器等计算设备中。
x86汇编指令集是汇编语言中的核心,掌握其基本指令对于开发高效的汇编程序至关重要。
本文将介绍x86汇编指令集的各个方面,包括数据传输指令、算术运算指令、逻辑运算指令、分支控制指令以及其他常用指令等内容,以帮助读者全面理解和掌握x86汇编语言。
一、数据传输指令数据传输指令是汇编语言中最基本的指令之一,用于实现数据在寄存器、内存和I/O端口之间的传递。
常见的数据传输指令包括MOV、XCHG、PUSH和POP等。
MOV指令用于将数据从一个位置传送到另一个位置,可以将数据从内存中传送到寄存器,也可以将数据从寄存器传送到内存。
例如,MOV AX, BX表示将寄存器BX中的数据传送到寄存器AX中。
XCHG指令用于交换两个操作数的值,例如,XCHG AX, BX表示交换寄存器AX和BX中的数据。
PUSH指令将数据推入堆栈,POP指令从堆栈中弹出数据。
这两个指令常用于函数调用和局部变量的保存与恢复。
二、算术运算指令算术运算指令用于执行各种数值计算操作,包括加法、减法、乘法、除法以及取模等。
常见的算术运算指令包括ADD、SUB、MUL、DIV和IMUL等。
ADD指令用于进行加法运算,可以将两个操作数相加,并将结果保存在目标操作数中。
例如,ADD AX, BX表示将寄存器BX中的值加到寄存器AX中。
SUB指令用于进行减法运算,可以将目标操作数减去源操作数,并将结果保存在目标操作数中。
MUL指令用于进行无符号数的乘法运算,可以将一个操作数与寄存器中的值相乘,并将结果保存在一对寄存器中。
DIV指令用于进行无符号数的除法运算,可以将寄存器中的值除以一个操作数,并将商保存在一个寄存器中,余数保存在另一个寄存器中。
IMUL指令用于进行有符号数的乘法运算,功能与MUL指令类似,但结果为有符号数。
汇编语言指令集
汇编语言指令集包括多种不同类型的指令,以下是一些常见的指令类型:
1. 数据传送指令:用于在寄存器之间、寄存器与内存之间、寄存器与输入/输出设备之间传输数据。
常见的指令包括MOV、POP、PUSH 等。
2. 算数运算指令:用于对数据执行算术操作,如加法、减法、乘法、除法等。
常见的指令包括ADD、SUB、MUL、DIV等。
3. 逻辑运算指令:用于对数据进行逻辑操作,如与、或、非等。
常见的指令包括AND、OR、NOT等。
4. 移位指令:用于将数据向左或向右移动指定位数。
常见的指令包括SHL、SAL、SHR等。
5. 串处理指令:用于处理存储器中的数据串。
常见的指令包括MOVS、CMPS、SCAS等。
6. 控制转移指令:用于控制程序的执行流程,如跳转、分支等。
常见的指令包括JMP、JZ(跳转)、CMP(比较)等。
7. 堆栈指令群:用于在堆栈中压入或取出数据,如PUSH、POP等。
8. 取地址至寄存器指令:用于将地址存储在寄存器中,如LEA等。
9. 查表指令:用于通过查表获取数据,如XLAT等。
以上只是汇编语言指令集的一部分,实际上汇编语言还包含许多其他类型的指令,具体取决于不同的处理器架构和操作系统。
CPU汇编指令集与汇编语言编程
这些指令允许程序员在寄存器和内存之间快 速移动数据,进行基本的算术和逻辑运算。
数据传输指令对于执行程序中的基 本操作至关重要,它们是汇编语言 编程的基础。
算术运算类指令
01
算术运算指令用于执行各种算术运算,如加法、减 法、乘法和除法。
02
这些指令通常用于处理数值数据,并在程序中进行 数学计算。
03
CPU指令集对汇编语言编程的影响
指令集决定了汇编语言的语法和语义
01
不同的CPU架构有不同的指令集,因此汇编语言的语
法和语义也会有所不同。
指令集决定了汇编语言的性能
02 指令集的特性决定了汇编语言的执行效率,了解指令
集的特性有助于编写高效的汇编代码。
指令集决定了汇编语言的可移植性
03
不同的指令集可能导致汇编代码在不同的CPU架构上
算术运算指令包括ADD、SUB、MUL、DIV等,它 们提供了对数值数据进行操作的能力。
逻辑运算类指令
逻辑运算指令用于执行逻辑运 算,如与、或、非等。
这些指令用于处理布尔值和位 操作,常用于控制流和数据操 作。
逻辑运算指令包括AND、OR、 XOR、NOT等,它们在程序中 实现逻辑控制和数据处理。
3
串处理指令包括MOVSB、MOVSW、CMP等, 它们在程序中实现字符串操作和文本处理。
03
汇编语言基础
汇编语言的语法规则
指令格式
每条汇编指令都有固定格式,包 括操作码和操作数,操作码指明 指令类型,操作数指明操作对象。
寻址方式
指令中的操作数如何取得,称为 寻址方式,包括直接寻址、间接 寻址、寄存器寻址等。
系统级编程
汇编语言适用于系统级编 程,如操作系统内核、嵌 入式系统等,能够直接控 制硬件资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
00408265 |. 33C0 XOR EAX,EAX
比如 XOR EAX,EAX
前面xor是异或指令,后面eax是寄存器,你把它理解成变量就可以了
这句代码的意思就是将eax 和eax进行异或运算,结果保存在eax里
标志位: I
CMP
功能: 比较OP1与OP2的值
语法: CMP r/m,r/m/data
标志位: C,P,A,Z,O
JMP
功能: 跳往指定地址执行
语法: JMP 地址
JXX
功能: 当特定条件成立则跳往指定地址执行
语法: JXX 地址
注:
A: ABOVE,当C=0,Z=0时成立
00408254 |. 837D 0C 00 CMP DWORD PTR SS:[EBP+C],0
00408258 |. 57 PUSH EDI
00408259 |. 0F84 20010000 JE scanner.0040837F
0040825F |. 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C]
格式: 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
1.80386的的寄存器:
80386的寄存器可以分为8组:通用寄存器,段寄存器,指令指针寄存器,标志寄存器,系统地址寄存器,控制寄存器,调试寄存器,测试寄存器,它们的宽度都是32位的。本篇主要介绍80386的寄存器。
A1.General Register(通用寄存器)
EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,它们的低16位就是8086的AX,BX,CX,DX,SI,DI,SP,BP,它们的含义如下:
格式: 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
SHR,SHL,SAR,SAL
功能: 移位指令
语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL
影响标志: C,P,Z,S,O
ROR,ROL,RCR,RCL
功能: 循环移位指令
语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL
两个相同的数进行异或就等于0了,所以就是对eax值进行清空
发这个贴的目的是,有很多想学软件破解,但是看不懂反汇编出来的代码,又不想好好看汇编基础或者说没这方面的资料.只是不希望大家因为某个指令不懂又没地方查而放弃破解
如果有什么对汇编语言的疑惑都可以在这跟贴进行交流,77169不乏汇编高手
格式: 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 操作数
汇编语言指令集(中文)-软件破解初学者必备
大家反汇编出来的无非就是这些了,可以帮助初学者看懂汇编代码
1.算术运算符
ADC:带进位加法
ADD:二进制数加法
DEC:减一
DIV:无符号数除法
IDIV:带符号数(整数)除法
IMUL:带符号数(整数)乘法
INC:加一
MUL:无符号书乘法
CTD:方向标志置1
STI:中断标志置1
7.输入/输出
IN:输入字节或字
INSN:串输入
OUT:输出字节或字
OUTSN:穿输出
8.逻辑操作
AND:逻辑与
NOT:逻辑非
OR:逻辑或
XOR:异或
9.循环
LOOP:循环直到完成
LOOPE:相等时循环
JG:大于则转移
JGE:大于或等于则转移
JL:小于则转移
JLE:小于或等于
JNC:进位为零则转移
JNE:不相等则转移
JNG:不大于则转移
JNGE:不大于或等于则转移
JNL:不小于则转移
JNLE:不小于或等于则转移
JNA:不高于则转移
JNB:不低于则转移
LOOPZ:为零是循环
LOOPNE:不相等时循环
LOOPPNZ:不为零是循环
LOOPPNEW:不相等时循环
LOOPNZW:不为零时循环
10.处理器控制
HLT:进入暂停状态
LOCK:封锁总线
NOP:无操作
WAIT:置处理器于等待状态
11.堆栈操作
ENTER:建立堆栈帧
REPNE:不相等时重复
REPNZ:不为零时重复
SCAS:串扫描
STDS:存入串
13.转移(条件)
INT溢出中断
JA:高于则转移
JAE:高于或等于则转移
JB:低于则转移
JBE:低于或等于则转移
JC:进位为1则转移
JCXZ:CX为零则转移
JE:相等则转移
EAX:累加器
EBX:基址寄存器
ECX:计数器
EDX:数据寄存器
ESI:源地址指针寄存器
EDI:目的地址指针寄存器
EBP:基址指针寄存器
ESP:堆栈指针寄存器
这些寄存器可以将低16位单独存取,也就是8086的AX,BX,CX,DX,SI,DI,SP,BP,在存取这些寄存器的低16位(AX,BX,CX,DX,SI,DI,SP,BP),它
AAA,AAS,AAM,AAD
功能: 非压BCD码运算调整指令
A,C(AAA,AAS) S,Z,P(AAM,AAD)
DAA,DAS
功能: 压缩BCD码调整指令
语法: DAA DAS
影响标志: C,P,A,Z,S
位运算指令集
影响标志: C,P,Z,S,O
程序流程控制指令集
CLC,STC,CMC
功能: 设定进位标志
语法: CLC STC CMC
标志位: C
CLD,STD
功能: 设定方向标志
语法: CLD STD
标志位: D
CLI,STI
功能: 设定中断标志
语法: CLI STI
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/d
ata NOT r/m
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位
RCL:带进位循环左移
RCR:带进位循环右移
ROL:循环左移
ROR:循环右移
SAL:算术左移
SAR:算术右移
SHL:逻辑左移
SHR:逻辑右移
SHLD:双精度左移
SHRD:双精度右移
4.比较
BSF/BSR:位扫描
BT/BTC/BR/BB:位测试
CMP:比较
MOVZX:带零扩展传送
STOS:存入串
XCHG:交换
XLAT:换码
6.标志操作
CLC:清除位标志
CLD:清除方向标志
CLI:清除中断标志
CMC:进位标志求反
LAHF:标志送AH
POPF:标志出栈
PUSHF:标志进栈
SAHF:AH送标志寄存器
STC:进位标志置1
们的高16位不受影响,同时和8086一样对于AX,BX,CX,DX这四个寄存器来讲,可以单独存取它们的高8位和低8位(AH,AL,BH,BL,CH,CL,DH,DL)
8086/8088汇编语言指令集
数据传送指令集
MOV
功能: 把源操作数送给目的操作数
语法: MOV 目的操作数,源操作数
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
LEAVE:结束堆栈帧
POP:字出栈
POPF:标志出栈
POPA:所有通用寄存器出栈
PUSH:字进栈
PUSHA:所有通用积存器进栈
PUSHF:标志进栈
12.串操作
CMPS:串比较
LODS:从串取
MOVS:串传送
REP:串重复
REPE:相等时重复