算术运算及对标志位的影响和逻辑运算及对标志位的影响
- 格式:doc
- 大小:264.50 KB
- 文档页数:8
第11讲3.3.2算术运算指令89C51的指令系统提供了加、减、乘、除法指令,数据运算功能较强。
指令的执行结果将使PSW中的CY、AC和OV置1或清0,加1和减1指令不影响这些标志,乘除指令不影响AC。
1加法指令(1)不带进位的加法指令ADD A,Rn ;A←A+RnADD A,direct ;A←A+(direct)ADD A,@Ri ;A←A+((@Ri))ADD A,#data ;A←A+data指令功能:源操作数与A的内容相加,和送入A。
相加的结果如果D7有进位则CY=1;如果D3有进位则AC=1;如果D6和D7只有一位产生进位则OV=1;相加和中有奇数个1则P=1,否则为0。
例3-5设A=46H,R1=5AH,试分析执行指令ADD A,R1后的执行结果以及对标志位的影响。
A=0 1 0 0 0 1 1 0 结果为偶数个1,P=0 +)R1=0 1 0 1 1 0 1 0 D3有进位,AC=10 1 1 D6、D7只有一位产生进位,OV=1A+R1=1 0 1 0 0 0 0 0 D7无进位,CY=0结果:A=A0H,R1=5AH(不变)(2)带进位的加法指令ADDC A,Rn ;A←A+Rn+CYADDC A,direct ;A←A+(direct)+CYADDC A,@Ri ;A←A+((@Ri))+CYADDC A,#data ;A←A+data+CY指令功能:源操作数与A的内容相加在与CY相加,和送入A。
注意:所加的CY是执行本指令时已经存在的CY。
本组指令对标志位的影响与ADD指令相同。
例3-6设A=85H,(20H)=FFH,CY=1,试分析执行指令ADD A,20H 后的执行结果以及对标志位的影响。
A=1 0 0 0 0 1 0 1 结果为奇数个1,P=1 (20H)=1 1 1 1 1 1 1 1 D3有进位,AC=1+) CY= 1 D6、D7都产生进位,OV=01 1 1 D7有进位,CY=1A+(20H)+CY=1 0 0 0 0 1 0 1结果:A=85H,(20H)=FFH(不变)两个16位数相加,应先进行低8位相加,为避免CY的影响,应使用ADD指令,或在使用ADDC指令之前,将CY清0;再进行高8位相加,必须使用ADDC指令。
内容目录计算机寄存器分类简介计算机寄存器常用指令一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6 个段寄存器(ES、CS、SS、DS、FS 和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU 中的寄存器相一致。
.4个16位寄存器又可分割成8个独立的8位寄存器(AX: AH-AL、BX:BH-BL、CX: CH-CL、DX: DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字 /字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register) o它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
关于标志位影响各标志位的含义如下:所有ARM数据处理指令的乘法指令均可选择使用S后缀,并影响状态标志位。
而其它指令一般不允许加S后缀,如B 、LDR、SWI、MRS等。
N 运算结果的最高位反映在该标志位。
对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;例如:执行movs r0,#0x7FFFFFFF后N=0;因为R0最高位为0 执行movs r0,#0x80000000后N=1;因为R0最高位为1执行CMP r0,r0后N=0;因为R0-R0=0x00000000;故N一般看目标寄存器的最高位,即N = Rd[31]。
Z 指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;例如:执行CMP r0,r0后Z=1执行MOVS R0,#0后Z=1故Z一般看目标寄存器的值是否为0,Rd=0时Z=1,否则Z=0。
C 当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。
当进行减法运算(包括CMP 指令),并且最高位产生借位时C=0,否则C=1。
对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;例如:执行 mov r0,#0xF0000000ADDS R0,R0,R0后C=1;执行 SUBS R2,R2,R2后C=1,因为R2-R2=0不需要借位。
执行 CMP R3,R3后C=1;执行 MOV R1,0x80000000movs r0,r1 ,lsr #32后C=1;执行 mov r0,#0x10mov r1,#0x7FFFFFFFsubs r3,R0,r1 ,lsr #1后C=0;总之,一般情况下加法进位,减法无借位时C=1;对于结合移位操作的非加/减法指令,C为最后移出的值。
V 当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。
例如:执行 mov r1,#0x80000000adds r1,r1,r1 后V=1;执行 mov r1,#0x70000000adds r1,r1,r1 或 CMN R1,R1 后V=1;执行 LDR R0,=0x8000000LDR R1,=0x7FFFFFFFCMP R0,R1 后V=1 ;总之,两个负数运算结果第31位为0,则V=1两个正数运算结果第31位为1,则V=1。
大连东软信息学院学生实验报告课程名称:_ _____________专业班级: __________________姓名: _______________学号_________________2011-- 2012 学年第 2 学期实验报告注意事项1. 课前必须认真预习实验,认真书写预习报告,了解实验步骤,未预习或预习达不到要求的学生不准参加实验;2. 实验完毕,必须将结果交实验指导教师进行检查,并将计算机正常关机、将仪器设备、用具及椅子等整理好,方可离开实验室;3. 按照实验要求书写实验报告,条理清晰,数据准确;4. 当实验报告写错后,不能撕毁,请在相连的实验报告纸上重写;5.实验报告严禁抄袭,如发现抄袭实验报告的情况,则抄袭者与被抄袭者该次实验以0分计;6. 无故缺实验者,按学院学籍管理制度进行处理;7. 课程结束后实验报告册上交实验指导教师,并进行考核与存档。
实验项目( ) —预习报告项目名称算术运算及对标志位的影响和逻辑运算及对标志位的影响实验目的及要求1、熟悉debug程序提供的常用命令;(1)掌握机器指令的编写与执行过程;(2)掌握算术运算指令的执行过程;(3)掌握标志位的作用。
2、(1)掌握逻辑运算指令的执行过程。
(2)掌握标志位的作用。
实验内容及原理1、编程进行相应的算术运算,并记录标志位的状态(以下内存单元均在数据段)。
(1)41H+3BH,结果放在2000H单元中;(2)AFH+7EH,结果放在2001H单元中;2、编程进行相应的逻辑运算,并记录标志位的状态(以下内存单元均在数据段)。
(1)5AH&A5H,结果放在2001H单元中;(2)5AH⊗00H,结果放在2003H单元中;(3)!00H,结果放在2000H单元中;预习过程中的疑问如何使用算术运算以及逻辑运算指令,在使用这些命令的过程中应该注意哪些问题实验项目( ) —实验报告项目名称算术运算及对标志位的影响和逻辑运算及对标志位的影响指导教师实验室A6-302 实验日期2012/5/15分组情况成绩实验步骤(算法、代码、方法)1、写出指令代码:例如41H+3BH;MOV AH, 41ADD AH, 3BMOV [2000], AH(1)在DEBUG下输入指令;(2)运行程序,记录运行结果及标志位状态。
CF(Carry Flag):进位标志。
当指令执行的结果(8位或16位)在最高位上产生了一个进位或借位时,CF =1。
AF(Auxiliary Carry Flag):辅助进位标志。
当一个8位数(或16位数)的低四位向高四位(即
b3向b4)有进位或借位时,AF=1。
常用于十进制算术运算指令。
OF(Overflow Flag): 溢出标志。
在算术运算中,带符号数的运算结果超出了8位或16位符号数所能表示的范围时,OF=1。
ZF(Zero Flag): 零标志。
当运算结果为全零时,ZF=1。
SF(Sign Flag): 符号标志。
当运算结果为正数,即结果的最高位为0时,SF=1。
PF(Parity Flag):奇偶标志。
当算术逻辑运算的结果中1的个数为偶数时,PF=1,为奇数时,PF=0。
DF(Direction Flag):方向标志。
用于控制数据串操作指令的步进方向,当DF=1时,表示从高地址向低地址以递减的顺序对数据串中的数据进行处理。
IF(Interrupt-enable Flag):中断允许标志。
当IF=1时,CPU可以响应外部可屏蔽中断请求。
该标志可以用指令设置为1或0。
TF(Trap Flag):陷阱标志。
当TF=1时,CPU进入单步工作方式,每执行完一条指令就自动产生一个内部中断,以便进行程序调试。
当TF=0时,正常执行程序。
电子信息工程学系实验报告——适用于计算机课程课程名称:汇编语言程序设计Array实验项目名称:掌握ADD,SUB等汇编指令及其对标志位的影响实验时间:班级:姓名:学号:实验目的:掌握ADD,SUB,MUL,IMUL,DIV,IDIV汇编算术指令以及它们对标志位的影响。
实验环境:微机一台,操作系统:WINXP2,轻松汇编实验内容及过程:输入给出程序,通过对程序的调试掌握ADD,SUB等汇编指令的操作及其对标志位的影响;编程实现Z (W*X)/(Y+6),R 余数(其中X,Y,Z,R和W均为存放16为带符号数单元的地址。
1、上机输入以下程序:code segmentmain proc farassumecs:codestart:push dsxor ax,axpush axmov ax,0dec axadd ax,7FFFHadd ax,2neg axsub ax,0FFFFHretmain endpcode endsend2、写出上面汇编程序中字体为红色的指令执行后,AX寄存器及标志位CF,SF,ZF和OF 的内容是什么?3、编程实现Z (W*X)/(Y+6),R 余数(其中X,Y,Z,R和W均为存放16位带符号数单元的地址。
实验结果及分析:2、由以上运行结果可知执行程序1的指令后,A X寄存器及标志位CF,SF,ZF和OF的内容如表格所示:neg影响CF,SF,ZF和OF;sub影响标志位CF,SF,ZF和OF。
3、在本程序中(程序2)AX(商)的值也即Z(商)的值,DX(余数)的值也即R(余数)的值。
附录:。
大连东软信息学院
学生实验报告
课程名称:_ _____________
专业班级: __________________
姓名: _______________
学号_________________
2011-- 2012 学年第 2 学期
实验报告注意事项
1. 课前必须认真预习实验,认真书写预习报告,了解实验步骤,未预习或预习
达不到要求的学生不准参加实验;
2. 实验完毕,必须将结果交实验指导教师进行检查,并将计算机正常关机、将
仪器设备、用具及椅子等整理好,方可离开实验室;
3. 按照实验要求书写实验报告,条理清晰,数据准确;
4. 当实验报告写错后,不能撕毁,请在相连的实验报告纸上重写;
5.实验报告严禁抄袭,如发现抄袭实验报告的情况,则抄袭者与被抄袭者该次
实验以0分计;
6. 无故缺实验者,按学院学籍管理制度进行处理;
7. 课程结束后实验报告册上交实验指导教师,并进行考核与存档。
(2)AFH+7EH,结果放在2001H单元
(3)1024H-50AFH,结果放在2006H和2007H单元中;
2、
写出指令代码:例如41H+3BH;
MOV AH, 41
ADD AH, 3B
MOV [2000], AH
(3)在DEBUG下输入指令;
(4)运行程序,记录运行结果及标志位状态。
(1)、5AH&A5H,结果放在2001H单元中;
(2)、5AH⊗00H,结果放在2003H单元中;
(4)!00H,结果放在2000H单元中;。