算术运算及对标志位的影响和逻辑运算及对标志位的影响
- 格式: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(余数)的值。
附录:。
汇编基本指令对标志位的影响算术运算指令1、加法指令1)、普通加法指令ADD ADD reg/mem,reg/mem/imm受影响标志位:AF/CF/OF/PF/SF/ZF 2)、带进位的加法ADC ADCreg/mem,reg/mem/imm受影响标志位:AF/CF/OF/PF/SF/ZF该指令和1)中唯一不同的是除了执行1)中加法外还要加上CF。
3)、加1指令INC INC reg/mem受影响标志位:AF/OF/PF/SF/ZF 4)、交换加法指令XADD XADDreg/mem,reg该指令首先交换两个操作数的值,然再做加法,相当于以下两条指令:XCHG reg/mem,reg ADD reg.mem,reg 2、减法指令[和加法指令相反]1)、普通减法SUB 2)、带借位的减法SBB除了1)中减法还有减去CF 3)、减1指令DEC 4)、求补指令NEG NEG reg/mem受影响标志位:AF/CF/OF/PF/SF/ZF执行结果:操作数=0-操作数3、乘法指令分为带符号乘法和无符号乘法,区别在于:数据的最高位是作为符号还是数值参与运算。
1)、无符号乘法MUL MUL reg/mem受影响标志位:CF/OF我们知道乘法要有乘数和被乘数,指令中只有一个操作数,所以我们必须知道第二个操作数在哪里。
Intel处理的方式是,被乘数提前存在EAX中,然后与给出的乘数相乘,结果放在规定的寄存器中:乘数位数隐含的被乘数乘积存放位置[高-低]举例8 AL AX MUL CL 16 AX DX-AX NUL CX 32 EAX EDX-EAX MUL ECX 2)、有符号乘法IMUL IMUL reg/mem受影响标志位:CF/OF其操作数都作为有符号数相乘。
4、除法指令1)无符号除法DIV reg/mem不影响标志位被除数默认存放规则如下:除数位数隐含的被除数商余数8 AX AL AH 16 DX-AX AX DX 32 EDX-EAX EAX EDX 2)有符号除法IDIV reg/mem受影响标志位:AF/CF/OF/PF/SF/ZF三、逻辑运算指令1、逻辑与AND指令AND reg/mem,reg/mem/imm受影响的标志位:CF(0)/OF(0)/SF/PF/ZF执行过程:源操作数和目的操作数进行逻辑与运算,结果存放在目的操作数。
常⽤汇编指令及其影响的标志位加法指令 ADD (addition)指令对标志位的影响:CF=1 最⾼有效位向⾼位有进位CF=0 最⾼有效位向⾼位⽆进位OF=1 两个同符号数相加(正数+正数或负数+负数),结果符号与其相反。
OF=0 两个不同符号数相加,或同符号数相加,结果符号与其相同。
带进位加法指令 ADC (add with carry)指令对标志位的影响:CF=1 最⾼有效位向⾼位有进位CF=0 最低有效位相⾼位⽆进位OF=1 两个同符号数相加,结果符号与其相反,OF=0 两个同符号数相加,或同符号相加,结果符号与其相同加1指令 INC (increament)指令对标志位的影响:对CF⽆影响OF=1 两个同符号数相加,结果符号与其相反,OF=0 两个同符号数相加,或同符号相加,结果符号与其相同。
减法指令 SUB (subtract)指令对标志位的影响:CF=1 ⼆进制减法运算中最⾼有效位向⾼位有借位(被减数⼩于减数,不够减的情况)CF=0 ⼆进制减法运算中最⾼有效为向⾼位⽆借位(被减数〉=减数,够减的情况)OF=1 两数符号相反(正数-负数,或负数-正数),⽽结果符号与减数相同。
OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
带借位减法指令 SBB (subtract with borrow)指令对标志位的影响:CF=1 ⼆进制减法运算中最⾼有效位向⾼位有借位(被减数⼩于减数,不够减的情况)CF=0 ⼆进制减法运算中最⾼有效为向⾼位⽆借位(被减数〉=减数,够减的情况)OF=1 两数符号相反(正数-负数,或负数-正数),⽽结果符号与减数相同。
OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
减1指令 DEC (decrement)指令对标志位的影响:对CF⽆影响OF=1 两数符号相反(正数-负数,或负数-正数),⽽结果符号与减数相同。
OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
传送类指令---只有SAHF、POPF影响⏹通用数据传送指令(都不影响标志位)❑MOV❑PUSH/POP❑XCHG⏹专用数据传送指令❑标志寄存器操作指令LAHF、SAHF;PUSHF、POPF(LAHF、PUSHF不影响;SAHF、POPF影响)因为SAHF POPF本身就是对标志寄存器做修改的,所以会影响;需要注意的是SAHF LAHF是字节操作,PUSHF POPF是字操作❑查表指令XLAT (不影响标志位)❑地址传送指令近LEA、远LDS (不影响标志位)❑符号扩展指令CBW、CWD (不影响标志位)❑输入/输出指令IN、OUT (不影响标志位)❑串传送类指令MOVSB、MOVSW、MOVS;LODSB、LODSW、LODS;STOSB、STOSW、STOS (不影响标志位,但是受到方向标志位DF的影响)运算类指令---这里面除了标志寄存器的位操作外,其他指令都不影响D、I、T三位⏹逻辑运算AND、OR、XOR、NOT、TEST(可以看到,DIT三位不受影响,O、C两个始终置零,A也不受影响,符号位S、零标志Z和奇偶标志P受影响,不难理解)⏹标志寄存器的位操作(Obviously,都影响)⏹移位,循环移位SAL、SHL、SAR、SHR(同样的,DIT三位不受影响,A也不受影响,其他的均受影响)循环ROL、ROR、RCL、RCR(只有进位标志C和溢出标志O受影响,因为循环移位时用了C)⏹二进制算术运算•加减基本的指令ADD/ADC/SUB/SBB/NEG/CMP/串比较系列CMPSB、CMPSW、CMPS/串扫描系列SCASB、SCASW、SCAS(以上的指令对于除DIT之外都影响)加一减一指令INC、DEC(以上两条指令对除了DIT三位和进位标志C外其他都影响)未组合BCD调整加AAA、减AAS(以上两条指令只影响辅助进位A和进位C,因为在调整过程中要用到这两位)组合BCD调整加DAA、减DAS(可以看到除了DIT三位和溢出位O不受影响)•乘除乘法MUL、IMUL(可以看到只影响溢出O与进位C)除法DIV、IDIV(可以看到都不受影响)BCD码调整AAD、AAM(符号位S、零标志Z、奇偶标志P受影响)转移指令⏹条件转移指令❑根据标志位的转移指令❑无符号数运算后的转移❑带符号数运算后的转移❑根据CX的值转移⏹循环次数控制⏹串操作次数控制前缀⏹无条件转移指令❑调用指令❑返回指令❑中断指令(这里面大部分不改变标志位,但受标志位影响,一般都是上一条是一个运算指令,经过运算标志位被改变了,跳转时就根据这时候的标志位来判断是否需要跳转)处理器控制指令---应该也不影响⏹空操作指令NOP❑格式:NOP❑一条指令耗时3T⏹CPU停等中断HLT❑格式:HLT⏹等待指令WAIT。
一、算术运算指令算术运算中的溢出问题以8位二进制数的加法为例,两个8位数相加时有4种情况:二进制运算对应的十进制运算数据作为无符号数数据作为有符号数Case1:无符号数和有符号数均不溢出0000 1000+ 0001 11100010 0110结果: 26H(38)CF=0, OF=08+ 3038未超出8位无符号二进制数表示范围+8+ (+30)+38未超出8位有符号二进制数表示范围Case2:无符号数溢出,有符号数不溢出0000 1000+ 1111 11011 0000 0101结果:5CF=1, OF=08+ 253261超出8位无符号二进制数表示范围+8+(-3)+5未超出8位有符号二进制数表示范围Case3:无符号数不溢出,有符号数溢出0000 1000+ 0111 11011000 0101结果:-123(补码)CF=0, OF=18+ 125133未超出8位无符号二进制数表示范围+8+ (+125)+133超出8位有符号二进制数表示范围Case4:无符号数和有符号数均溢出1000 1000+ 1111 01111 0111 1111结果:127CF=1, OF=1136+ 247383超出8位无符号二进制数表示范围-120+ (-9)-129超出8位有符号二进制数表示范围上面四种情况说明,算术运算溢出的判别是比较复杂的,不能只用一个标志位来判别。
算术运算溢出是一种出错状态,在运算过程中应当避免。
1 加法运算指令【例1】ADD CL,20H ;CL←(CL)+ 20HADD AX,SI ;AX←(AX)+(SI)ADD [BX+2],AL ;(BX+2)←((BX)+2)+(AL)ADD DX,[BX+SI] ;DX←(DX)+((BX)+(SI))ADD AX,CL ;错误!操作数类型应一致ADD [SI],[BX] ;错误!不允许两个操作数都是存储器ADD DS,AX ;错误!不允许把段寄存器作为操作数加法指令对全部6个状态标志位都会产生影响。
一、单项选择题(从下列每题的四个选择中选择一个正确的,填入答题纸的相应位置。
每小题2分,共30分)1.下列指令有语法错误的是__________。
A) PUSH AL B) ADDC AX,50HC) MOV [SI],[DI] D) JMP WORD PTR[BX+5]见书:35页,PUSH2.执行下列程序段后,(AX)= ________。
TAB DW 1,2,3,4,5,6ENTRY EQU 3MOV BX, OFFSET TABADD BX,ENTRYMOV AX,[BX] A) 0003H B) 0300H C) 0400H D) 0004H3.NC 指令不影响 _________标志。
A) OF B) CF C) ZF D) SF4.执行下列指令后:STR1 DW ‘AB’STR2 DB 16 DUP(?)CNT EQU $ -STR1MOV CX,CNTMOV AX,STR1HLT寄存器CL的值是________,寄存器AX的值是________。
① A) 10H B) 12H C) 0EH D) 0FH② A) 00ABH B) 00BAH C) 4142H D) 4241H5.汇编语言源程序经汇编后不能直接生成文件。
A).OBJ B).LST C).EXE D).CRF6.8086 CPU在基址加变址的寻址方式中,已知BX=2000H,SI=1234H,则指令“MOV AX,[BX+SI+2]”的源操作在中。
(A)数据段中偏移量为3236H的字节(B)数据段中偏移量为3234H的字节(C)附加段中偏移量为3236H的字节(D)附加段中偏移量为3234H的字节(A)19,20 (B)20,无右孩子(C)无左孩子,20 (D)无左孩子,无右孩子7.执行下面的程序段后,DAT1单元的值是。
DAT1 DB 12H,34HDAT2 DB 56H,78HMOV AX,WORD PTR DAT1CMP AX,WORD PTR DAT2JA DONEMOV BX,WORD PTR DAT2MOV WORD PTR DAT2,AXMOV WORD PTR DAT1,BXDONE:HLTA)12H B)34H C)56H D)78H8.下列指令中,正确的一条是。
大连东软信息学院
学生实验报告
课程名称:_ _____________
专业班级: __________________
姓名: _______________
学号_________________
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单元中;。