微机原理与接口技术—— 8086 CPU 指令系统总结(2)

目录

四、逻辑运算指令

1.逻辑与指令(AND)

2.逻辑或指令(OR)

3.逻辑异或指令(XOR)

4.逻辑非指令(NOT)

5.测试指令(TEST)

五、串操作指令

1.串传送指令

2.串比较指令

3.串扫描指令

4.串存储指令

六、控制转移指令

1.无条件转移指令

JMP(Jump)指令

2.条件转移指令

1.根据标志位判断的条件转移指令

[1.根据零标志位 ZF(Zero Flag)](#1.根据零标志位 ZF(Zero Flag))

[2根据进位标志位 CF(Carry Flag)](#2根据进位标志位 CF(Carry Flag))

[3.根据符号标志位 SF(Sign Flag)](#3.根据符号标志位 SF(Sign Flag))

[4.根据溢出标志位 OF(Overflow Flag)](#4.根据溢出标志位 OF(Overflow Flag))

2.根据组合条件判断的条件转移指令

四、逻辑运算指令

1.逻辑与指令(AND)

格式:AND 目的操作数, 源操作数

功能:对目的操作数和源操作数进行按位与运算,结果存放到目的操作数中。该指令常用于清除目的操作数的某些位(将需要清除的位与 0 进行与运算)或保留目的操作数的某些位(将需要保留的位与 1 进行与运算)。

例如:AND AX, 0F0FH将 AX 寄存器中的低 4 位清零,高 12 位保持不变。

2.逻辑或指令(OR)

格式:OR 目的操作数, 源操作数

功能:对目的操作数和源操作数进行按位或运算,结果存放到目的操作数中。该指令常用于将目的操作数的某些位置 1(将需要置 1 的位与 1 进行或运算)或合并两个操作数的某些位(当两个操作数的相应位有一个为 1 时,结果位为 1)。

例如:OR AL, 03H将 AL 寄存器的低 2 位置 1,其他位保持不变。

3.逻辑异或指令(XOR)

格式:XOR 目的操作数, 源操作数

功能:对目的操作数和源操作数进行按位异或运算,结果存放到目的操作数中。该指令常用于对目的操作数的某些位取反(将需要取反的位与 1 进行异或运算)或判断两个操作数是否相等(两个操作数相等时,异或结果为 0)。

例如:XOR AX, AX将 AX 寄存器中的内容清零,因为任何数与自身异或都为 0。

4.逻辑非指令(NOT)

格式:NOT 操作数

功能:对操作数进行按位取反操作,结果存放到操作数中。该指令不影响标志位。

例如:NOT BL将 BL 寄存器中的内容按位取反。

5.测试指令(TEST)

格式:TEST 目的操作数, 源操作数

功能:对目的操作数和源操作数进行按位与运算,但不保存结果,只根据运算结果设置标志位(CF、OF、ZF、SF、PF)。该指令常用于在不改变操作数的情况下,检测某些位是否为 0 或进行条件判断。

例如:TEST AL, 01H检测 AL 寄存器的最低位是否为 0,如果为 0,则 ZF 标志位被置 1;如果不为 0,则 ZF 标志位被清 0。

五、串操作指令

1.串传送指令

MOVSB(Move String Byte)指令

功能:将源串中的一个字节数据传送到目的串中,然后自动修改源指针 SI 和目的指针 DI。如果 DF 标志位为 0,则 SI 和 DI 自动递增;如果 DF 标志位为 1,则 SI 和 DI 自动递减。

例如:在将一个字符串从源地址传送到目的地址时,可以使用MOVSB指令逐个字节地进行传送。

MOVSW(Move String Word)指令

功能:与 MOVSB 类似,只是传送的是一个字(16 位)数据。源指针 SI 和目的指针 DI 的修改方式也根据 DF 标志位确定。

2.串比较指令

CMPSB(Compare String Byte)指令

功能:比较源串和目的串中的一个字节数据,比较结果影响标志位(CF、OF、ZF、SF、PF)。然后自动修改源指针 SI 和目的指针 DI。如果 DF 标志位为 0,则 SI 和 DI 自动递增;如果 DF 标志位为 1,则 SI 和 DI 自动递减。

例如:可以用于比较两个字符串是否相等,通过依次比较每个字节并检查标志位来判断。

CMPSW(Compare String Word)指令

功能与 CMPSB 类似,比较的是一个字数据。

3.串扫描指令

(1)SCASB(Scan String Byte)指令

功能:将 AL 寄存器中的内容与目的串中的一个字节数据进行比较,比较结果影响标志位。然后自动修改目的指针 DI。如果 DF 标志位为 0,则 DI 自动递增;如果 DF 标志位为 1,则 DI 自动递减。

例如:可以用于在一个字符串中搜索特定的字节值,当找到匹配的字节时,可以根据标志位进行相应的处理。

(2)SCASW(Scan String Word)指令

功能与 SCASB 类似,将 AX 寄存器中的内容与目的串中的一个字数据进行比较。

4.串存储指令

(1)STOSB(Store String Byte)指令

功能:将 AL 寄存器中的内容存储到目的串中的一个字节单元中,然后自动修改目的指针 DI。如果 DF 标志位为 0,则 DI 自动递增;如果 DF 标志位为 1,则 DI 自动递减。

例如:可以用于将一个特定的字节值填充到一个字符串的连续字节单元中。

(2)STOSW(Store String Word)指令

功能与 STOSB 类似,将 AX 寄存器中的内容存储到目的串中的一个字单元中。

六、控制转移指令

1.无条件转移指令

JMP(Jump)指令

格式:JMP 目标地址

功能:无条件地跳转到目标地址处执行程序。目标地址可以是直接给出的立即数(相对寻址),也可以是寄存器中的内容(寄存器寻址),还可以是通过内存寻址方式得到的地址(间接寻址)。

例如:JMP 1000H直接跳转到内存地址为1000H处执行程序;JMP CX将程序转移到 CX 寄存器所指向的地址处执行。

2.条件转移指令

条件转移指令根据条件转移指令来决定是否进行转移。常见的条件转移指令有:

1.根据标志位判断的条件转移指令

1.根据零标志位 ZF(Zero Flag)

(1).JE/JZ(Jump if Equal/Zero)指令:当 ZF 标志位为 1 时(即结果为 0 或两个操作数相等),转移到目标地址。

例如:在比较两个数是否相等后,如果相等则执行 JE 指令后的代码。假设比较 AX 和 BX 寄存器中的值,如果相等则跳转到 LABEL 处执行。

CMP AX, BX

JE LABEL

(2).JNE/JNZ(Jump if Not Equal/Not Zero)指令:当 ZF 标志位为 0 时(即结果不为 0 或两个操作数不相等),转移到目标地址。

例如:在判断一个数是否为 0 时,如果不为 0 则执行 JNE 指令后的代码。假设判断 AX 寄存器中的值是否为 0。

CMP AX, 0

JNE LABEL

2根据进位标志位 CF(Carry Flag)

(1)JC/JB/JNAE(Jump if Carry/Below/Not Above or Equal)指令:当 CF 标志位为 1 时(即有进位或结果小于),转移到目标地址。

例如:在进行无符号数加法运算时,如果产生进位则跳转到特定位置处理。假设进行两个无符号数相加存放在 AX 和 BX 寄存器中。

ADD AX, BX

JC LABEL

(2)JNC/JNB/JAE(Jump if Not Carry/Not Below/Above or Equal)指令:当 CF 标志位为 0 时(即无进位或结果大于等于),转移到目标地址。

例如:在判断无符号数大小关系时,如果没有进位则执行特定代码。假设比较两个无符号数存放在 AX 和 BX 寄存器中。

CMP AX, BX

JNC LABEL

3.根据符号标志位 SF(Sign Flag)

(1)JS(Jump if Sign)指令:当 SF 标志位为 1 时(即结果为负数),转移到目标地址。

例如:判断有符号数运算结果是否为负。假设进行有符号数减法存放在 AX 寄存器中。

SUB AX, 10

JS LABEL

(2)JNS(Jump if Not Sign)指令:当 SF 标志位为 0 时(即结果为正数),转移到目标地址。

例如:在处理有符号数运算结果为正的情况。假设进行有符号数加法存放在 AX 寄存器中。

ADD AX, 10

JNS LABEL

4.根据溢出标志位 OF(Overflow Flag)

(1)JO(Jump if Overflow)指令:当 OF 标志位为 1 时(即有溢出),转移到目标地址。

例如:在进行有符号数运算时,如果产生溢出则进行特殊处理。假设进行有符号数加法存放在 AX 寄存器中。

ADD AX, BX

JO LABEL

(2)JNO(Jump if Not Overflow)指令:当 OF 标志位为 0 时(即无溢出),转移到目标地址。

例如:判断有符号数运算是否没有溢出。假设进行有符号数减法存放在 AX 寄存器中。

SUB AX, BX

JNO LABEL

2.根据组合条件判断的条件转移指令

1.高于 / 不低于且不等于转移指令 JA/JNBE(Jump if Above/Not Below or Equal):当 CF=0 且 ZF=0 时(即无进位且结果不为 0,即大于)转移。

例如:比较两个无符号数大小,如果第一个数大于第二个数则执行特定代码。假设比较 AX 和 BX 寄存器中的值。

CMP AX, BX

JA LABEL

2.高于等于 / 不低于转移指令 JAE/JNB(Jump if Above or Equal/Not Below):当 CF=0 时(即无进位,即大于等于)转移。

例如:在处理无符号数比较时,如果第一个数大于等于第二个数则执行特定代码。假设比较 AX 和 BX 寄存器中的值。

CMP AX, BX

JAE LABEL

3.低于 / 不高于且不等于转移指令 JB/JNAE(Jump if Below/Not Above or Equal):当 CF=1 时(即有进位,即小于)转移。

例如:在判断无符号数大小关系时,如果第一个数小于第二个数则执行特定代码。假设比较 AX 和 BX 寄存器中的值。

CMP AX, BX

JB LABEL

4.低于等于 / 不高于转移指令 JBE/JNA(Jump if Below or Equal/Not Above):当 CF=1 或 ZF=1 时(即有进位或结果为 0,即小于等于)转移。

例如:在处理无符号数比较时,如果第一个数小于等于第二个数则执行特定代码。假设比较 AX 和 BX 寄存器中的值。

CMP AX, BX

JBE LABEL

相关推荐
猫猫的小茶馆14 小时前
【Linux 驱动开发】一. 搭建开发环境
linux·汇编·arm开发·驱动开发·stm32·嵌入式硬件·mcu
猫猫的小茶馆15 小时前
【Linux 驱动开发】二. linux内核模块
linux·汇编·arm开发·驱动开发·stm32·嵌入式硬件·架构
切糕师学AI1 天前
ARM 中的 SVC 监管调用(Supervisor Call)
linux·c语言·汇编·arm开发
ベadvance courageouslyミ1 天前
硬件基础中断
汇编·硬件·中断
你爱写程序吗(新H)2 天前
基于单片机的洗衣机控制系统设计 单片机洗衣机控制(设计+文档)
c语言·汇编·单片机·嵌入式硬件·matlab
VekiSon2 天前
ARM架构——用汇编语言点亮 LED
汇编·arm开发·嵌入式硬件
JJCar3 天前
汇编文字池(literal pool)
汇编·文字池·literal pool
乾复道4 天前
巧用终端,每天节省2小时
汇编·经验分享·vim
2501_927773074 天前
嵌入式——汇编语言1
汇编
山峰哥4 天前
数据库工程核心:SQL调优让查询效率飙升的实战密码
网络·汇编·数据库·sql·编辑器