微机原理与接口技术—— 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

相关推荐
Crossoads2 天前
【汇编语言】端口 —— 「从端口到时间:一文了解CMOS RAM与汇编指令的交汇」
android·java·汇编·深度学习·网络协议·机器学习·汇编语言
雪碧透心凉_4 天前
8086汇编(16位汇编)学习笔记00.DEBUG命令使用解析及范例大全
汇编
C66668887 天前
C#多线程
开发语言·汇编·c#
傻童:CPU8 天前
汇编源程序的理解
汇编
木槿718 天前
软件包git没有可安装候选
汇编·git
ok0608 天前
各种开源汇编、反汇编引擎的非专业比较
汇编·开源
roboko_8 天前
MIPS指令集(一)基本操作
汇编
Crossoads9 天前
【汇编语言】内中断(三) —— 中断探险:从do0到特殊响应的奇妙旅程
android·开发语言·javascript·网络·汇编·单片机·机器学习
染指11109 天前
49.第二阶段x86游戏实战2-鼠标点击call深追二叉树
汇编·c++·windows·游戏安全·反游戏外挂·游戏逆向
程序leo源11 天前
深入理解指针
android·c语言·开发语言·汇编·c++·青少年编程·c#