指令汇编格式
汇编语言指令格式

汇编语言指令格式汇编语言是一种低级别的计算机编程语言,它直接与计算机的体系结构和指令集相关。
每个计算机体系结构都有其自己的指令集架构和对应的汇编语言。
下面是一些通用的汇编语言指令格式元素,具体的格式会根据不同的体系结构而有所差异:1. 操作码(Opcode):-操作码是指令的基本操作,用于指定要执行的操作,比如加法、减法、移动数据等。
不同的操作码对应不同的指令。
2. 操作数(Operands):-操作数是指令要处理的数据或地址。
有些指令可能不需要操作数,而另一些指令可能需要一个或多个操作数。
3. 寻址模式(Addressing Mode):-寻址模式指定了操作数在内存中的寻址方式。
不同的体系结构支持不同的寻址模式,例如直接寻址、寄存器寻址、间接寻址等。
4. 注释(Comments):-注释是用来解释指令的文本,对于程序员来说是可选的,但对于代码的可读性和理解很有帮助。
以下是一个简单的示例,展示了一个通用的汇编语言指令的可能格式:```assembly; 注释部分,解释指令的作用MOV AX, 42 ; 将值42 移动到寄存器AX 中ADD BX, AX ; 将寄存器AX 的值加到寄存器BX 中SUB CX, 10 ; 从寄存器CX 中减去值10JMP label1 ; 无条件跳转到标签label1 处```在上面的示例中:- `MOV` 是一个操作码,表示数据移动的指令。
- `AX`、`BX`、`CX` 是寄存器,用于存储数据。
- `42` 和`10` 是立即数,即直接给定的数值。
- `JMP` 是一个跳转指令,用于实现程序的控制流。
需要注意的是,不同的体系结构和编译器可能有不同的语法和指令集,上述示例仅用于说明基本的汇编语言指令格式。
在实际编写汇编语言程序时,需要参考具体体系结构的文档和规范。
汇编语言的所有指令

汇编语言的所有指令数据传送指令集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 mPUSHF,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 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影响标志: 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机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。
汇编指令1

汇编语言指令集一、数据传输指令1. 通用数据传送指令.MOV(MOVe) 传送字或字节.MOVS(MOVe String) 串传送指令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 (eXCHanG)交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD先交换再累加.( 结果在第一个操作数里)XLAT(TRANSLATE) 字节查表转换.── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535.3. 目的地址传送指令.LEA (Load Effective Address)装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS (Load DS with pointer)传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES (Load ES with pointer)传送目标指针,把指针内容装入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 (Load AH with Flags)标志寄存器传送,把标志装入AH.SAHF (Store AH into Flgs)标志寄存器传送,把AH内容装入标志寄存器.PUSHF (PUSH the Flags)标志入栈.POPF (POP the Flags)标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令───────────────────────────────────────ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAA 加法的十进制调整.压缩的BCD码加法十进制调整指令SUB (SUBtract)减法.SBB (SuVtrach with borrow)带借位减法.DEC (DECrement)减1.NEC (NEGate)求反(以0 减之).CMP (CoMPare)比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAS 减法的十进制调整.压缩的BCD码减法十进制调整指令MUL (unsinged MULtiple)无符号乘法.IMUL (sIgned MUL tiple)整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV (unsigned DIVide)无符号除法.IDIV (sIgned DIVide)整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW (Count Byte to Word)字节转换为字. (把AL中字节的符号扩展到AH中去)CWD (Count Word to Doble word)字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL (SHift logical Letf)逻辑左移.SAL 算术左移.(=SHL)SHR (SHift logical Right)逻辑右移.SAR 算术右移.(=SHR)ROL (Rotate Left )循环左移.ROR (Rotate Right)循环右移.RCL (Rotate Left through Carry)通过进位的循环左移.RCR (Rotate Right through Carry)通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如MOV CL,04SHL AX,CL四、串指令───────────────────────────────────────DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS (CoMPare String)串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS (SCAn String)串扫描指令.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS (STOre into String)保存串.是LODS的逆过程.REP (REPeat)当CX/ECX<>0时重复.REPE/REPZ (REPeat while Equal/Zero)当ZF=1或比较结果相等,且CX/ECX<>0时重复. REPNE/REPNZ (REPeat while Not Equal/Zero)当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 (SeT Direction flag)置方向标志位.CLD (CLear Direction flag)清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令───────────────────────────────────────DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.8088 汇编跳转cmp a,b 比较a与bmov a,b 把b的值送给aret 返回主程序nop 无作用,英文“no operation”的简写,意思是“do nothing” call 调用子程序je 或jz 若相等则跳jne或jnz 若不相等则跳jmp 无条件跳jb 若小于则跳ja 若大于则跳jg 若大于则跳jge 若大于等于则跳jl 若小于则跳jle 若小于等于则跳pop 出栈push 压栈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 mPUSHF,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 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 影响标志: 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而定。
ARM汇编语言的语法知识

地址表达式expr的取值范围: 当地址值不是字对齐时,其取值范围为-64K~64K; 当地址值是字对齐时,其取值范围为-256K~256K; 当地址值是16字节对齐时,其取值范围将更大; 该地址必须与ADRL伪指令在同一个代码段中 .
• ARM伪指令——大范围的地址读取
指令执行的条件码 加载的目标寄存器 地址表达式
地址表达式expr的取值范围: 当地址值不是字对齐时,其取值范围为-255~255字节; 当地址值是字对齐时,其取值范围为-1020~1020字节; 当地址值是16字节对齐时,其取值范围将更大; 该地址必须与ADR伪指令在同一个代码段中.
• ARM伪指令——中等范围的地址读取
;单元,并初始化为0
• ARM汇编语言伪指令----数据定义伪操作
MAP MAP用于定义一个结构化的内存表的首地址.此时,内存 表的位置计数器设置成该地址值.该伪操作可以用"^"代替.
MAP伪操作举例
LTORG伪操作通常放在无条件跳转指令之后,或者子程
序返回指令之后,这样处理器就不会错误地将数据池中的
数据当做指令来执行.
用LTORG伪指令定义数据缓冲池举例
Funel
;子程序
LDR R1, =0x8000;将0x8000加载到R1
MOV PC, LR
LTORG
;定义数据缓冲池,存放0x8000
Data SPACE 40 ;从当前位置开始分配40字节的内存
使用示例:
height DN width SN lower FN
6 ;将VFP双精度寄存器6名称定义为height 16 ;将VFP单精度寄存器16名称定义为width 6 ;将浮点寄存器6名称定义为lower
汇编语言指令格式

汇编语言指令格式汇编语言是一种低级语言,用于编写程序,并将其转换为机器码指令以在计算机上执行。
指令格式是汇编语言中非常关键的一部分,它定义了指令的结构和使用方式。
本文将详细介绍汇编语言指令格式的各个要素,以让读者全面了解并正确运用这些指令。
1. 指令的组成一条完整的汇编语言指令由多个要素组成,包括操作码、操作数、寻址方式等。
操作码指明了要执行的操作类型,操作数则提供了操作所需的数据。
不同的指令可以有不同数量的操作数,这取决于具体的指令类型。
寻址方式则用于确定操作数的地址。
2. 操作码操作码是指令的关键部分,它表示指令要执行的操作类型。
操作码可以是二进制、十进制或十六进制的数值,具体取决于汇编语言的规范。
常见的操作码包括加载数据到寄存器、算术运算、条件判断等。
3. 操作数操作数是指令的参数,用于提供操作所需的数据。
操作数可以是寄存器、内存地址、立即数或标号等。
寄存器是一种存储数据的设备,通常用于执行算术运算和存储临时数据。
内存地址指向内存中的特定位置,操作数可以通过读取或写入内存地址来获取或修改数据。
立即数是直接给出的数值,用于进行特定的操作。
4. 寻址方式寻址方式用于确定操作数的地址。
在汇编语言中,有多种寻址方式可供选择,如寄存器寻址、直接寻址、间接寻址、相对寻址等。
不同的寻址方式适用于不同的情况。
通过选择合适的寻址方式,可以更高效地访问和操作数据。
5. 指令格式示例下面是几种常见的汇编语言指令格式示例:- 加载指令(以x86架构为例):mov destination, source其中,destination表示目标操作数,可以是寄存器或内存地址;source表示源操作数,可以是寄存器、内存地址或立即数。
- 算术运算指令:add destination, source在这个简单的示例中,add指令将源操作数与目标操作数相加,并将结果存储在目标操作数中。
- 条件判断指令:cmp operand1, operand2cmp指令用于比较两个操作数的值。
微机原理汇编常用指令

1) ADD 加法指令汇编格式:ADD 目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数2) ADC 带进位加法指令汇编格式:ADC 目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数+CF3) INC 增量指令汇编格式:INC 操作数执行的操作:(操作数)←操作数+1PS:以上三条指令都可作字或字节运算,除INC指令不影响CF标志位外,其他标志位都受指令操作结果的影响。
4) SUB 减法指令汇编格式:SUB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数5) SBB 带借位减法指令汇编格式:SBB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数-CF6) DEC 减量指令汇编格式:DEC 操作数执行的操作:(操作数)←操作数-17) NEG 求补指令汇编格式:NEG 操作数执行的操作:(操作数)←0-操作数8) CMP比较指令汇编格式:CMP 目的操作数,源操作数执行的操作:目的操作数-源操作数。
PS:以上五条指令都可作字或字节运算。
另外,除DEC指令不影响CF标志位外,其他指令都对标志位有影响。
9) MUL 无符号数乘法指令汇编格式:MUL 源操作数执行的操作:假设为字节操作(AX)←(AL)×源操作数假设为字操作(DX), (AX)←(AX)×源操作数10) IMUL 有符号数乘法指令汇编格式:IMUL 源操作数执行的操作:与MUL一样,只是处理的数据是有符号数,而MUL处理的数据是无符号数。
11) DIV 无符号数除法指令汇编格式:DIV 源操作数执行的操作:假设为字节操作:(AL)←(AX)/源操作数的商(AH)←(AX)/源操作数的余数假设为字操作:(AX)←(DX、AX)/源操作数的商(DX)←(DX、AX)/源操作数的余数商和余数均为无符号数。
12) IDIV 有符号数除法指令汇编格式:IDIV 源操作数执行的操作:与DIV一样,只是操作数是有符号数,商和余数均为有符号数,余数符号同被除数符号。
汇编指令大全

汇编指令大全(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)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
汇编指令大全+很全的汇编指令

for Addition)
1. 调整操作如下
格式: DAA
(1) 若(AL) and 0FH>9 或 AF=1
,则(AL)<--(AL)+6,AF<--1,对低
功能: 对AL中的两个组合进制数相加的结果进行调 四位的调整.
整,调整结果仍放在AL中,进位标志放在CF中.
(2) 若(AL) and 0F0H>90H 或
OPRD2为立即数,也可以是任意一 个通用寄存器操作数.立即数只 能用于源操作数.
2. OPRD1和OPRD2均为寄存器是 允许的,一个为寄存器而另一个 为存储器也是允许的, 但不允许 两个都是存储器操作数.
3. 加法指令运算的结果对CF、 SF、OF、PF、ZF、AF都会有影 响.以上标志也称为结果标志.加 法指令适用于无符号数或有符号 数的加法运算. 说明:
作数OPRD2与目的操数OPRD1交换.
2. 段寄存器内容不能用XCHG指
令来交换.
3. 若要实现两个存储器操作数 DATA1及DATA2的交换,可用以下 指令实现: 示例: PUSH DATA1
页码,1/22
星尘-易尘
PUSH DATA2 POP DATA1 POP DATA2
5 XLAT 查表指令 XLAT
注意: 上面LDS DI,[BX]指令的 功能是把BX所指的32位地址指针 的段地址送入DS,偏移地址送入
页码,2/22
星尘-易尘
12 LES
从存储器取出32位地址的指令 LES 格式: LES OPRD1,OPRD2 功能: 从存储器取出32位地址的指令.
13 ADD
加法指令 ADD(Addition) 格式: ADD OPRD1,OPRD2 功能: 两数相加
常用汇编指令

常用汇编指令汇编语言是一种机器语言的高级表示形式,其指令集是CPU所支持的指令集。
在计算机编程中,汇编语言是一种非常重要的编程语言,它可以直接操作硬件资源,实现底层控制和优化性能。
下面将介绍一些常用的汇编指令。
1. MOV指令MOV指令用于将数据从一个位置复制到另一个位置,其语法如下:MOV destination, source其中destination表示目标操作数,source表示源操作数。
例如:MOV AX, BX这条指令将BX寄存器中的值复制到AX寄存器中。
2. ADD和SUB指令ADD和SUB指令分别用于加法和减法运算,其语法如下:ADD destination, sourceSUB destination, source其中destination表示目标操作数,source表示源操作数。
例如:ADD AX, BXSUB AX, BX这两条指令分别将BX寄存器中的值加到AX寄存器中,并从AX寄存器中减去BX寄存器中的值。
3. INC和DEC指令INC和DEC指令分别用于对一个操作数进行加1或减1运算,其语法如下:INC destinationDEC destination其中destination表示目标操作数。
例如:INC AXDEC AX这两条指令分别将AX寄存器中的值加1或减1。
4. CMP指令CMP指令用于比较两个操作数的大小,其语法如下:CMP operand1, operand2其中operand1和operand2表示要比较的两个操作数。
例如:CMP AX, BX这条指令将比较AX寄存器中的值和BX寄存器中的值,并设置标志位以表示它们之间的关系。
5. JMP指令JMP指令用于无条件跳转到另一个程序地址,其语法如下:JMP address其中address表示要跳转到的地址。
例如:JMP 1000h这条指令将跳转到程序中地址为1000h处执行。
6. JZ和JNZ指令JZ和JNZ指令分别用于根据标志位进行条件跳转,其语法如下:JZ addressJNZ address其中address表示要跳转到的地址。
汇编语言指令详解

第一讲第三章 指令系统--寻址方式回顾: 8086/8088的内部结构和寄放器,地址分段的概念,8086/8088的工作进程。
重点和纲要:指令系统--寻址方式。
有关寻址的概念;6种大体的寻址方式及有效地址的计算。
教学方法、实施步骤时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等讲 授 40” ×2 提 问 3” ×2 小 结2” ×2教学内容:8086/8088寻址方式操作码 操作数 …… 操作数运算机中的指令由操作码字段和操作数字段组成。
操作码:指运算机所要执行的操作,或称为指出操作类型,是一种助记符。
操作数:指在指令执行操作的进程中所需要的操作数。
该字段除能够是操作数本身外,也能够是操作数地址或是地址的一部份,还能够是指向操作数地址的指针或其它有关操作数的信息。
寻址方式就是指令顶用于说明操作数所在地址的方式,或说是寻觅操作数有效地址的方式。
8086/8088的大体寻址方式有六种。
1.当即寻址所提供的操作数直接包括在指令中。
它紧跟在操作码的后面,与操作码一路放在代码段区域中。
如图所示。
例如:MOV AX,3000H当即数能够是8位的,也能够是16位的。
若是16位的,则存储时低位在前,高位在后。
当即寻址主要用来给寄放器或存储器赋初值。
2.直接寻址操作数地址的16位偏移量直接包括在指令中。
它与操作码—起寄存在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄放器DS加上这16位地址偏移量。
如图2-2所示。
例如:MOV AX,DS:[2000H];图2-2(对DS来讲能够省略成MOV AX,[2000H],系统默以为数据段)这种寻址方式是以数据段的地址为基础,可在多达64KB的范围内寻觅操作数。
8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。
现在只要在指令中指明是段超越的,则16位地址偏移量能够与CS或SS或ES相加,作为操作数的地址。
汇编语言指令格式

POP r16/m16/seg ; 出栈指令:
; r16/m16/seg←SS:[SP] ; SP←SP+2
• 堆栈的概念 • 堆栈的操作:进栈和出栈 • 堆栈的特点
2021/10/14
什么是堆栈
• 堆栈是一个“先进后 出”的主存区域,位 于堆栈段中,使用SS 段寄存器记录其段地 址。
2021/10/14
例:地址指针的传送
mov word ptr [3060h],0100h mov word ptr [3062h],1450h lds si,[3060h] ;ds=1450h,si=0100h les di,[3060h] ;es=1450h,di=0100h
;mem指定主存的连续4个字节作为逻辑地址( 32位的地址指针),送入DS:reg或ES:reg。
• seg —— 泛指段寄存器CS/DS/ES/SS • m8 —— 泛指8位存储器操作数单元(包括所有寻址方式)
m16 —— 泛指16位存储器操作数单元(包括所有寻址方式) mem —— 泛指m8或m16 • i8 —— 泛指8位立即数 i16 —— 泛指16位立即数 imm —— 泛指i8或i16 • dest—— 泛指目的操作数 src —— 泛指源操作数
2021/10/14
8088指令系统概述
• Intel 8088指令系统共有117条基本指令,可 分成以下 6 类:
① 数据传送类指令 ② 算术运算类指令 ③ 位操作类指令 ④ 串操作类指令 ⑤ 控制转移类指令 ⑥ 处理机控制类指令
2021/10/14
学习指令的注意事项
• 指令功能——该指令能够实现何种操作。通常指令助记符 就是指令功能的英文单词或其缩写形式。
第三章第二节thumb2指令集及汇编格式

关于存储器映射关系
仅为arm公司粗 略设计的存储器 映射图,不同厂 家根据需要,设 计自己的存储器 映射(对应)关 系,以及各存储 器的大小。
Bit-Band
处理器存储器映射包括两个bit-banding 区域。它们分 别为SRAM 和外设存储区域中的最低的1MB。
作用:将存储器别名区的一个字映射为bit-band 区的 一个位
Bit-Band
example
设置地址0x2000_0000 中的比特2,则:
bit_word_offset = (byte_offset x 32) + (bit_number × 4) =0*32+2*4=8
bit_word_addr = bit_band_base + bit_word_offset =0x22000000+8=0x2200008
时钟: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_PPPx, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_PPPx, ENABLE);
即:在别名存储区写入一个字具有对位段区的目标位 执行读-改-写操作的相同效果。
目的:所有STM32F10x外设寄存器都被映射到一个 位段(bit-band)区。在各个函数中对单个比特进行置1/ 置0操作时被大量使用,用以减小和优化代码尺寸。
Bit-Band
Bit-Band
如何对应? 映射公式:
2. 可以调用函数PPP_Deinit(..)来把外设PPP的所有寄存 器复位为缺省值: PPP_DeInit(PPP)
汇编语言-指令集

例:假设(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]
汇编语言语法

汇编语言语法
汇编语言是一种低级语言,它使用符号代表机器指令,用于编写底层程序。
以下是汇编语言的语法规则:
1. 指令格式
汇编语言的指令格式通常由操作码和操作数组成。
操作码表示要执行的操作,操作数则是指令要操作的数据。
指令格式通常如下:
操作码操作数1, 操作数2
其中,操作数可以是寄存器、内存地址或立即数。
2. 注释
汇编语言中的注释以分号(;)开头,可以在指令后面或单独一行中使用。
注释用于解释代码的作用和用途,提高代码的可读性。
3. 标号
汇编语言中的标号用于标识程序中的位置,通常用于跳转指令和数据定义。
标号以字母或下划线开头,后面可以跟数字和字母。
标号后面必须加冒号(:)。
4. 寄存器
汇编语言中的寄存器用于存储数据和执行操作。
常用的寄存器包括AX、BX、CX、DX等。
寄存器名通常以字母开头,后面可以跟数字。
5. 内存地址
汇编语言中的内存地址用于访问内存中的数据。
内存地址通常由段地址和偏移地址组成。
段地址和偏移地址可以用方括号括起来表示,例如[0x1000:0x0000]。
6. 数据定义
汇编语言中的数据定义用于定义变量和常量。
数据定义通常以关键字开头,例如DB表示定义一个字节,DW表示定义一个字。
数据定义后面可以跟变量名和初始值。
7. 跳转指令
汇编语言中的跳转指令用于改变程序的执行流程。
常用的跳转指令包括JMP、JE、JNE等。
跳转指令后面通常跟标号。
以上是汇编语言的语法规则,掌握这些规则可以编写简单的汇编程序。
汇编语言程序格式

1.2汇编语言程序的段定义
DATA_SEG1 SEGMENT PARA
DATA_SEG1 ENDS
DATA_SEG2 SEGMENT PARA
…….
DATA_SEG2 ENDS
E_SEG1
SEGMENT PARA
……..
ቤተ መጻሕፍቲ ባይዱ
E_SEG1
ENDS
E_SEG2
SEGMENT PARA
……..
E_SEG2
ENDS
ENDP 说明:过程属性项省略,系统默认为NEAR,表示段内调用, FAR 过程体至少有一条返回指令RET,RET一般放在过程体的最后。 也可以使用带参数的返回语句,如RET n。
1.3汇编语言源程序过程定义
MY_CODE SEGMENT
UP_COUNT PROC NEAR
ADDCX, 1
RET
UP_COUNT ENDP
1.2 汇编语言程序的段定义
存储器是采用分段管理方式,在编制任意源程序时亦必 须按段来构造程序。按段来构造程序有两种形式:一种是完
1.
NAME TITLE EQU EXTRN PUBLIC SEG1
SEG1 SEG2
SEG2
SEGMENT PARA STACK …… ENDS SEGMENT PARA STACK ; …… ENDS
避免多模块使用不同起始地址,只有主模块使用起始地址, 否则引起程序出错。
1.4标准程序前奏
Code_SREG1 SEGMENT‘CODE’ ASSUME CS:Code_SREG1…
MAIN PROC FAR ……… RET
MAIN ENDP Code_SREG1 ENDS
END MAIN Code_G2 SEGMENT ‘CODE’
intel汇编指令格式学习

第一节先来看看intel文档的经典图示:解释:就是说,intel指令可以在长度上不同,但是都是由以上六组构成的:(1)optional instruction prefixes (in any order)(2)one or two primary opcode bytes(3)an addressing-form specifier (if required) consisting of the ModR/M byte(4)the SIB (Scale-Index-Base) byte(5)a displacement (if required)(6)an immediate data field (if required)1.指令前缀,这个是可选的,可以没有,就是说可以有0,1,2,3,4个前缀,每一个前缀只占用一个字节,也就是说,最多有4个字节的前缀。
着五种选择有:1)。
段寄存器前缀(segment):2E,36,3E,26,64,65——CS,SS,DS,ES,FS,GS2)。
操作数长度前缀(operand-size):可以改变操作数长度663)。
地址长度前缀(address-size):可以改变地址长度674)。
重复前缀(rep/repne):F3 F25)。
总线加锁前缀(LOCK):控制处理器总线F0这样的五种,下面作出详细的说明:1)例子:8B00 MOV EAX,DWORD PTR DS:[EAX]2E:8B00 MOV EAX,DWORD PTR CS:[EAX]36:8B00 MOV EAX,DWORD PTR SS:[EAX]可以看到默认情况下是使用了DS的2)操作数前缀,允许一个程序在16/32位操作数长度之间转换,默认下市32位的,就是说,如果加前缀66H,就会转换成16位的指令:89 C0 MOV EAX,EAX66 89 C0 MOV AX,AX3)地址长度前缀,也是和2)一样的,表示16/32位的寻址方式,在win32下编程一般是不用管的:8B00 MOV EAX,DWORD PTR DS:[EAX]——32bit寻址模式67:8B00 MOV EAX,DWORD PTR DS:[BX+SI]——16bit寻址模式4)重复前缀,将会重复操作字符串的每一个元素。
intel汇编指令格式学习

第一节先来看看intel文档的经典图示:解释:就是说,intel指令可以在长度上不同,但是都是由以上六组构成的:(1)optional instruction prefixes (in any order)(2)one or two primary opcode bytes(3)an addressing-form specifier (if required) consisting of the ModR/M byte(4)the SIB (Scale-Index-Base) byte(5)a displacement (if required)(6)an immediate data field (if required)1.指令前缀,这个是可选的,可以没有,就是说可以有0,1,2,3,4个前缀,每一个前缀只占用一个字节,也就是说,最多有4个字节的前缀。
着五种选择有:1)。
段寄存器前缀(segment):2E,36,3E,26,64,65——CS,SS,DS,ES,FS,GS2)。
操作数长度前缀(operand-size):可以改变操作数长度663)。
地址长度前缀(address-size):可以改变地址长度674)。
重复前缀(rep/repne):F3 F25)。
总线加锁前缀(LOCK):控制处理器总线F0这样的五种,下面作出详细的说明:1)例子:8B00 MOV EAX,DWORD PTR DS:[EAX]2E:8B00 MOV EAX,DWORD PTR CS:[EAX]36:8B00 MOV EAX,DWORD PTR SS:[EAX]可以看到默认情况下是使用了DS的2)操作数前缀,允许一个程序在16/32位操作数长度之间转换,默认下市32位的,就是说,如果加前缀66H,就会转换成16位的指令:89 C0 MOV EAX,EAX66 89 C0 MOV AX,AX3)地址长度前缀,也是和2)一样的,表示16/32位的寻址方式,在win32下编程一般是不用管的:8B00 MOV EAX,DWORD PTR DS:[EAX]——32bit寻址模式67:8B00 MOV EAX,DWORD PTR DS:[BX+SI]——16bit寻址模式4)重复前缀,将会重复操作字符串的每一个元素。
shl汇编指令

shl汇编指令简介在计算机科学中,汇编语言是一种低级语言,它使用特定的符号和指令来表示机器代码。
SHL(Shift Left)指令是汇编语言中的一种位移指令,用于将操作数向左移动指定的位数,并根据需要在右侧填充零。
本文将详细介绍SHL指令的用法、功能和示例。
SHL指令格式SHL指令在不同的汇编语言中有不同的写法和格式,但它们都具有相似的基本结构。
下面是一个通用的SHL指令格式:SHL destination, count其中,destination表示要进行位移操作的目标操作数,可以是寄存器或内存地址;count表示要左移的位数。
具体使用时,需要根据不同的汇编语言和处理器架构来确定具体寄存器和内存地址。
SHL指令功能SHL指令将目标操作数向左移动一定数量的位数,并在右侧填充零。
它实际上是将操作数乘以2的幂次方(左移n位相当于乘以2^n)。
因此,SHL指令常用于实现高效地进行乘法运算、逻辑运算、数据压缩和位操作等功能。
SHL指令示例下面是一些使用SHL指令的示例,展示了它在不同场景下的应用。
示例1:乘法运算假设我们要将寄存器AX中的值乘以2,可以使用SHL指令来实现:MOV AX, 10 ; 将10赋值给AX寄存器SHL AX, 1 ; 将AX左移1位,相当于将AX乘以2经过这段代码执行后,AX寄存器中的值将变为20。
示例2:逻辑运算假设我们要检测一个数是否为偶数,可以利用SHL指令来进行逻辑运算:MOV AX, 5 ; 将5赋值给AX寄存器AND AX, 1 ; 将AX与1进行按位与运算经过这段代码执行后,如果AX寄存器中的最低位为0,则表示原始数为偶数;如果最低位为1,则表示原始数为奇数。
示例3:数据压缩在某些情况下,我们可能需要将多个字节的数据压缩成一个较小的字节。
可以使用SHL指令来实现这一功能:MOV AL, 0xFF ; 将0xFF赋值给AL寄存器SHL AL, 4 ; 将AL左移4位经过这段代码执行后,AL寄存器中的值将变为0xF0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令类型 指令汇编格式 指令功能简介
传送指令 MOV REG/MEM,IMM ;DEST←SRC
MOV REG/MEM/SEG,REG
MOV REG/SEG,MEM
MOV REG/MEM,SEG
交换指令 XCHG REG, REG←→REG/MEM
LES R16,MEM ;ES:R16←32位远指针
输入 IN AL/AX,I8/DX ;AL/AX←I/O端口I8/DX
输出 OUT I8/DX ,AL/AX ;I/O端口I8/DX←AL/AX
加法运算 ADD REG,IMM/REG/MEM ;DEST←DEST+SRC
ADD MEM,IMM/REG
DAS ;将AL中的减差调整为压缩BCD码
AAA ;将AL中的加和调整为非压缩BCD码
AAS ;将AL中的减差调整为非压缩BCD码
AAM ;将AX中的乘积调整为非压缩BCD码
AAD ;将AX中的非压缩BCD码转成二进制
逻辑运算 AND REG,IMM/REG/MEM ;DEST←DEST AND SRC
处理器控制 NOP 空操作指令
SEG: 段跨越前缀 除CS
HLT 停机指令
LOCK 封锁前缀
WAIT 等待指令
ESC MEM 换码指令
IMUL REG/MEM ;有符号数乘法
除法运算 DIV REG/MEM ;无符号数除法
IDIV REG/MEM ;有符号数除法
符号扩展 CBW ;将AL符号扩展为AX
CWD ;将AX符号扩展为DX.AX
十进制调整
DAA ;将AL中的加和调整为压缩BCD码
ADC REG,IMM/REG/MEM ;DEST←DEST+SRC+CF
ADC MEM,IMM/REG
INC REG/MEM ;REG/MEM←REG/MEM+1
减法运算 SUB REG,IMM/REG/MEM ;DEST←DEST-SRC
SUB MEM,IMM/REG
SBB REG,IMM/REG/MEM ;DEST←DEST-SRC-CF
TEST MEM,IMM/REG
NOT REG/MEM ;REG/MEM←
移位 SAL REG/MEM,1/CL ;算术左移1位/CL指定的位数
SAR REG/MEM,1/CL ;算术右移1位/CL指定的位数
SHL REG/MEM,1/CL ;逻辑左移1位/CL指定的位数
SHR REG/MEM,1/CL ;逻辑右移1位/CL指定的位数
JCXZ LABEL 若CX=0,则循环
子程序 CALL LABEL 直接调用
CALL R16/M16 间接调用
RET 无参数返回
RET I16 有参数返回
指令类型 指令汇编格式 指令功能简介 备 注
中断 INT I8 中断调用
INTO 溢出中断调用
IRET 中断返回
JCC LABEL 条件转移 CC可为C/NC/Z/NZ/S/NS/O/NO/B/NB/BE/NBE/L/NL/LE/NLE
循环 LOOP LABEL CX←CX-1;若CX≠0,则循环
LOOPZ/LOOPE LABEL CX←CX-1;若CX≠0且ZF=1,则循环
LOOPNZ/LOOPNE LABEL CX←CX-1;若CX≠0且ZF=0,则循环
ROL REG/MEM,1/CL ;循环左移1位/CL指定的位数
ROR REG/MEM,1/CL ;循环右移1位/CL指定的位数
RCL REG/MEM,1/CL ;带进位循环左移1位/CL指定的位数
RCR REG/MEM,1/CL ;带进位循环右移1位/CL指定的位数
串操作 MOVS[B/W] ;串传送
XCHG REG/MEM,REG
转换指令 XLAT LABEL ;AL←[BX+AL]
XLAT
堆栈指令 PUSH R16/M16/SEG ;入栈
POP R16/M16/SEG ;出栈 CS除外
标志传送 CLC ;CF←0
STC ;CF←1
CMC ;CF←
CLD ;DF←0
LODS[B/W]; 串读取
STOS[B/W]; 串存储
CMPS[B/W] ;串比较
SCAS[B/W] ;串扫描
REP ;重复前缀
REPZ/REPE 相等重复前缀
REPNZ移
JMP R16/M16 无条件间接转移
STD ;DF←1
CLI ;IF←0
STI ;IF←1
LAHF ;AH←标志寄存器低字节
SAHF ;标志寄存器低字节←AH
PUSHF ;标志寄存器入栈
POPF ;出栈到标志寄存器
地址传送 LEA R16,MEM ;R16←16位有效地址
LDS R16,MEM ;DS:R16←32位远指针
AND MEM,IMM/REG
OR REG,IMM/REG/MEM ;DEST←DEST OR SRC
OR MEM,IMM/REG
XOR REG,IMM/REG/MEM ;DEST←DEST XOR SRC
XOR MEM,IMM/REG
TEST REG,IMM/REG/MEM ;DEST AND SRC
SBB MEM,IMM/REG
DEC REG/MEM ;REG/MEM←REG/MEM-1
NEG REG/MEM ;REG/MEM← +1
CMP REG,IMM/REG/MEM ;DEST-SRC
CMP MEM,IMM/REG
;
乘法运算 MUL REG/MEM ;无符号数乘法