目录
源操作数:通用寄存器、存储器、立即数。
目的操作数:通用寄存器、存储器。
注意:源操作数和目的操作数不能同时是存储器操作数。
(重点记背)加减乘除指令的操作数:

6 个算术或逻辑运算结果的特征位:

格式:ADD OPRD1,OPRD2
执行:OPRD1 + OPRD2 → OPRD1
ADD 指令的执行会影响全部 6 个状态标志位。
应用举例:
例、分析下列指令是否合法。

例、分析指令执行后 6 个状态标志位的状态。

看似我们把红色标出的进位扔掉了,实则进位到了 CF 里面。
格式:ADC OPRD1,OPRD2
执行:OPRD1 + OPRD2 + CF → OPRD1
特点:ADC 指令主要用于多字节加法运算,高 16 位或高 8 位相加时,必须考虑低 16 位或低 8 位产生的进位。
ADC 指令的执行会影响全部 6 个状态标志位。
应用举例:
例、现有两个 32 位无符号数 12345678H、8765ABCDH 相加,其和仍然为一个 32 位无符号数。要求和的高 16 位送入 DX 中,和的低 16 位送入 AX 中。

在字母开头的十六进制数前加个 0,代表这是一个数,防止与字符串混淆。
格式:INC OPRD
执行:OPRD + 1 → OPRD
特点:是单操作数指令,其目的操作数不能是立即数。
(重点记背)单操作数指令的操作数:

INC 指令的执行会影响 5 个状态标志位,除了 CF 位。
源操作数:通用寄存器、存储器、立即数。
目的操作数:通用寄存器、存储器。
注意:源操作数和目的操作数不能同时是存储器操作数。
(重点记背)加减乘除指令的操作数:

格式:SUB OPRD1,OPRD2
执行:OPRD1 - OPRD2 → OPRD1
SUB 指令的执行会影响全部 6 个状态标志位。
格式:SBB OPRD1,OPRD2
执行:OPRD1 - OPRD2 - CF → OPRD1
特点:SBB 指令主要用于多字节减法运算,高 16 位或高 8 位相减时,必须考虑低 16 位或低 8 位产生的借位。
SBB 指令的执行会影响全部 6 个状态标志位。
格式:DEC OPRD
执行:OPRD - 1 → OPRD
(重点记背)单操作数指令的操作数:

DEC 指令的执行会影响 5 个状态标志位,除了 CF 位。
因为 INC 和 DEC 均不会影响 CF 位,所以不要试图用它们来判断 CF 位的内容。
格式:NEG OPRD
执行:0 - OPRD → OPRD
老师举的例子:

NEG 指令的执行会影响全部 6 个状态标志位。
① 对进位标志 CF 的影响
只有当操作数为零时,进位标志 CF 被置零;其它情况进位标志 CF 都被置 1,即均有借位。
② 对溢出标志 OF 的影响
当字节操作数为 -128(80H)或字操作数为 -32768(8000H)时,结果将无变化,但溢出标志 OF 被置 1 。如下图所示:
实质:
格式:CMP OPRD1,OPRD2
执行:OPRD1 - OPRD2 (操作数本身不会发生变化哟~)
特点:用于比较两个数的大小,可以作为条件转移指令的转移条件。
说明:对 FLAGS 有影响的运算都可以作为条件转移指令的转移条件。
CMP 指令的执行会影响全部 6 个状态标志位。
① 比较两个无符号数的大小

② 比较两个有符号数的大小
当 A = B 时,有 ZF = 1 。
当 A > B 时:

综上,SF ⊕ OF = 0 且 ZF = 0 时,A > B 。
当 A < B 时:

综上,SF ⊕ OF = 1 且 ZF = 0 时,A < B 。
应用举例:
例、在内存数据段从 DATA1 开始的存储单元存放了两个 8 位的无符号数。试比较它们的大小,并将大的数送 MAX 存储单元。

乘法指令采用隐含寻址,隐含的是存放被乘数的累加器 AL、AX 及存放结果的 AX、DX 。
执行:
对操作数的要求:OPRD 为通用寄存器或存储器,不能为立即数。
(重点记背)单操作数指令的操作数:

特点:若运算结果的高半部分(AH 或 DX)是无效数值,则 OF = CF = 0,否则 OF = CF = 1。
说人话就是:按理说 8 位 × 8 位得到一个 16 位,但是有些结果用 8 位就能表示,因此其高半部分是无效数值。
格式:MUL OPRD
执行:
特点:若结果的 AH(字节运算)或 DX(字运算)为全 0,则 CF = OF = 0,否则 CF = OF = 1。
MUL 只会影响 CF 位和 OF 位。
格式:IMUL OPRD
执行:
特点:若结果的 AH(字节运算)或 DX(字运算)为低半部分的符号扩展,则 CF = OF = 0,否则 CF = OF = 1。
说人话就是:若两数同号,则高半部分为全 0;若两数异号,则高半部分为全 1 。
除法指令要求被除数的字长必须是除数的两倍;
除法指令采用隐含寻址,若除数为 8 位,则被除数为 AX;若除数为 16 位,则被除数高位在 DX 中,低位在 AX 中。
对操作数的要求:OPRD 为通用寄存器或存储器,不能为立即数。
(重点记背)单操作数指令的操作数:

格式:
执行:
除法指令对标志位均无影响。