欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微机原理及应用实验——加法指令详解

程序员文章站 2022-06-20 10:44:36
...

前置基础知识

上一个内容讲解:

本文用的调试环境:

加法运算指令

  • 加法指令对操作数的要求与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

  1. IP(Instruction Pointer):指令指针寄存器,用来存放代码段中指令的偏移地址。在程序运行中,IP与CS联用,以确定下一条指令的物理地址。该寄存器作为专用寄存器,一般不能用来存放其他数据

  2. 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