汇编指令大全汇总
- 格式:doc
- 大小:101.00 KB
- 文档页数:13
16位与32位汇编语言常用指令总结在计算机编程领域,汇编语言被广泛应用于底层程序设计,直接操作计算机硬件。
其中,16位和32位汇编语言是常见的两种类型。
本文将总结这两种汇编语言中常用的指令,帮助读者更好地理解和应用它们。
一、16位汇编语言常用指令1. 数据传送指令- MOV:将数据从一个寄存器或内存位置传送到另一个寄存器或内存位置。
- XCHG:交换两个寄存器或内存位置的数据。
2. 算术运算指令- ADD/SUB:实现加法和减法运算。
- MUL/IMUL:实现无符号与有符号乘法运算。
- DIV/IDIV:实现无符号与有符号除法运算。
3. 逻辑运算指令- AND/OR/XOR:实现与、或、异或逻辑运算。
- NOT:对操作数进行按位取反操作。
4. 条件转移指令- JMP:无条件跳转到指定地址。
- JZ/JNZ:根据零标志位(ZF)的值进行跳转。
- JC/JNC:根据进位标志位(CF)的值进行跳转。
5. 循环指令- LOOP:根据计数器的值进行循环。
- JCXZ/JECXZ:根据CX/ECX寄存器的值进行循环。
二、32位汇编语言常用指令1. 数据传送指令- MOV:同16位汇编语言中的指令,用于数据传送。
- PUSH/POP:将数据推入栈或从栈中弹出。
2. 算术运算指令- ADD/SUB:同16位汇编语言中的指令,用于加法和减法运算。
- MUL/IMUL:同16位汇编语言中的指令,用于乘法运算。
- DIV/IDIV:同16位汇编语言中的指令,用于除法运算。
3. 逻辑运算指令- AND/OR/XOR:同16位汇编语言中的指令,用于逻辑运算。
- NOT:同16位汇编语言中的指令,用于按位取反。
4. 条件转移指令- JMP:同16位汇编语言中的指令,用于无条件跳转。
- JZ/JNZ:同16位汇编语言中的指令,根据零标志位(ZF)进行跳转。
- JB/JNB:根据低位借位标志位(CF)进行跳转。
5. 循环指令- LOOP:同16位汇编语言中的指令,用于循环操作。
8088汇编指令表一、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.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 程序结束.详细:80X86 汇编指令符号大全+、-、*、/∶算术运算符。
汇编的基本常用指令汇编语言是一种底层的程序设计语言,主要用于编写机器码指令。
以下是一些常用的汇编指令:1. MOV:将数据从一个位置复制到另一个位置。
2. ADD:将两个操作数相加,并将结果存储在目的操作数中。
3. SUB:将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。
4. INC:将一个操作数的值增加1。
5. DEC:将一个操作数的值减少1。
6. CMP:比较两个操作数的值,并将结果影响到标志寄存器中。
7. JMP:无条件跳转到指定的代码位置。
8. JZ / JE:当指定的条件成立时,跳转到指定的代码位置(零标志或相等标志)。
9. JNZ / JNE:当指定的条件不成立时,跳转到指定的代码位置(非零标志或不相等标志)。
10. JL / JB:当源操作数小于目的操作数时,跳转到指定的代码位置(小于标志或借位标志)。
11. JG / JA:当源操作数大于目的操作数时,跳转到指定的代码位置(大于标志或进位标志)。
12. CALL:调用一个子程序或函数。
13. RET:返回子程序或函数的调用处。
14. NOP:空操作,用于占位或调整程序代码的位置。
15. HLT:停止运行程序,将CPU置于停机状态。
这里只列举了一些基本的汇编指令,实际上汇编语言有更多更复杂的指令,具体使用哪些指令取决于所使用的汇编语言和目标处理器的指令集架构。
继续列举一些常用的汇编指令:16. AND:将两个操作数进行按位与运算,并将结果存储在目的操作数中。
17. OR:将两个操作数进行按位或运算,并将结果存储在目的操作数中。
18. XOR:将两个操作数进行按位异或运算,并将结果存储在目的操作数中。
19. NOT:对一个操作数的每一位进行取反操作。
20. SHL / SAL:将一个操作数的每一位向左移动指定的位数。
对于无符号数,使用SHL指令;对于带符号数,使用SAL指令。
21. SHR:将一个操作数的每一位向右移动指定的位数,高位空出的位使用0填充。
汇编语言指令集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(MOV e)传送指令PUSH 进栈指令POP 出栈指令XCHG(eXCHanG)交换指令XLA T(TRANSLA TE)换指令LEA(Load Effective Address)有效地点送寄存器指令LDS(Load DS with pointer)指针送寄存器和DS指令LES(Load ES with pointer)指针送寄存器和ES指令LAHF(Load AH with Flags)标志位送AH指令SAHF(Store AH into Flgs) AH送标志寄存器指令PUSHF(PUSH the Flags)标志进栈指令POPF(POP the Flags)标志出栈指令ADD 加法指令ADC 带进位加法指令INC 加1指令SUB(SUBtract)不带借位的减法指令SBB(SuVtrach with borrow)带借位的减法指令DEC(DECrement)减1指领NEG(NEGate)求补指令CMP(CoMPare)相比指令MUL(unsinged MULtiple)无标记数乘法指令IMUL(sIgned MUL tiple)有标记数乘法指令DIV(unsigned DIVide)无标记数除法指令IDIV(sIgned DIVide)有标记数除法指令CBW(Count Byte to Word)字节转换为字指令CWD(Count Word to Doble word)字转换为双字指令DAA收缩的BCD加法十进制调解指令DAS 收缩的BCD减法十进制调解指令AAA 非收缩的BCD加法十进制调解指令AAS 非收缩的BCD加法十进制调解指令AND 逻辑与指令OR 逻辑或指令XOR 逻辑异或指令NOT 逻辑非指令TEST 测试指令SHL(SHift logical Letf) SHR(SHift logical Right)逻辑右移指令ROL(Rotate Left )循环左移指令ROR(Rotate Right)循环右移指令RCL(Rotate Left through Carry)带进位循环左移RCR(Rotate Right through Carry)带进位循环左移MOVS(MOV e String)串传送指令STOS(STOre into String)存进串指令LODS(LOad from string)从串取指令REP(REPeat)重双作前缀CLD(CLear Direction flag)清除偏向标志指令STD(SeT Direction flag)设置偏向标志指令CMPS(CoMPare String)串相比指令SCAS(SCAn String)串扫描指令REPE/REPZ(REPeat while Equal/Zero)相等/为零时重双作前缀REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重双前缀IN(INput)输进指令OUT(OUTput)输出指令JMP(JuMP)无条件转移指令JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 条件转移指令LOOP 循环指令LOOPZ/LOOPE 为零/相等时循环指令LOOPNZ/LOOPNE 不为零/不相等时循环指令CALL 子步骤挪用指令RET(RETun)子步骤返回指令CLC(CLear Carry)进位地位0指令CMC(CoMplement Carry)进位位求反指令SRC(SeT Carry)进位地位1指令NOP(No OPeretion)无作指令HLT(HaLT)停机指令OFFSET 返回恰恰移地点SEG 返回段地点EQU(=) 等值语句PURGE 解除语句DUP 作数字段用双制作符SEGMENT,ENDS 段界说指令ASSUME 段地点分派指令ORG 起始恰恰移地点设置指令contentnbsp; 地点计数器的卖前值PROC,ENDP 过程界说语句NAME,TITLE,END 步骤开端结束语句。
leave汇编指令汇编语言是一种低级机器语言的抽象表示,用于编写底层的系统软件和驱动程序。
在编程中,我们需要了解一些常见的汇编指令,以便能够对计算机进行底层的控制和操作。
下面是一些常见的汇编指令及其相关参考内容,供您参考。
1. MOV (Move):将数据从一个位置复制到另一个位置。
参考内容:- 操作数:寄存器、内存地址或立即数。
- 语法格式:MOV destination, source- 示例:MOV AX, BX (将BX的值复制到AX)- 参考资料:《x86汇编语言:从实模式到保护模式》2. ADD (Addition):将两个操作数的值相加,并将结果存储在目的操作数中。
参考内容:- 操作数:寄存器、内存地址或立即数。
- 语法格式:ADD destination, source- 示例:ADD AX, BX (将AX和BX的值相加,并将结果存储在AX)- 参考资料:《汇编语言程序设计》3. SUB (Subtraction):从目的操作数减去源操作数,并将结果存储在目的操作数中。
参考内容:- 操作数:寄存器、内存地址或立即数。
- 语法格式:SUB destination, source- 示例:SUB AX, BX (将AX减去BX的值,并将结果存储在AX)- 参考资料:《汇编语言程序设计:基于x86处理器》4. JMP (Jump):用于无条件跳转到程序的其他部分。
参考内容:- 操作数:跳转目标地址。
- 语法格式:JMP destination- 示例:JMP label (跳转到指定的标签位置)- 参考资料:《汇编语言程序设计》5. CMP (Compare):比较两个操作数的值,并根据比较结果设置状态寄存器中的标志位。
参考内容:- 操作数:寄存器、内存地址或立即数。
- 语法格式:CMP operand1, operand2- 示例:CMP AX, BX (比较AX和BX的值)- 参考资料:《x86 Assembly Language Programming with Ubuntu》6. JE (Jump if Equal):如果比较的结果为相等,则跳转到指定的标签位置。
x86架构汇编指令x86架构汇编指令是一种底层的机器语言指令集,用于在x86架构的计算机上执行任务。
它包含了一系列指令,用于操作寄存器、内存和其他硬件设备,以及进行算术和逻辑运算等操作。
本文将介绍几个常用的x86架构汇编指令,包括MOV、ADD、SUB和JMP。
1. MOV指令:MOV指令用于将数据从一个位置复制到另一个位置。
它的语法如下:MOV destination, source其中destination可以是一个寄存器或内存地址,source可以是一个寄存器、内存地址或立即数。
例如,MOV AX, BX将BX寄存器的值复制到AX寄存器中。
2. ADD指令:ADD指令用于将两个数相加,并将结果存储在目标位置。
它的语法如下:ADD destination, source其中destination可以是一个寄存器或内存地址,source可以是一个寄存器、内存地址或立即数。
例如,ADD AX, BX将AX寄存器的值与BX寄存器的值相加,并将结果存储在AX寄存器中。
3. SUB指令:SUB指令用于将两个数相减,并将结果存储在目标位置。
它的语法如下:SUB destination, source其中destination可以是一个寄存器或内存地址,source可以是一个寄存器、内存地址或立即数。
例如,SUB AX, BX将AX寄存器的值减去BX寄存器的值,并将结果存储在AX寄存器中。
4. JMP指令:JMP指令用于无条件地跳转到指定的地址。
它的语法如下:JMP destination其中destination可以是一个标签或地址。
例如,JMP LOOP将跳转到LOOP标签所在的位置。
除了上述指令外,x86架构汇编还包括许多其他指令,如CMP、AND、OR、NOT、XOR等,用于进行比较、逻辑运算和位操作等。
这些指令可以组合使用,以实现复杂的功能。
x86架构汇编指令的编写需要遵循一定的规范和语法。
每条指令都由一个助记符和操作数组成,它们之间用逗号隔开。
一、数据传送指令(七种助记符)MOV (Move)对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送MOVX (Move External RAM)对外部存储器的数据传送XCH (Exchange)字节交换XCHD (Exchange Low-order Digit)低半字节交换PUSH (Push onto Stack)入栈POP (Pop from Stack)出栈二、算术运算指令(8种助记符)ADD (Addition)加法ADDC (Add with Carry)带进位加法SUBB (Subtract withBorrow)带借位减法DA (Decimal Adjust)十进制调整INC (Increment)加1DEC (Decrement)减1MUL (Multiplication Multiply)乘法DIV (Division Divide)除法三、逻辑运算类指令(10种助记符)ANL (AND Logic)逻辑与ORL (OR Logic)逻辑或XRL (Exclusive-OR Logic)逻辑异或CLR (Clear)清零CPL (Complement)取反RL (Rotate left)循环左移RLC (RL throught the carry flag)带进位循环左移SWAP (Swap)低4位与高4位交换四、控制转移类指令(17种助记符)ACCALL (Absolute subroutine Call)子程序绝对调用LCALL (Long subrout Call)子程序常调用RET (Return from Interruption)子程序返回RET1 (Return from Interruption)中断返回SJMP (Short jump)短转移AJMP (Absolute jump)绝对转移LJMP (Long Jump)长转移CJNE (Compare Jump if Not Equal)比较不等则转DJNZ (Decrement Jump if Not Zero)减1不为0则转JZ (Jump if zero)结果为0则跳转JNZ (Jump if Not Zero)结果不为0则跳转JC (Jump if Not carry flag is set)有进位则转移JB (Jump if the Bit is set)位为1则转移JNB (Jump if the Bit is Not set)位为0则转移JBC (JB and Clear the bit)位为1则转并清除该位NOP (No Operation)空操作五位操作指令(1种助记符)CLR 位清零SETB (Set Bit)位置1八种常用伪指令 16位地址此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址2.【标号】DB 字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。
汇编(Asm)编程语句指令大全Assembler (Asm) programming statement, instruction daquan:[assembly Asm] assembler instruction Daquan, assembly instruction, statement DaquanMOV (MOVE) transfer instructionsPUSH stack instructionPOP out stack instructionXCHG (eXCHanG) exchange instructionsXLAT (TRANSLATE) code switching instructionLEA (Load, Effective, Address) valid address send register instructionLDS (Load, DS, pointer, with) pointers, send registers, and DS instructionsLES (Load, ES, pointer, with) pointers, send registers, and ES instructionsThe LAHF (Load, AH, with, Flags) flag sends the AH instruction SAHF (Store, AH, into, Flgs) AH send flag register instruction PUSHF (PUSH, the, Flags) flags into stack instructionsThe POPF (POP, the, Flags) flags the stack instructionsADD addition instructionADC carry addition instructionINC plus 1 instructionsSUB (SUBtract) is not subtract with borrowSBB (SuVtrach with borrow) subtract with borrowDEC (DECrement) minus 1 fingersNEG (NEGate) complement instructionCMP (CoMPare) compare instructionMUL (unsinged, MULtiple) unsigned multiply instructionIMUL (sIgned, MUL, tiple) signed multiply instructionDIV (unsigned, DIVide) unsigned division instructionIDIV (sIgned, DIVide) signed division instructionCBW (Count, Byte, to, Word) bytes are converted to word instructionsCWD (Count, Word, to, Doble, word) characters are converted into two word instructionsDAA compression BCD code addition decimal adjustment instructionDAS compression BCD code subtraction decimal adjustment instructionAAA uncompressed BCD code addition decimal adjustment instructionAAS uncompressed BCD code addition decimal adjustment instructionAND logic and instructionOR logic or instructionXOR logical XOR command不逻辑非指令试验测试指令SHL(移位逻辑与)逻辑左移指令SHR(逻辑右移)逻辑右移指令ROL(左转)循环左移指令P58ROR(转右)循环右移指令P58RCL(左带进位循环左移进行旋转)RCR(带进位右移)带进位循环左移MOV(移动字符串)串传送指令停止(存储到字符串)存入串指令检测限(负荷从字符串)从串取指令REP(重复)重复操作前CLD(明确的方向标志)清除方向标志指令STD(设置方向标志)设置方向标志指令CMPS(比较字符串)串比较指令SCAS(扫描字符串)串扫描指令缺血/ repz(而平等/零重复)相等/为零时重复操作前缀repne / repnz(而不等于零不相等/不为零进重复前缀重复)在输入指令(输入)从输出指令(输出)环循环指令P70loopz /在为零/相等时循环指令loopnz /时不为零/不相等时循环指令电话子程序调用指令RET(返回)子程序返回指令CLC(清运)进位位置0指令CMC(补充进位位求反指令携带)SRC(实现)进位位置1指令NOP(无操作)无操作指令停止(停止)停机指令返回偏移地址偏移赛格返回段地址相等(=)等值语句清除解除语句DUP操作数字段用复制操作符段,ENDS segment definition instructionASSUME segment address assignment instructionORG start offset address setting instructionCurrent value of $address counterPROC, ENDP procedure definition statementThe NAME, TITLE, and END programs begin the end statementMACRO, ENDM macro definition instruction[assembly Asm] assembler instruction Daquan, assembly instruction, statement DaquanConditional transfer instruction:JMP, JZ, JNZ, JS, JNS, JO, JNO, JP, JNP, JB, JNB, JBE, JCXZ, JNBE, JL, JNL, JLE, JNLE, and a.[assembly Asm] assembler instruction Daquan, assembly instruction, statement DaquanJMP (JuMP) unconditional transfer instructionJZ OPR results in zero transfersJNZ OPR results are not zero shiftedJS OPR results in negative metastasisJNS OPR results in positive metastasisJO OPR overflow transferJNO OPR does not overflow and transferJP OPR results are even shiftsThe JNP OPR results in an odd shiftJC OPR has carry throughJNC OPR carry nothing transfer[assembly Asm] assembler instruction Daquan, assembly instruction, statement DaquanThe function of JE is not to compare the 2 numbers, but to look at the ZF flag to decide whether to transfer it or not. Comparison is the CMP instruction.[assembly Asm] assembler instruction Daquan, assembly instruction, statement DaquanName, function, operand, operation code, modulus register 1, register 2Memory displacement, direct count, symbol direction, chip model, 16 bit, 32 bitJO overflow, jump, short $70, no nothing, no nothing, no 10,no 8086, no nothingJNO does not overflow, jump, short $71, no nothing, no nothing, 10 nothing, no 8086, no nothingJB is less than jumping, short $72, no nothing, no nothing, 10 nothing, no 8086, no nothingJNB is no less than jumping, short $73, no nothing, no nothing, 10 nothing, no 8086, no nothingJE equal jump, short $74, no nothing, no nothing, 10 nothing, no 8086, no nothingJNE jump, short, $75, no, no, no, no 10, no 8086, no nothingJBE is no higher than jumping, short $76, no nothing, no nothing, 10 nothing, no 8086, no nothingJA is higher than jumping, short $77, no nothing, no nothing, 10 nothing, no 8086, no nothingA short jump JS $78 no no no no no no 8086 No 10JNS, no negative jump, short $79, no nothing, no nothing, 10 without nothing, 8086 without nothingJP parity jump, short $7A, no, no, no, 10, no, no, 8086, noneJNP non - odd jump, short $7B, no nothing, no nothing, no 10, no 8086, no nothingJL is less than a jump, a short $7C, no nothing, no nothing, 10 nothing, no 8086, no nothingJNL is no less than jumping, short $7D, no nothing, no nothing, 10 nothing, no 8086, no nothingJNG is no greater than jumping, short $7E, no nothing, no nothing, 10 nothing, no 8086, no nothingJG is greater than the jump, short $7F, no nothing, no nothing, 10 nothing, no 8086, no nothingJO overflow jump nearly $0F80, no, no, no, 10, no, no 386, no $66JNO does not overflow, jump near $0F81, no nothing, no nothing, 10 nothing, no 386, no $66JB is less than jump, near $0F82, no nothing, no nothing, 10 nothing, no 386, no $66JNB is no less than jump, near $0F83, no nothing, no nothing, no 10, no 386, no $66JE equal jump, near $0F84, no nothing, no nothing, no 10, no 386, no $66JNE unequal jump, near $0F85, no, no, no, 10, no, no 386, no $66JBE is no higher than the jump, near $0F86, no nothing, no nothing, no 10, no 386, no $66JA is higher than jump, near $0F87, no, no, no, 10, no, no 386, no $66JS minus jump nearly $0F88 no no no no no no no $66 386 10JNS non negative jump, near $0F89, no, no, no, 10, no, no, 386, no $66JP parity jump, near $0F8A, no, no, no, 10, no, no 386, no $66JNP non parity jump, near $0F8B, no, no, no, 10, no, no 386, no $66JL is less than jump, near $0F8C, no nothing, no nothing, 10 nothing, no 386, no $66JNL is no less than jump, near $0F8D, no nothing, no nothing, no 10, no 386, no $66JNG is no larger than jump, near $0F8E, no nothing, no nothing, 10 nothing, no 386, no $66JG is greater than the jump, near $0F8F, no nothing, no nothing, no 10, no 386, no $66JO overflows, jumps near $0F80, no nothing, no nothing, 10 nothing, no 386, $66 noneJNO does not overflow, jump near $0F81, no nothing, no nothing, 10 nothing, no 386 $66, noneJB is less than jump, near $0F82, no nothing, no nothing, 10 nothing, no 386 $66, noneJNB is no less than jump, near $0F83, no nothing, no nothing, 10 nothing, no 386 $66, noneJE equal jump, near $0F84, no nothing, no nothing, 10 nothing, no 386, $66, noneJNE unequal jump, near $0F85, no, no, no, 10, no, no, 386, $66, noneJBE is no higher than jump, near $0F86, no nothing, no nothing, 10 nothing, no 386 $66, noneJA is higher than jump, near $0F87, no, no, no, 10, no, no, 386, $66, noneJS minus jump nearly $0F88 no no no no no no no 386 $66 10JNS non negative jump, near $0F89, no, no, no, 10, no, no, 386, $66, noneJP parity jump, near $0F8A, no, no, no, 10, no, no, 386, $66, noneJNP non parity jump, near $0F8B, no, no, no, 10, no, no, 386, $66, noneJL is less than jump, near $0F8C, no nothing, no nothing, 10 nothing, no 386 $66, noneJNL no less than jump, near $0F8D, no nothing, no nothing, no 10, no 386 $66, noneJNG is no larger than jump, near $0F8E, no nothing, no nothing, 10 nothing, no 386 $66, noneJG is larger than jump, near $0F8F, no nothing, no nothing, 10 nothing, no 386 $66, noneJCXZ count 160, jump shift 8 $E3, no, no, no, 10, no, no 8086, no $67JECXZ count 320, jump shift 8 $E3, no, no, no, 10, no, no 386, $67, noneJMP jump send 16 $FF 111003 no no no no 8086 no $66JMP jump send 32 $FF 111003 no no no no 386 $66 noJMP jump 16[send 16] $FF 001005 no no no no 8086 no $6766JMP jump 32[send 16] $FF 001005 no no no no 386 $66 $67JMP jump 16[send 32] $FF 001005 no no no no 386 $67 $66JMP jump 32[send 32] $FF 001005 no no no no 386 $6766 noJMP jump 16[, send 16+, shift 8], $FF 0110059, no, no, no 8086, no $6766JMP jump 32[, send 16+, shift 8], $FF 0110059, no, no, no 386, $66, $67JMP jump 16[, send 32+, shift 8], $FF 0110059, no, no, no 386, $67, $66JMP jump 32[, send 32+, shift 8], $FF 0110059, no, no, no 386, $6766 noJMP jump 16[, send 16+, shift 16], $FF 1010059, no, no, no 8086, no $6766JMP jump 32[, send 16+, shift 16], $FF 1010059, no, no, no 386, $66, $67JMP jump 16[, send 32+, shift 32], $FF 1010059, no, no, no 386, $67, $66JMP jump 32[, send 32+, shift 32], $FF 1010059, no, no, no 386, $6766 noJMP jump near 16[send 16] $FF 001005 no no no no 8086 no $6766JMP jump near 32[, send 16] $FF 001005, no, no, no 386, $66, $67JMP jump near 16[, send 32] $FF 001005, no, no, no 386, $67, $66JMP jump near 32[send 32] $FF 001005 no no no no 386 $6766 noJMP jump near 16[, send 16+ shift, 8] $FF 0110059, no no no 8086, no $6766JMP jump near 32[, send 16+ shift, 8] $FF 0110059, no, no, no 386, $66, $67JMP jump near 16[, send 32+ shift, 8] $FF 0110059, no, no, no 386, $67, $66JMP jump near 32[, send 32+ shift, 8] $FF 0110059, no, no, no 386, $6766 noJMP jump near 16[, send 16+ shift, 16] $FF 1010059, no no no 8086, no $6766JMP jump near 32[, send 16+ shift, 16] $FF 1010059, no, no, no 386, $66, $67JMP jump near 16[, send 32+ shift, 32] $FF 1010059, no, no, no 386, $67, $66JMP jump near 32[, send 32+ shift, 32] $FF 1010059, no, no, no 386, $6766 noJMP jump far 16[send 16] $FF 001015 no no no no 8086 no $6766 JMP jump far 32[send 16] $FF 001015 no no no no 386 $66 $67JMP jump far 16[send 32] $FF 001015 no no no no 386 $67 $66JMP jump far 32[send 32] $FF 001015 no no no no 386 $6766 noJMP jump far, 16[send 16+ shift, 8] $FF 0110159, no no no 8086, no $6766JMP jump far, 32[send 16+ shift, 8] $FF 0110159, no, no, no 386, $66, $67JMP jump far, 16[send 32+ shift, 8] $FF 0110159, no, no, no 386, $67, $66JMP jump far 32[send 32+ shift 8] $FF 0110159 no no no 386 $6766 noJMP jump far, 16[send 16+ shift, 16] $FF 1010159, no no no 8086, no $6766JMP jump far, 32[send 16+ shift, 16] $FF 1010159, no, no, no 386, $66, $67JMP jump far, 16[send 32+ shift, 32] $FF 1010159, no, no, no 386, $67, $66JMP jump far 32[send 32+ shift 32] $FF 1010159 no no no 386 $6766 noJMP jump short $EB no no no no 10 no no 8086 noJMP jump displacement 16, $E9 no, no, no, no 10, no 8086, no$66JMP jump shift 32 $E9 no no no no 10 no no 386 $66 noJMP jump nearly $E9, no, no, no, 10, no, no 8086, no $66JMP jump nearly $E9, no, no, no, 10, no, no 386, $66 noJMP jump far (segment address): offset 16 $EA, no, no, no, 10, no, no 8086, no $66JMP jump far (segment address): offset 32 $EA, no, no, no, 10, no, no 386, $66, noneJMP jump number segment address: offset 16 $EA no no no no 12 No 8086 no $66JMP jump number segment address: offset 32 $EA no no no no 12 No 386 $66 noJMPE jump extensions send 16, $0F00 111103, no, no, no IA64, no $66JMPE jump extensions send 32, $0F00 111103, no, no, no, IA64, $66, noneJMPE jump extensions, 16[send 16], $0F00 001105, no, no, no IA64, no $66JMPE jump extensions, 32[send 16], $0F00 001105, no, no, no, IA64, $66, noneJMPE jump extensions, 16[send 32], $0F00 001105, no, no, no IA64, no $66JMPE jump extensions, 32[send 32], $0F00 001105, no, no, no, IA64, $66, noneJMPE jump extensions, 16[send 16+, shift 8], $0F00 0111059, no, no, IA64, no $66JMPE jump extended 32[send 16+ shift 8] $0F00 0111059 no no no IA64 $66 noJMPE jump extensions, 16[send 32+, shift 8], $0F00 0111059, no, no, IA64, no $66JMPE jump extended 32[send 32+ shift 8] $0F00 0111059 no no no IA64 $66 noJMPE jump extensions, 16[send 16+, shift 16], $0F00 1011059, no, no, IA64, no $66JMPE jump extended 32[send 16+ shift 16] $0F00 1011059 no no no IA64 $66 noJMPE jump extensions, 16[send 32+, shift 32], $0F00 1011059, no, no, IA64, no $66JMPE jump extended 32[send 32+ shift 32] $0F00 1011059 no no no IA64 $66 noJMPE jump, extended displacement 16 $0FB8, no, no, no, 10, no, no IA64, no $66JMPE jump, extended displacement, 32 $0FB8, no, no, no, 10, no, no, IA64, $66, none。
一、数据传输指令 1. 通用数据传送指令.
MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI, EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX, EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里 ) XLAT 字节查表转换. ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )
2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, ) OUT I/O端口输出. ( 语法: OUT ,累加器 ) 输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, 其范围是 0-65535.
3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI.
LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI.
LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI.
4. 标志传送指令. LAHF 标志寄存器传送,把标志装入AH. SAHF 标志寄存器传送,把AH内容装入标志寄存器. PUSHF 标志入栈. POPF 标志出栈. 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,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 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 程序结束. 第一、数据寄存器(Data Register) EAX 累加寄存器(accumulator), 常用于运算;用来存放操作数,所有的I/O指令用之与外界设备传送数据。 EBX 基址寄存器(base),常用于地址索引。 ECX 计数寄存器(count),用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器。 EDX 数据寄存器(data),常用于数据传递。 EAX的低十六位就是AX, AX可分解为AH(高八位)AL(低八位)[其它类似]。
第二、址寄存器(Index Register) ESI 源变址寄存器(Source Index),用来存放相对于DS段之源变址指针。 EDI 目的变址寄存器(Destination Index),可用来存放相对于 ES 段之目的变址指针。
第三、指针寄存器(Pointer Register), EBP 基指针寄存器(Base Pointer),用它可直接存取堆栈中的数据;可用作SS的一个相对基址位置。 ESP 堆栈指针寄存器(Stack Pointer),用它只可访问栈顶;与SS配合使用。
第四、段寄存器() CS 代码段寄存器(Code Segment); DS 数据段寄存器(Data Segment); SS 堆栈段寄存器(Stack Segment); ES 附加段寄存器(Extra Segment)。 FS F段或F选择器。可作为默认段寄存器或选择器的一个替代品。可被装入任何数值,方法和DS类似。 GS G段或G选择器(G的意义和F一样,没有在Intel的文档中解释)。它和FS几乎完全一样。
第五、指令指针寄存器(Instruction Pointer) EIP 指令指针寄存器(Instruction Pointer),指向指令地址的段内地址偏移量, 又称偏移地址OA(Offset Address)或有效地址EA(Effective Address)
第六、标志寄存器 (Flag Register) EFR 标志寄存器(Flag Register),中有意义的有9位,其中6位是状态位,3位是控制位。 OF 溢出标志 (overflow flag) 如果运算结果为溢出,OF的值被置为1,否则,OF的值被清为0。 DF 方向标志(direction flag) 位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。 IF 中断允许标志(interrupt flag) 当IF=1[0] CPU可以[不]响应CPU外部的可屏蔽中断发出的中断请求; TF 跟踪标志(trap flag) 该标志可用于程序调试。为1单步执行指令,为0连续工作模式 SF 符号标志(sign flag) 运算结果为正数时,SF的值为0,否则其值为1 ZF 零标志(zero flag) 如果运算结果为0,则为1,否为0。 AF 辅助进位标志(auxiliary carry flag) 字[字节]操作发生进位或借位时为1,否则为0: PF 奇偶标志(parity flag) 如果”1”的个数为偶数,则PF的值为1,否则其值为0。 CF 进位标志(carry flag) 如果运算结果的最高位产生了一个进位或借位,那么为1,否则为0。