### INTEL 汇编指令集 #### Intel 8086 家族架构 Intel 8086 是一款16位微处理器,由Intel公司在1978年推出,是8085微处理器的后继产品,并且开创了x86架构的基础。8086家族包括了一系列处理器,例如8088、80186、80286、80386以及80486等。 - **8088/8086有效地址(EA)计算**:在8086家族中,通过段寄存器与偏移地址的组合来计算实际内存地址。有效地址是指在访问内存时使用的地址,它可以通过多种方式形成,如直接寻址、寄存器间接寻址、基址加变址寻址等。 - **任务状态计算**:涉及到任务管理器如何保存和恢复任务状态,特别是在多任务环境中。 #### 标志寄存器 (FLAGS) 标志寄存器是Intel 8086家族中的一个重要的16位寄存器,用于存储各种标志位,这些标志位反映了算术运算的结果或者控制某些处理器的行为。 - **CF (Carry Flag)**:进位标志位,进行算术运算时如果结果超过了寄存器的最大值,则CF会被置1。 - **PF (Parity Flag)**:奇偶标志位,用于指示最近一次操作结果中的1的个数是否为偶数。 - **AF (Auxiliary Carry Flag)**:辅助进位标志位,在进行字节操作时,如果低四位有进位则AF被置1。 - **ZF (Zero Flag)**:零标志位,如果上一次的操作结果为零,则ZF被置1。 - **SF (Sign Flag)**:符号标志位,用于表示结果的符号。 - **TF (Trap Flag)**:陷阱标志位,在调试模式下可以用来单步执行程序。 - **IF (Interrupt Flag)**:中断标志位,当IF被置1时,允许外部硬件中断。 - **DF (Direction Flag)**:方向标志位,用于字符串操作指令中决定移动的方向。 - **OF (Overflow Flag)**:溢出标志位,用于指示是否有溢出发生。 #### MSW - 机器状态字 (286+) 对于286及以后的处理器,MSW(Machine Status Word)是一个特殊寄存器,用于存储额外的状态信息,如处理器的工作模式、保护级别等。 #### INTEL 汇编指令集 Intel 8086家族的指令集非常丰富,以下是一些常用的指令: - **AAA - Ascii Adjust for Addition**:ASCII加法调整指令,用于将无符号十进制数转换成ASCII码格式。 - **AAD - Ascii Adjust for Division**:ASCII除法调整指令,用于将无符号十进制数转换成ASCII码格式。 - **AAM - Ascii Adjust for Multiplication**:ASCII乘法调整指令,用于将无符号十进制数转换成ASCII码格式。 - **AAS - Ascii Adjust for Subtraction**:ASCII减法调整指令,用于将无符号十进制数转换成ASCII码格式。 - **ADC - Add With Carry**:带进位加法指令,对两个操作数加上CF标志位的值进行加法运算。 - **ADD - Arithmetic Addition**:算术加法指令,对两个操作数进行加法运算。 - **AND - Logical And**:逻辑与指令,按位执行逻辑与操作。 - **ARPL - Adjusted Requested Privilege Level of Selector (286+ PM)**:调整请求特权等级的指令,用于在保护模式下调整选择符的请求特权等级。 - **BOUND - Array Index Bound Check (80188+)**:数组索引边界检查指令,用于检查索引是否超出数组范围。 - **BSF - Bit Scan Forward (386+)**:向前位扫描指令,查找第一个设置为1的位的位置。 - **BSR - Bit Scan Reverse (386+)**:向后位扫描指令,查找最后一个设置为1的位的位置。 - **BSWAP - Byte Swap (486+)**:字节交换指令,用于改变字或双字数据的字节顺序。 - **BT - Bit Test (386+)**:位测试指令,用于检测指定位置的位是否被设置。 - **BTC - Bit Test with Compliment (386+)**:位测试并取反指令,用于检测并反转指定位置的位。 - **BTR - Bit Test with Reset (386+)**:位测试并清除指令,用于检测并清除指定位置的位。 - **BTS - Bit Test and Set (386+)**:位测试并设置指令,用于检测并设置指定位置的位。 - **CALL - Procedure Call**:过程调用指令,用于调用子程序。 - **CBW - Convert Byte to Word**:字节到字转换指令,将一个字节扩展为一个字。 - **CDQ - Convert Double to Quad (386+)**:双字到四字转换指令,将一个双字扩展为一个四字。 - **CLC - Clear Carry**:清除进位指令,清空CF标志位。 - **CLD - Clear Direction Flag**:清除方向标志指令,清空DF标志位。 - **CLI - Clear Interrupt Flag (disable)**:禁止中断指令,清空中断标志位IF。 - **CLTS - Clear Task Switched Flag (286+ privileged)**:清除任务切换标志指令,在特权模式下清除TS标志位。 - **CMC - Complement Carry Flag**:进位标志取反指令,反转CF标志位的值。 - **CMP - Compare**:比较指令,比较两个操作数并更新标志位。 - **CMPS - Compare String (Byte, Word or Doubleword)**:比较字符串指令,比较两个字节、字或双字字符串。 - **CMPXCHG - Compare and Exchange**:比较并交换指令,用于原子操作。 - **CWD - Convert Word to Doubleword**:字到双字转换指令,将一个字扩展为一个双字。 - **CWDE - Convert Word to Extended Doubleword (386+)**:字到扩展双字转换指令,将一个字扩展为一个扩展双字。 - **DAA - Decimal Adjust for Addition**:十进制加法调整指令,用于调整加法后的结果,使其符合BCD编码。 - **DAS - Decimal Adjust for Subtraction**:十进制减法调整指令,用于调整减法后的结果,使其符合BCD编码。 - **DEC - Decrement**:减一指令,将操作数减一。 - **DIV - Divide**:除法指令,执行无符号整数除法。 - **ENTER - Make Stack Frame (80188+)**:创建堆栈帧指令,用于创建一个过程调用的堆栈帧。 - **HLT - Halt CPU**:暂停CPU指令,使CPU进入等待状态。 - **IDIV - Signed Integer Division**:带符号整数除法指令,执行带符号整数除法。 - **IMUL - Signed Multiply**:带符号乘法指令,执行带符号整数乘法。 - **IN - Input Byte or Word From Port**:输入端口指令,从端口读取一个字节或字。 - **INC - Increment**:增一指令,将操作数加一。 - **INS - Input String from Port (80188+)**:从端口输入字符串指令,从端口读取一系列字节。 - **INT - Interrupt**:中断指令,触发软件中断。 - **INTO - Interrupt on Overflow**:溢出中断指令,当有溢出发生时触发中断。 - **INVD - Invalidate Cache (486+)**:无效化缓存指令,用于清空处理器缓存。 - **INVLPG - Invalidate Translation Look-Again Buffer Entry (486+)**:无效化转换旁路缓冲区条目指令,用于清空TLB。 - **IRET/IRETD - Interrupt Return**:中断返回指令,用于从中断处理程序返回。 - **Jxx - Jump Instructions Table**:跳转指令表,包含多个条件跳转指令。 - **JCXZ/JECXZ - Jump if Register (E)CX is Zero**:如果(CE)CX寄存器为零则跳转指令。 - **JMP - Unconditional Jump**:无条件跳转指令,用于实现无条件转移。 - **LAHF - Load Register AH From Flags**:从标志寄存器加载AH指令,将标志寄存器的部分值加载到AH寄存器。 - **LAR - Load Access Rights (286+ protected)**:加载访问权限指令,在保护模式下加载访问权限。 - **LDS - Load Pointer Using DS**:使用DS加载指针指令,从内存加载DS:SI指向的描述符到DS和SI寄存器。 - **LEA - Load Effective Address**:加载有效地址指令,计算并加载操作数的有效地址。 - **LEAVE - Restore Stack for Procedure Exit (80188+)**:恢复堆栈以退出过程指令,用于恢复堆栈指针。 - **LES - Load Pointer Using ES**:使用ES加载指针指令,从内存加载ES:DI指向的描述符到ES和DI寄存器。 - **LFS - Load Pointer Using FS (386+)**:使用FS加载指针指令,在386及以上处理器中从内存加载FS:EDI指向的描述符到FS和EDI寄存器。 - **LGDT - Load Global Descriptor Table (286+ privileged)**:加载全局描述符表指令,在特权模式下加载全局描述符表。 - **LIDT - Load Interrupt Descriptor Table (286+ privileged)**:加载中断描述符表指令,在特权模式下加载中断描述符表。 - **LGS - Load Pointer Using GS (386+)**:使用GS加载指针指令,在386及以上处理器中从内存加载GS:EDI指向的描述符到GS和EDI寄存器。 - **LLDT - Load Local Descriptor Table (286+ privileged)**:加载局部描述符表指令,在特权模式下加载局部描述符表。 - **LMSW - Load Machine Status Word (286+ privileged)**:加载机器状态字指令,在特权模式下加载机器状态字。 - **LOCK - Lock Bus**:锁定总线指令,用于独占访问共享资源。 以上列举的只是部分INTEL汇编指令集中的指令,通过这些指令,程序员能够精确地控制处理器的运行,实现各种复杂的操作。在实际编程中,还需要结合具体的应用场景灵活运用这些指令。
- 粉丝: 0
- 资源: 27
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助