微机原理及应用实验——加法指令详解
多字节加减法程序
前置基础知识
上一个内容讲解:
本文用的调试环境:
加法运算指令
- 加法指令对操作数的要求与MOV指令相同
- 段寄存器不能作为加法指令的操作数
普通加法指令ADD
格式
ADD OPRD1,OPRD2
操作
OPRD1+OPRD2并把结果赋给OPRD1
ADD指令的执行对全部6个状态标志位都产生影响
带进位位的加法指令ADC
格式
ADC OPRD1,OPRD2
操作
OPRD1+OPRD2+CF并把结果赋给OPRD1
ADC指令多用于多字节数相加,使用前要先将CF清零。
加1指令INC
格式
INC OPRD
操作
OPRD+1并把结果赋给OPRD
INC指令不影响CF标志位,只影响AF、OF、PF、SF、ZF标志位
常用于在程序中修改地址指针及循环次数等
减法运算指令
减法指令对操作数的要求与对应的加法指令相同
不考虑借位的减法指令SUB
格式
SUB OPRD1,OPRD2
操作
OPRD1- OPRD2并把结果赋给OPRD1
对标志位的影响与ADD指令相同
考虑借位的减法指令SBB
指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样
格式
SUBB OPRD1,OPRD2
操作
OPRD1- OPRD2- CF并把结果赋给OPRD1
SBB指令多用于多字节减法运算,使用前要先将CF清零。
减1指令DEC
格式
DEC OPRD
操作
OPRD - 1并把结果赋给OPRD
指令对操作数的要求与INC相同
指令常用于在程序中修改循环次数
控制寄存器 IP,FLAGS
-
IP(Instruction Pointer):指令指针寄存器,用来存放代码段中指令的偏移地址。在程序运行中,IP与CS联用,以确定下一条指令的物理地址。该寄存器作为专用寄存器,一般不能用来存放其他数据
-
FLAGS:标志寄存器,主要用于反应处理器的状态和运算结果的某些特征,它是16位寄存器,但只使用其中的9位,这9位包含6个状态标志位,3个控制标志。
CF——进位标志位
当进行加(减)法运算时,若最高位向前有进(借)位,则CF=1,否则CF=0
PF——奇偶标志位
当运算结果的低8位中1的个数为偶数时PF=1,为奇数时PF=0
AF——辅助进位标志位
在加(减)法操作中,D3向D4有进位(借位)时,AF=1,否则AF=0
DAA指令和DAS指令测试这个标志位,以便在BCD加法或减法之后调整AL中的值
ZF——零标志位
当运算结果为零时,ZF=1,否则ZF=0
SF——符号标志位
当运算结果的最高位为1时SF=1,否则SF=0
OF——溢出标志位
当算数运算的结果超出了带符号数的范围,即溢出时OF=1,否则OF=0
加法指令详解
运行下列指令,并观察6个状态标志位的结果:
MOV AX,0A268H
MOV SI,9D1CH
ADD AX,SI
ADD AL,30H
ADC AX,0FFFFH
MOV AX,0A268H
运行前,ax为0000H,ip指向cs:0100
运行该命令,给ax幅值,此时ax的值为A268H
MOV SI,9D1CH
运行该指令后,给si赋值,si的值变为9D1CH
ADD AX,SI
运行该指令前:
- CF=0
- ZF=0
- SF=0
- OF=0
- PF=0
- AF=0
运行该指令后,ax的值和状态标志位都发生改变:
ax的值为A268,si的值为9D1C,ADD指令将两数相加,结果为13F84,并把结果赋给ax
状态标志位变为:
- CF=1,运算过程有进位,所以SF被置1
- ZF=0,运算结果不为0,ZF保持为0
- SF=0,运算结果最高位不为1,SF保持为0
- OF=1,运算结果为5位数,AX无法存下,故溢出,所以OF被置1
- PF=1,运算结果的低8位中1的个数为4,即偶数,所以PF被置1
- AF=1,运算时,D3向D4有进位,故AF被置1
ADD AL,30H
该指令将AL的值增加30H:
如上图所示,AL(84H)加30H后,AL的值变为B4H
状态标志位变为:
- CF=0,运算过程无进位,CF保持为1
- ZF=0,运算结果不为0,ZF保持为0
- SF=1,运算结果最高位为1,SF置1
- OF=0,运算结果为2位数,AL可以存下,无溢出,所以OF保持为0
- PF=1,运算结果的低8位中1的个数为4,即偶数,所以PF被置1
- AF=0,运算时,D3向D4无进位,故AF保持为0
ADC AX,0FFFFH
ADC是带进位位的加法指令,执行ADC AX,0FFFFH这一指令后,ax在原来值的基础上加FFFFH,再加上CF的值:
ax原来的值为3FB4H,CF值为0,加FFFFH后再加上CF的值,最后的结果为13FB3H,与上图结果一致。
状态标志位变为:
- CF=1,运算过程有进位,CF置1
- ZF=0,运算结果不为0,ZF保持为0
- SF=0,运算结果最高位为0,SF保持为0
- OF=0,运算结果为5位数,AX无法存下,有溢出,但是,运算结果的最高位与原来的最高位一致,所以OF保持为0
- PF=0,运算结果的低8位中1的个数为4,即偶数,所以PF被置1
- AF=1,运算时,D3向D4有进位,故AF置1
上一篇: MAVEN专题
下一篇: 通过MAVEN快速搭建一个项目(一)