算术运算指令教案

算术运算指令教案
算术运算指令教案

教案首页

C6代表D6位向D7位的进位

2、带进位加法指令(4条):

ADDC A,Rn ;(A)←(A)+(Rn)+Cy ADDC A,direct ;(A)←(A)+(direct)+Cy ADDC A,@Ri ;(A)←(A)+((Ri))+Cy

C6代表D6位向D7位的借位

?在减法过程中:Cy、C6、AC都发生借位,故它们全为1,OV= Cy⊕C6=0,

?如果程序中48H和5CH两个数被看作无符号数,则计算结果错误,因为Cy=1果48H和5CH两个数被看作有符号数,则因OV=0,无溢出发生,结果正确,因为

–2、减1指令(4条):

?DEC A ;(A)←(A)-1

?DEC direct ;(direct)←(direct)-1

?DEC Rn ;(Rn)←(Rn)-1

?DEC @Ri ;((Ri))←((Ri))-1

3算术运算指令实验

2.3 算术运算指令实验 一、实验目的 ·掌握单字节的加减法指令的使用。 ·掌握单字节的乘除法指令的使用。 ·掌握用Keil调试汇编源程序的方法。 ·掌握用Proteus调试汇编源程序的方法。 二、实验预备知识 算术运算指令对程序状态寄存器PSW中的相关位会产生不同的影响。具体如下:◇执行加法指令时,当和的第3位或第7位有进位时,分别将AC、CY标志位置1;否则为O。如果第6位向第7位有进位而第7位没有向前进位,或者如果第7位向前有进位而第6位没有向第7位进位,OV=1,否则OV-O。该操作也影响标志位P。 ◇执行减法指令时,如果第7位有借位,则CY置1,否则清O。若第3位有借位,则 AC置1;否则清O。两个带符号数相减,还要考查OV标志,若OV为1,表示差数溢出,即破坏了正确结果的符号位。该操作也影响标志位P。 ◇执行乘法指令时,若乘积大子OFFH,则OV置1,否则清o(此时B的内容为0)。 CY总是被清O。该操作也影响标志位p。 ◇执行除法指令时,若除数(B) -OOH.则结果无法确定,OV置l。CY总是被清O。该操作也影响标志位P。 三、实验内容 将算术运算指令分成两类,分别编写两个小程序,以完成数据的加减法、乘除法运算。 1.参考程序i-hn减法运算 (1)将立即数# B5H、#36H、#89H分别传送至内部RAM区40H、R2、A中。 (2)将内部RAM区40H中的内容与A中的内容相加,然后再与R2中的内容相加,结果存放至内部RAM区50H中。 (3)将A中的内容与内部RAM区40H中的内容相减,结果存放至内部RAM区60H中。 2.参考程序2——乘除法运算 (1>将立即数#75H、#31H分别传送至内部RAM区15H、33H中。 (2)将内部RAM区15H单元的内容与33H单元的内容相乘。 (3)将乘积的高8位和低8位分别传送至内部RAM区31H、30H中。 (4)将内部RAM区15H单元的内容除以33H单元的内容。 (5)将商和余数分别传送至内部RAM区41H、40H中。四、实验参考程序

第八讲 算术运算类指令

第八讲算术运算类指令 教学方法:讲授法 教学目的: 1、熟悉数据运算类指令的操作方式特点 2、理解二-十进制调整指令的含义 3、熟练掌握加法指令 教学重点、难点: 加法、减法指令、二-十进制调整指令 无条件转移指令的应用 主要教学内容(提纲): 一、数据运算类指令的操作方式特点 二、算术运算类指令 三、逻辑运算类指令 复习: direct、@Ri、@DPTR、Rn、#data、(x)、((x))的含义? 讲授要点 §3-3 算术运算类指令 包括:加、减、乘、除;加一、减一。 一、加法指令 ADD A,Rn ;(A)(A)+ (Rn)以下类同。 ADD A,direct ADD A,@Ri ADD A,#data 无符号数相加时:若C = 1,说明有溢出(其值> 255)。 带符号数相加时:若OV = D7c⊕D6c = 1,说明有溢出。 ADDC A,Rn ;(A)(A)+(Rn)+(C),以下类同。ADDC A,direct ADDC A,@Ri ADDC A,#data 上述四条指令多用于多字节数相加。 INC A ;(A)(A)+1 ,以下类同。 INC Rn INC direct INC @Ri INC DPTR 例1、设(R0)= 7FH;(7EH)= 40H

执行:INC @R0 INC R0 INC @R0 后, (R0)= 7FH; (7EH)= 00H; (7FH)= 41H. DA A ;二——十进制调整指令。 执行过程中,CPU能根据加法运算后,累加器中的值和PSW中的AC及C标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二——十进制调整。 选择修正值的规则: (A3 ~ 0)> 9时或(AC)= 1时,(A3 ~ 0)(A3 ~ 0)+6 (A7 ~ 4)> 9 或(C) = 1时,(A7 ~ 4)(A7 ~ 4)+ 6 例2、设(A)= 56H 为56的压缩的BCD码数,(R3)= 67H,(CY)=1 执行ADDC A,R3 DA A 结果为:124 注意:1)DA指令只能跟在加法指令后面使用; 2)调整前参与运算的两数是BCD码数; 3)DA指令不能与减法指令配对使用,但可以实现对A中压缩BCD 减一操作。 例3、设(A)=30H(压缩BCD码数),执行: ADD A,#99H DA A 后,便实现了30 -1 = 29的操作。 例4、两个4位BCD码相加,一个存放在(31H)(30H);另一个存放在 (33H)(32H);和数拟回存在(31H)(30H)中,试编程实现之。 解:MOV R0,#30H MOV R1,#32H MOV A,@R0 ADD A,@R1 DA A MOV @R0,A INC R0 INC R1 MOV A,@R0 ADDC A,@R1 DA A MOV @R0,A 二、减法指令 SUBB A,Rn ;(A)(A)-(Rn)-(C),以下类同。 SUBB A,direct SUBB A,@Ri SUBB A,#data

实验二 算术运算实验

实验二算术运算实验 一、实验目的 1、掌握MASM for Windows 环境下的汇编语言编程环境使用; 2、掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 3、掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志 位的影响及测试方法; 4、掌握无符号数和有符号数运算区别及编程方法; 5、掌握BCD 码调整指令的使用方法 二、软硬件实验环境 1、硬件环境:惠普64 位一体化计算机及局域网; 2、软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。 三、实验基本原理 算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。 1) 标志位 在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。 表1标志名和状态符号的对照表参照表 2) 加减法指令 ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。 3) 乘除法指令

MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV 表示带符号数除法指令。 4) 符号位扩展指令 CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。 5) BCD码的调整指令 在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。 组合的BCD码加法调整指令DAA; 组合的BCD码减法调整指令DAS; 非组合的BCD码加法调整指令AAA; 非组合的BCD码减法调整指令AAS; 乘法的非组合BCD码调整指令AAM; 除法的非组合BCD码调整指令AAD。 8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示内容。 表2数据类型的数据运算表 四、实验步骤与内容 1)对于表格中三组无符号数,试编程求这三组数的指定运算结果,并考虑计算结果对标志寄存器中状态标志位的影响: ①实验分析 本实验要求简单,仅对指定三组数进行基本运算。只需使用ADD、SUB、MUL、DIV四个运算命令,并以MOV命令作为数值转移的手段即可。运算结果和状态标志的情况可以通过debug调试中的T命令进行逐步查看。 需要注意的主要有以下几点: 1.在进行加法和乘法运算时,会出现对高位的进位扩展。因此,在记录结

练习(算术运算及逻辑移位指令3题目)

练习 算术运算与逻辑移位指令 1、若AX=0ABCDH,BX=7F8FH,CF=1。分别执行0886 CPU指令 (1)ADD AX,BX (2)ADC AX,BX (3)SBB AX,BX (3)NEG AX (5)AND AX,BX (6)OR AX,BX (7)XOR AX,BX (8)IMUL BL 后,AX寄存器中的内容,并指出标志寄存器SF、ZF、AF、PF、CF及OF的状态。 2、若CX=6700H,DX=78FFH,CF=1,求分别执行指令 (1)ADD CX,DX (2)ADC CX,DX (3)SUB CX,DX (4)SBB CX,DX (5)AND CX,DX (6)OR CX,DX (7)XOR CX,DX 后,CX和DX中的内容。并指出标志寄存器SF、ZF、AF、PF、CF和OF的状态。 3、X,Y分别为下列各组数,当它们分别进行加、减、AND、OR、XOR运算后,其标志位,SF、OF、CF、PF、ZF的状态如何? (1)X=21H;Y=43H (2)X=9AH;Y=0BCH (3)X=48H;Y=8DH (2)X=54H;Y=54H 4、若AX=98ABH,BX=A8BCH,求执行指令ADD AX,BX后,AX与BX中的内容,并指出SF、ZF、AF、PF、CF和OF的状态。 5、针对下列各条指令执行后的结果,填入目的操作数的值及标志位的状态。 6、若AX=FFF8H,BX=FFFAH,求执行IMUL BX后,DX与AX中的内容,并指出标

志位OF与CF的状态。 7、若AX=FFFEH,BX=FFFDH,求执行指令IMUL BX后,DX与AX中的内容。指出标志位OF与CF的状态。 8、设AL=85H,BL=2AH,均为带符号数,求指令 IMUL BL的执行结果。 9、若AL=78H,BL=87H, (1)求执行指令 ADD AL,BL DAA 之后,AL=?标志位AF=?CF=?并说明BCD码调整情况。 (2)若执行指令SUB AL,BL与DAS后,情况又如何? 10、若AL=75H,BL=48, (1)求执行指令 ADD AL,BL DAA 之后,AL=?标志位AF=?CF=?并说明BCD码调整情况。 (2)若执行指令SUB AL,BL与DAS后,情况又如何? 11、若有一个4字节数,放在寄存器BX间址的内存中(低地址对应低字节),要求这个4字节整数整个左移一位如何实现?右移一位又如何实现? 12、若有一个四字节数,放在寄存器DX与AX中(DX放高16位),要求这个四字节数整个左移一位如何实现?右移一位又如何实现? 13、分别编写一程序使 (1)AX寄存器高3位清0; (2)BX寄存器高3位置1; (3)CX寄存器高4位取反; (4)DX寄存器高3位不变,其余位清0。

熟悉并使用算术逻辑操作类指令

微处理器原理课实验日志 一、实验题目:熟悉并使用算术逻辑操作类指令 二、实验结果 本次实验的目的是为了让我们熟悉算术运算类指令,熟悉逻辑运算类指令,掌握算术运算类指令对标志位的影响。本次实验分为验证性和操作性,对于验证性实验要求在自己理解程序的基础上去运行程序,查看运行结果。操作性实验要求自己编写程序实现相关要求,最后运行查看结果。 第一个程序是验证性(加法减法指令),代码为: MOV A,#12H MOV R0,#24H MOV 21H,#56H ADD A,#12H MOV DPTR,#4316H ADD A,DPH ADD A,R0 CLR C SUBB A,DPL SUBB A,#25H INC A SETB C ADDC A,21H

INC R0 SUBB A,R0 MOV 24H,#16H CLR C ADD A,@R0 此程序的功能为:熟悉加法减法指令,尤其是ADD与ADDC、还有就是在SUBB中注意什么时候Cy标志位清零的运用;DPH、DPL 的运用等。最后在没有运行程序之前对程序进行简单的运算,累加器A中的数据是0xE0=#83H,程序运算结果如下: 按照实验要求第二个程序代码为: MOV 30H,#34H MOV 31H,#2AH MOV 32H,#0FAH MOV 33H,#48H MOV R0,#30H MOV A,@R0 INC R0 MOV B,@R0 MUL AB MOV R1,A MOV R2,B MOV A,@R0 INC R0 MOV B,@R0 DIV AB MOV R3,A MOV R4,B

本程序的重点是分析乘法中高八位存在B寄存器中和低八位存在累加器A中,除法运算A累加器中存放的是商,B寄存器中存放的余数。所以,分析得到乘法运算中A累加器中存放的是88H,B寄存器中存放是08H;除法运算中A累加器存放的是00H,B寄存器中存放的是2AH.程序运算的结果如下: 按照第三个程序是移位指令代码为: MOV A,#39H CPL A RL A CLR C RRC A SETB C RLC A SWAP A 此程序的运行结果应该是:0C6H、8DH、46H、8DH、D8H。 操作性实验,按照要求书写代码如下:

Maple 常用计算命令

Maple 常用计算命令 《Maple 指令》7.0版本 第1章章数 1.1 复数 Re,Im - 返回复数型表达式的实部/虚部 abs - 绝对值函数 argument - 复数的幅角函数 conjugate - 返回共轭复数 csgn - 实数和复数表达式的符号函数 signum - 实数和复数表达式的sign 函数5 1.2 MAPLE 常数 已知的变量名称 指数常数(以自然对数为底) I - x^2 = -1 的根 infinity 无穷大 1.3 整数函数 ! - 阶乘函数 irem, iquo - 整数的余数/商 isprime - 素数测试 isqrfree - 无整数平方的因数分解 max, min - 数的最大值/最小值 mod, modp, mods - 计算对 m 的整数模 rand - 随机数生成器 randomize - 重置随机数生成器 1.4 素数 Randpoly, Randprime - 有限域的随机多项式/首一素数多项式ithprime - 确定第i个素数 nextprime, prevprime - 确定下一个最大/最小素数 1.5 数的进制转换 convert/base - 基数之间的转换 convert/binary - 转换为二进制形式 convert/decimal - 转换为 10 进制 convert/double - 将双精度浮点数由一种形式转换为另一种形式convert/float - 转换为浮点数 convert/hex - 转换为十六进制形式 convert/metric - 转换为公制单位 convert/octal - 转换为八进制形式 1.6 数的类型检查 type - 数的类型检查函数 第2章初等数学 2.1 初等函数 product - 确定乘积求和不确定乘积 exp - 指数函数

8086指令系统之算术运算类指令

8086 指令系统之算术运算类指令 2007-04-17 07:51 1 加法指令 1.1 加法指令 ADD ADD reg,imm/reg/mem ;reg←reg+imm/reg/mem ADD mem,imm/reg ;mem←mem+imm/reg 2.17a: 例 2.17a:加法运算 mov add mov mov add add al,0fbh ;al=0fbh al,07h ;al=02h word ptr[200h],4652h ;[200h]=4652h bx,1feh ;bx=1feh al,bl ;al=00h word ptr[bx+2],0f0f0h ;[200h]=3742h
ADD 指令按照状态标志的定义相应设置这些标志的 0 或 1 状态。例如 在 07+FBH→02H 运算后:标志为 OF=0、SF=0、ZF=0、AF=1、PF=0、CF=1;用调 试程序单步执行后,上述标志状态依次为 NV、PL、NZ、AC、PO、CY。 同样进行 4652h+f0f0h→3742H 运算后,标志为 OF=0、SF=0、ZF=0、 AF=0、PF=1、CF=1;调试程序依次显示为 NV、PL、NZ、NA、PE、CY。注意,PF 仅反映低 8 位中“1”的个数,AF 只反映 D3 对 D4 位是否有进位。 1.2 带进位加法指令 ADC ADC reg,imm/reg/mem ;reg←reg+imm/reg/mem+CF ADC mem,imm/reg ;mem←mem+imm/reg+CF ;mem←mem+imm/reg+CF 加法运算外, CF, ADC 指令除完成 ADD 加法运算外,还要加进位 CF,其用法及对状态标志的 指令一样。 影响也与 ADD 指令一样。ADC 指令主要用于与 ADD 指令相结合实现多精度 数相加。 数相加。 2.17b: 例 2.17b:无符号双字加法运算 mov ax,4652h ;ax=4652h add ax,0f0f0h ;ax=3742h,CF=1 mov dx,0234h ;dx=0234h adc dx,0f0f0h ;dx=f325h,CF=0 上述程序段完成 DX.AX = 0234 4652H + F0F0 F0F0H = F325 3742H。 1.3 增量指令 INC INC reg/mem ;reg/mem←reg/mem+1 增量)。 INC 指令对操作数加 1(增量)。

算术和逻辑运算指令

第5章算术和逻辑运算指令 罗文坚 中国科大计算机学院 https://www.360docs.net/doc/4c324024.html,/~wjluo/mcps/

本章内容 ?加法、减法和比较指令 ?乘法和除法指令 ?BCD码和ASCII码算术运算指令?基本逻辑运算指令 ?移位和循环移位指令 ?串比较指令

加法格式ADD REG/MEM, REG/MEM/IMM 功能源操作数、目的操作数相加,结果存入目的操 作数 标志所有状态标志(ZF、CF、PF、AF、SF 及OF)都受影响 带进位加格式ADC REG/MEM, REG/MEM/IMM 功能源操作数、目的操作数以及进位标志CF相加,结果存入目的操作数 标志所有状态标志(ZF、CF、PF、AF、SF 及OF)都受影响

加1格式INC REG/MEM 功能目的操作数加1 标志除CF标志位,其余状态标志都受影响 交换并相加格式XADD REG/MEM, REG 功能(80486以上)源操作数和目的操作数相交换,并将两者之和存入目的操作数 标志所有状态标志都受影响,根据加法结果设置

?加法指令注意事项: 1.源操作数和目的操作数不能同时为内存单元 (MEM)。 2.不允许与段寄存器(SREG)相关的加法。 3.XADD指令的源操作数在寄存器(REG)中。 4.标志寄存器中状态位随运算结果而变化,但INC 指令不影响CF标志。 5.指令中操作数是带符号数还是无符号数由程序员 解释。 注意:第4章的数据传送指令不改变状态标志。

Example 1 ?例、试用加法指令对两个8位16进制数5EH 和3CH 求和,并分析加法运算指令执行后对标志位的影响。 ?解:MOV AL, 5EH ;AL=5EH (94) MOV BL, 3CH ;BL=3CH (50) ADD AL, BL ;结果AL=9AH 101010011100001111100101 运算后标志:ZF=0, AF=1, CF=0, SF=1, PF=1, OF=1。 ?若程序员认为两个加数是无符号数,则运算结果位9AH ,即154。 ?此时,SF 标志和OF 标志没有意义。 ? 若程序员认为两个加数是有符号数,则运算溢出,结果无效。?此时,CF 标志没有意义。

算术运算指令

◆算数类指令经常会影响标志位,搞清楚以下两个概念: ?对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是0还是1) ?对标志没有影响:指令执行不改变标志状态 ◆注意有符号数进行计算是用其补码进行计算的,有符号数在计算机里是以补码的形式 进行存储的!!!!! ◆使用内存地址为寻址方式时,一定要用伪指令指明操作数类型。 ?加法类(带符号数相加要考虑溢出): 1.加法指令ADD(ADD 目的操作数,源操作数;将源与目的操作数相加,结果送到目的操 作数) 目的操作数:reg,mem 源操作数:imm,reg,mem 注意: 1.存储器之间不能相加。 2.根据结果对相应的标志位作出改变,即,影响标志位!!! 2.带进位加法指令ADC(ADD 目的操作数,源操作数;将源、目的操作数与CF标志位相加,结果送到目的操作数) 目的操作数:reg,mem 源操作数:imm,reg,mem 注意: 1. 存储器之间不能相加。 2. 根据结果对相应的标志位作出改变,即,影响标志位!!! 3. ADC指令主要与ADD配合,实现多精度加法运算。 4. CF是本指令执行前的状态 ?多精度加法运算示例 mov ax,4652h ;ax=4652h add ax,0f0f0h ;ax=3742h,CF=1 mov dx,0234h ;dx=0234h adc dx,0f0f0h ;dx=f325h,CF=0 ;DX.AX=0234 4652H +F0F0 F0F0H =F325 3742H 3.增量指令INC(increment;INC指令对操作数加1(增量);INC reg/mem) 操作数:reg/mem 注意: 1.不影响进位CF标志,按定义设置其他状态标志。(仅不影响CF,还会影响其他) 2.主要用于对计数器和地址指针的调整,而不用来做单纯的算术计算。 3.当使用存储器操作数时,不得出现二义性。 ?减法类: 4.减法指令SUB(目的操作数减去源操作数,结果送到目的操作数;sub 目的操作数,源 操作数) 目的操作数:reg,mem 源操作数:imm,reg,mem 注意:

实验二 算术逻辑运算及移位操作

实验二算术逻辑运算及移位操作 一、实验目的 1.熟悉算术逻辑运算指令和移位指令的功能。 2.了解标志寄存器各标志位的意义和指令执行对它的影响。 二、实验预习要求 1.复习8086指令系统中的算术逻辑类指令和移位指令。 2.按照题目要求在实验前编写好实验中的程序段。 三、实验任务 1.实验程序段及结果表格如表1.2: 表1.2 标志位CF ZF SF OF PF AF 程序段1: MOV AX, 1018H MOV SI, 230AH ADD AX, SI ADD AL, 30H MOV DX, 3FFH ADD AX,BX MOV [20H], 1000H ADD [20H], AX PUSH AX POP BX 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 程序段2: MOV AX, 0A0AH ADD AX, 0FFFFH MOV CX, 0FF00H ADC AX, CX SUB AX, AX INC AX 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0

OR CX, 0FFH AND CX, 0F0FH MOV [10H], CX 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 程序段3: MOV BL, 25H MOV BYTE PTR[10H], 4 MOV AL, [10H] MUL BL 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 程序段4: MOV WORD PTR[10H],80H MOV BL, 4 MOV AX, [10H] DIV BL 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 程序段5: MOV AX, 0 DEC AX ADD AX, 3FFFH ADD AX, AX NOT AX SUB AX, 3 OR AX, 0FBFDH AND AX, 0AFCFH SHL AX ,1 RCL AX ,1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 0 0 1 1 0 2.用BX 寄存器作为地址指针,从BX 所指的内存单元(0010H)开始连续存入三个无符号数(10H 、04H 、30H),接着计算内存单元中的这三个数之和,和放 在0013H 单元中,再求出这三个数之积,积放0014单元中。写出完成此功能的 程序段并上机验证结果。 3.写出完成下述功能的程序段。上机验证你写出的程序段,程序运行的最后结果(AX)=? (1) 传送15H 到AL 寄存器; 2题答案 MOV BX.10H MOV CX,BX INC BX MOV SI,BX INC BX MOV AX,[CX] ADD AX,[BX] ADD AX,[SI] MOV [13H],AX MOV AX,[CX] MUL WORDPTR[BX] MUL WORDPTR[SI] MOV [14H],AX F 10H 12H 10H 4H 30H

三菱PLC四则运算指令ADD

算术运算包括ADD,SUB,MUL,DIV(二进制加、减、乘、除)指令,源操作数可取所有的数据类型,目标操作数可取KnY , KnM , KnS , T , C , D , V, 和Z,,32位乘除指令中V和Z不能用个目标操作数。 每个数据的最高位为符号位(0为正,1为负),所有的运算均为代数运算。在32位运算中被指定的字编程元件为低位字,下一个字编程为高位字。为了避免错误,建议指定操作元件时采用偶数元件号。如果目标元件与源元件相同,为避免每个扫描周期都执行一次指令,就采用脉冲执行方式。 如果运算结果为0,零标志M8020置1;运算结果超过32767(16位运算)或2147483647(32位运算),进位标志M8022置1;运算结果小于—32768(16位运算)或—2147483648(32位运算),借位标志M8021置1。 如果目标操作数(如KnM)的位数小于运算结果,将只保存运算结果的低位。例如运算结果为二进制11001(十进制数25),指定的目标操作数为K1Y4 (由Y4 ~ Y7 组成的4位二进制数),实际上只能保存低位的二进制数1001(十进制数9)! 令M8023为ON,可用算术运算指令作32位浮点数运算。 加法指令ADD: 加法指令ADD(Addition)将源元件的二进制数相加,结果送到指定的目标元件。 实际例子分析:

减法指令: 减法指令SUB(Subtraction)将[S1]指定的元件中的数减去[S2]指定的元件中的数,结果送到[D]指定的目标元件。

下面是一个实际例子: 乘法指令: 16位乘法指令MUL(Multiplication)将源元件中的二进制数相乘,结果(32位)送到指定的目标元件。32位乘法的结果为64痊。目标位元件(如KnM)的位数如果小于运算结果的位数,只能保存结果的低位。

算术表达式求值的运算符优先算法。C语言完整代码

#include #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 # define TRUE 1 # define FALSE 0 typedef int Status; typedef char SElemType; typedef struct { SElemType *base; SElemType *top; int stacksize; }StackChar; //sequence序列 typedef struct { float *base; float *top; int stacksize; }StackFloat; //sequence序列 Status InitStack(StackChar **S){ //初始化空桟 *S=(StackChar *)malloc(sizeof(StackChar)); (*S)->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!(*S)->base) exit(OVERFLOW); (*S)->top=(*S)->base; (*S)->stacksize=STACK_INIT_SIZE; return OK; }// InitStack(&S); Status initStack(StackFloat **S){ //初始化空桟 *S=(StackFloat *)malloc(sizeof(StackFloat)); (*S)->base=(float *)malloc(STACK_INIT_SIZE*sizeof(float)); if(!(*S)->base) exit(OVERFLOW); (*S)->top=(*S)->base; (*S)->stacksize=STACK_INIT_SIZE; return OK; }// initStack(&S); Status Pop(StackChar **S,SElemType *a){ if((*S)->top==(*S)->base) {printf("ERROR!\n"); return ERROR; } *a=*(--(*S)->top);

51单片机算术运算指令

1.程序状态字PSW MCS-51有一个程序状态字寄存器PSW,用来保存指令执行结果的标志,供程序查讯和判别。PSW是特殊功能寄存器中的一个,其格式如下: PSW7--既是布尔处理机的累加器C,又是进位标志CY,如果操作结果在最高位有进位输出(加法时)或借位输入(减法时),置位CY,否则清“0”CY。 AC--辅助进位(半进位)标志。如果操作结果的低4位有进位(加法时)或向高4位借位时(减法),置AC,否则清“0”AC,AC主要用于二-十进制数加法调整。 OV--溢出标志。如果操作结果有进位进入最高位,但最高位没有产生进位,或者最高位产生进位而低位没有向最高位进位,这时置位溢出标志位,否则OV清“0”。溢出标志位用于补码运算,当有符号的数运算结果不能用8位二进制数表示时,OV将置位。 P--累加器A的奇偶标志位,如果累加器A的8位的模2和为1(奇),则P=1;否则P=0。由于P总是表示A的奇偶性,随着A的内容变化的,所以一个值写入PSW的P位的值不变。RS1、RS0--指示当前使用的工作寄存器区。 F0--用户标志位。可作为软件标志,它的作用和内部RAM位寻址区的各位相似。 PSW1--保留位,对它的操作无效。 2.加法指令 ?1、不带进位加法指令 工作寄存器、内部RAM单元内容或立即数的8位无符号二进制数和累加器A中数相加,所得和存放于累加器A中,当和的第3、7位有进位时,分别将AC,CY标志位置1;否则为0。上述指令的执行将影响标志位AC、CY、OV、P。 对于无符号数,进位标志位CY=1,表示溢出;CY=0表示无溢出。带符号数运算的溢出取决于第6、7位中有一位产生进位,而另一位不产生进位,溢出标志位OV置“1”否则被清“0”。OV=1表示两个正数相加,和变为负数,或两个负数相加,和变为正数的错误结果。 源操作数有四种寻址方式:寄存器、直接、间接和立即数。 ?2、带进位加法指令: 这是四条带进位的加法指令。将累加器A内容加当前CY标志位内容,再加无符号单字节的数,和存于累加器A中。当运算结果第3、7位产生进位溢出时,则分别置位AC、CY和OV 标志位。本指令执行将影响标志位AC、CY、OV、P。 本指令常用于多字节加法。

算术运算指令

一、算术运算指令 算术运算中的溢出问题 以8位二进制数的加法为例,两个8位数相加时有4种情况: 二进制运算对应的十进制运算 数据作为无符号数数据作为有符号数 Case1: 无符号数和有符号数均不溢出0000 1000 + 0001 1110 0010 0110 结果: 26H(38) CF=0, OF=0 8 + 30 38 未超出8位无符号二 进制数表示范围 +8 + (+30) +38 未超出8位有符号二 进制数表示范围 Case2: 无符号数溢出,有符号数不溢出0000 1000 + 1111 1101 1 0000 0101 结果:5 CF=1, OF=0 8 + 253 261 超出8位无符号二进 制数表示范围 +8 +(-3) +5 未超出8位有符号二 进制数表示范围 Case3: 无符号数不溢出,有符号数溢出0000 1000 + 0111 1101 1000 0101 结果:-123(补码) CF=0, OF=1 8 + 125 133 未超出8位无符号二 进制数表示范围 +8 + (+125) +133 超出8位有符号二进 制数表示范围 Case4: 无符号数和有符号数均溢出1000 1000 + 1111 0111 1 0111 1111 结果:127 CF=1, OF=1 136 + 247 383 超出8位无符号二进 制数表示范围 -120 + (-9) -129 超出8位有符号二进 制数表示范围 上面四种情况说明,算术运算溢出的判别是比较复杂的,不能只用一个标志位来判别。算术运算溢出是一种出错状态,在运算过程中应当避免。 1 加法运算指令 【例1】 ADD CL,20H ;CL←(CL)+ 20H ADD 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】试分析以下两条指令执行后的状态: MOV AL,7EH ADD AL,5BH 分析:我们用手工的方法来模拟以上两条指令的执行,如下 0111 1110 + 0101 1011 1101 1001

单片机算数运算指令

不带进位位的单片机加法指令 ADD A,#DATA ;例:ADD A,#10H ADD A,direct ;例:ADD A,10H ADD A,Rn ;例:ADD A,R7 ADD A,@Ri ;例:ADD A,@R0 用途:将A中的值与其后面的值相加,最终结果否是回到A中。例:MOV A,#30H ADD A,#10H 则执行完本条指令后,A中的值为40H。 下面的题目自行练习 MOV 34H,#10H MOV R0,#13H MOV A,34H ADD A,R0 MOV R1,#34H ADD A,@R1 带进位位的加法指令 ADDC A,Rn ADDC A,direct

ADDC A,@Ri ADDC A,#data 用途:将A中的值和其后面的值相加,并且加上进位位C中的值。 说明:由于51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围只有0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位的数学运算合起来,成为一个16位的运算,这样,能表达的数的范围就能达到0-65535。如何合并呢?其实很简单,让我们看一个10进制数的例程: 66+78。 这两个数相加,我们根本不在意这的过程,但事实上我们是这样做的:先做6+8(低位),然后再做6+7,这是高位。做了两次加法,只是我们做的时候并没有刻意分成两次加法来做罢了,或者说我们并没有意识到我们做了两次加法。之所以要分成两次来做,是因为这两个数超过了一位数所能表达的范置(0-9)。 在做低位时产生了进位,我们做的时候是在适当的位置点一下,然后在做高位加法是将这一点加进去。那么计算机中做16位加法时同样如此,先做低8位的,如果两数相加产生了进位,也要“点一下”做个标记,这个标记就是进位位C,在PSW中。在进行高位加法是将这个C加进去。例:1067H+10A0H,先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是7,而1则到了PSW中的CY位了,换言之,CY就相当于是100H。然后再做10H+10H+CY,结果是21H,所以最终的结果是2107H。 带借位的单片机减法指令 SUBB A,Rn SUBB A,direct SUBB A,@Ri SUBB A,#data

dsp实验1-基本算数运算

电子科技大学通信与信息工程学院标准实验报告 实验)课程名称DSP 设计与实现 电子科技大学教务处制表

电子科技大学 实验报告 一、实验室名称:DSP 实验室 二、实验项目名称:基本算术运算 三、实验学时:4 四、实验原理: (1)定点DSP 中数据表示方法 C54X 是16 位的定点DSP。一个16 位的二进制数既可以表示一个整数,也可以表示一 个小数。当它表示一个整数时,其最低位(D0)表示20,D1 位表示21,次高位(D14)表 示214。如果表示一个有符号数时,最高位(D15)为符号位,0 表示正数, 1 表示负数。例如,07FFFH表示最大的正数32767(十进制),而0FFFFH表示最大的负数-1(负数用 2 的补码方式显示)。当需要表示小数时,小数点的位置始终在最高位后,而最高位(D15)表示符 号位。这样次高位(D14)表示2 1,然后是2 2,最低位(D0)表示2 15。所以04000H 表示小数0.5 ,01000H表示小数2 3 0.125 ,而0001H表示16 位定点DSP能表示的最小的小数(有符号)2 15=0.000030517578125 。在后面的实验中,除非有特别说明,我们指的都是有符号数。在C54X中,将一个小数用16 位定点格式来表示的方法是用215乘以该小数,然后取整。 从上面的分析可以看出,在DSP中一个16 进制的数可以表示不同的十进制数,或者是 整数,或者是小数(如果表示小数,必定小于1),但仅仅是在做整数乘除或小数乘除时, 系统对它们的处理才是有所区别的,而在加减运算时,系统都当成整数来处理。 2)实现16 定点加法

相关文档
最新文档