目录
[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))
四、逻辑运算指令
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