微机原理及应用实验

您所在的位置:网站首页 计算机组成原理与接口技术 微机原理及应用实验

微机原理及应用实验

2023-08-31 11:16| 来源: 网络整理| 查看: 265

多字节加减法程序 前置基础知识加法运算指令普通加法指令ADD格式操作 带进位位的加法指令ADC格式操作 加1指令INC格式操作 减法运算指令不考虑借位的减法指令SUB格式操作 考虑借位的减法指令SBB格式操作 减1指令DEC格式操作 控制寄存器 IP,FLAGSCF——进位标志位PF——奇偶标志位AF——辅助进位标志位ZF——零标志位SF——符号标志位OF——溢出标志位 加法指令详解MOV AX,0A268HMOV SI,9D1CHADD AX,SIADD AL,30HADC AX,0FFFFH

前置基础知识

上一个内容讲解:

微机原理及应用实验——MOV指令的使用详解

本文用的调试环境:

微机原理及应用实验——汇编环境MASM的使用 加法运算指令 加法指令对操作数的要求与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=0ZF=0SF=0OF=0PF=0AF=0

运行该指令后,ax的值和状态标志位都发生改变: 在这里插入图片描述 ax的值为A268,si的值为9D1C,ADD指令将两数相加,结果为13F84,并把结果赋给ax

状态标志位变为:

CF=1,运算过程有进位,所以SF被置1ZF=0,运算结果不为0,ZF保持为0SF=0,运算结果最高位不为1,SF保持为0OF=1,运算结果为5位数,AX无法存下,故溢出,所以OF被置1PF=1,运算结果的低8位中1的个数为4,即偶数,所以PF被置1AF=1,运算时,D3向D4有进位,故AF被置1 ADD AL,30H

该指令将AL的值增加30H: 在这里插入图片描述 如上图所示,AL(84H)加30H后,AL的值变为B4H

状态标志位变为:

CF=0,运算过程无进位,CF保持为1ZF=0,运算结果不为0,ZF保持为0SF=1,运算结果最高位为1,SF置1OF=0,运算结果为2位数,AL可以存下,无溢出,所以OF保持为0PF=1,运算结果的低8位中1的个数为4,即偶数,所以PF被置1AF=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置1ZF=0,运算结果不为0,ZF保持为0SF=0,运算结果最高位为0,SF保持为0OF=0,运算结果为5位数,AX无法存下,有溢出,但是,运算结果的最高位与原来的最高位一致,所以OF保持为0PF=0,运算结果的低8位中1的个数为4,即偶数,所以PF被置1AF=1,运算时,D3向D4有进位,故AF置1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3