项目单元480C51定点数运算程序设计实训.ppt_第1页
项目单元480C51定点数运算程序设计实训.ppt_第2页
项目单元480C51定点数运算程序设计实训.ppt_第3页
项目单元480C51定点数运算程序设计实训.ppt_第4页
项目单元480C51定点数运算程序设计实训.ppt_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目单元4 80C51定点数运算程序设计实训,4.1训练要求 1编写程序实现两个16位数的减法:7F4DH2B4EH,结果存入内部RAM的30H和31H单元,30H单元存差的高8位,31H单元存差的低8位。 2编写程序实现两个数的乘积运算,要求(R1R0)(R0)=(R5R4R3) 4.2训练目的 使学生能够灵活运用算术运算指令进行数据加、减、乘、除运算操作 4.3相关知识 项目学习情境1 算术运算指令 1加法指令 (1) 不带进位的加法指令,ADD加法指令的目的操作数是A,运算结果存放在A和Cy中。最高位有进位时,Cy=1,否则 Cy=0。加法指令除影响Cy外,还影响PSW的其他标志位,如AC、OV和P。,(2) 带进位的加法指令,指令的功能是把源操作数与累加器A的内容相加再与进位标志CY的值相加,结果送入目的操作数A中。加的进位标志CY的值是在该指令执行之前已经存在的进位标志的值,而不是执行该指令过程中产生的进位。 (3)BCD码调整指令 DA A 指令的功能是对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整。两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的压缩BCD码的和。调整要完成的任务是: 当累加器A中的低4位数出现了非BCD码(10101111)或低4位产生进位(AC=1),则应在低4位加6调整,以产生低4位正确的BCD结果。 当累加器A中的高4位数出现了非BCD码(10101111)或高4位产生进位(CY=1),则应在高4位加6调整,以产生高4位正确的BCD结果。 2.减法指令,减法指令的功能是将A中的数据减去源操作数中的数据和Cy,差存放在A中,运算过程影响PSW的标志位:CY、AC、P、OV。由于减法指令在执行时都会减Cy,在第一次执行减法操作时必须保证此时的Cy=0,否则,运算结果时错误的。 3.乘法指令 MUL AB ;累加器A与B寄存器相乘 该指令的功能是将累加器A与寄存器B中的无符号8位二进制数相乘 ,乘积的低8位留在累加器A中,高8位存放在寄存器B中。 当乘积大于FFH时,溢出标志位(OV)=1。而标志CY总是被清0。 例:若(A)=50H,(B)=A0H,执行指令 MUL AB 之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。 4.除法指令 DIV AB ;累加器A除以寄存器B 该指令的功能是将累加器A中的无符号8位二进制数除以寄存器B中的无符号8位二进制数,商的整数部分存放在累加器A中,余数部分存放在寄存器B中。当除数为0时,则结果的A和B的内容不定,且溢出标志位(OV)=1。而标志CY总是被清0。 例:若(A)=FBH(251),(B)=12H(18),执行指DIV AB 之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。,项目学习情境2 指令应用举例 1加法指令举例 【例4-1】 已知两个双字节无符号数,分别存放在R0R1和R2R3中(高位在前),试编写程序求它们的和,结果存放在R6R4R5中。 AA:MOV A,R1 ;取一个加数的低8位 ADD A,R3 ;与另外一个数的低8位相加 MOV R5,A ;存低8位的和 MOV A,R0 ;取一个加数的高8位 ADDC A,R2 ;高8位相加,并加低8位相加时的Cy MOV R4,A ;存高8位的和 CLR A ;A清0 ADDC A,#0 ;0+0+Cy A,取出高8位相加时的Cy MOV R6,A ;存进位 RET 多字节数相加运算,应预先分析结果可能占用的空间,分配足够的单元存放,本例中两个16位的无符号数相加的和可能会超过16位,就要占用3个字节。 对于有符号数的多字节加法,当采用补码形式的时候,程序和无符号数基本相同,只是在最高字节运算后,不是判别Cy,而是判断OV。当OV=1时,表示有符号数的运算超出了范围,这时可以将原先的两个有符号数扩充一个高字节,然后再编程计算。正数扩充高字节为00H,负数扩充的高字节为FFH。,【例4-2】已知两个字节有符号数(补码),分别存放在R1R0和R3R2中(高位在前),试编写程序求它们的和,结果存放在R5R4中。 START:MOV A,R0 ;取一个加数的低8位 ADD A,R2 ;与另外一个数的低8位相加 MOV R4,A ;存低8 位的和 MOV A,R1 ;取一个加数的高8 位 ADDC A,R3 ;高8位相加,并加低8位相加时的Cy MOV R5,A ;存高8位的和,需要判断OV RET 注意下面两条指令的区别: INC A ADD A,#1 这两条指令都实现将A中的数加1.第一条指令只影响PSW的标志位P,第二条指令会影响PSW的标志位:Cy、AC、OV、P。在有些情况下不能互换使用,后面的减法指令存在类似的情况。 【例4-3】已知一个原码表示的双字节有符号数(非负零)存放在R1R0(高位在前)中,试编写程序求它的补码,结果存放在R1R0中。 求一个表示的数的补码,首先要知道这个数的符号,正数的补码与原码相同,负数再按照求补的过程去运算。,START:MOV A,R1 ;取高8位 JNB ACC.7,AA ;高位为0,表示正数转移,不需变换 MOV A,R0 吗 ;取低8位 CPL A ;求反 ADD A,#1 ;加1 MOV R0,A ;存低8位 MOV A,R1 ;取高8位 CPL A ;求反 ADDC A,#0 ;加低8位的进位 SETB ACC.7 ;高位置1,负数 MOV R1,A ;存高8位 AA:RET 这个程序中的加1只能用ADD指令,因为要考虑低8位加1后的进位。 【例4-4】 已知两个BCD码表示的数,分别存放在R0R1和R2R3中(高位在前),试编写程序求它们的和,结果存放在R6R4R5中。,AA:MOV A,R1 ;取一个加数的低8位 ADD A,R3 ;与另外一个数的低8位相加 DA A ;低位和BCD码调整 MOV R5,A ;存低位的和 MOV A,R0 ;取一个加数的高8位 ADDC A,R2 ;高8位相加,并加低8位相加时的Cy DA A ;高位和BCD码调整 MOV R4,A ;存高位的和 CLR A ;A清0 ADDC A,#0 ;0+0+CyA,取出高8位相加时的Cy MOV R6,A ;存进位 RET 2减法指令举例 【例4-5】 已知两个双字节数,被减数存放在R0R1,减数存放在R3R2中(高位在前),试编写程序求它们的差,结果存放在R5R4中。 STRAT:CLR C ;清Cy MOV A,R0 ;取被减数的低8位 SUBB A,R2 ;减去减数的低8位 MOV R4,A ;存低8位的差 MOV A,R1 ;取被减数的高8位 SUBB A,R3 ;减去减数的高8位和低8位的借位 MOV R5,A ;存高8位的差 RET,3乘法指令举例 【例4-6】 已知两个无符号数分别存放在R1R0和R2中,试编写程序计算它们的积,结果存放在R5R4R3(高位在前)。 START:MOV A,R0 ;取被乘数的低8位 MOV B,R2 ;乘数 MUL AB ;相乘 MOV R3,A MOV R4,B ;存放积 MOV A,R1 ;取被乘数的高8位 MOV B,R2 ;乘数 MUL AB ;相乘 ADD A,R4 ;错位相加 MOV R4,A ;和回存 CLR A ;清A ADDC A,B ;进位加到高字节中 MOV R5,A ;存高字节 RET 4除法指令举例 【例4-7】 已知8位的二进制数存放在R0中,试编写程序将其转换为十进制数存放在R3R2R1中(高位在前)。 在单片机中十进制数只能以BCD码的形式存在,单字节的二进制数的范围为0255,若需要求出它的百位、十位和个位,就用它去除以100,商就是百位,余数再除以10,就得到十位数和个位数。程序如下:,START: MOV A,R0 ;二进制数送A作为被除数 MOV B,#100 ;除数100 DIV AB ;执行除法 MOV R3,A ;百位数送R3 MOV A,B ;余数送A作为被除数 MOV B,#10 ;除数10 DIV AB ;执行除法 MOV R2,A ;十位数送R2 MOV R1,B ;个位数送R1 RET 【例4-8】已知被除数在R1R0中,除数在R2中,试编写程序来求它们的商,结果存放在R4R3中(高位在前)。 解题思路:用被除数减除数,如果够减,商加1.再减除数,直到不够减为止,每减一次,商就加1,这样就可以求出商。程序如下:,START:MOV R4,#0 ;商高位清0 MOV R3,#0 ;商低位清0 AA:CLR C ;清Cy MOV A,R0 ;被除数低位 SUBB A,R2 ;减除数低位 MOV R0,A ;低位差回送 MOV A,R1 ;被除数高位 SUBB A,#0 ;减除数高位(0) MOV R1,A ;高位差回送,JC BB ;不够减转移退出 MOV A,R3 ;够减,商低位 ADD A,#1 ;加1 MOV R3,A ;商低位回送 MOV A,R4 ;商高位 ADDC A,#0 ;加进位 MOV R4,A ;商高位回送 SJMP AA ;重新执行减法 BB:RET,4.4软件编制要点及参考程序 1软件编制要点 80C51单片机提供的是字节运算指令,所以在处理多字节数的加减运算时,要合理的运用进位(借位)标志。 2参考程序,(1) ORG 0000H LJMP START ORG 0040H START:CLR CY MOV 30H,#7FH MOV 31H,#4DH MOV R0, #31H MOV A,R0 SUBB A ,#4E MOV R0,A ;保存低字节相减结果 DEC R0 MOV A, R0 SUBB A,#2BH MOV R0,A ;保存高字节相减结果 END,(2) ORG 0000H LJMP START ORG 0040H START:MOV A,R0 MOV B,R2 MUL AB MOV R3,A MOV R4,B MOV A,R1 MOV B,R2 MUL AB ADD A,R4 MOV R4,A CLR A ADDC A,B MOV R5,A RET,4.5实训基本任务 实训1: (1) 建工程:名称为 *.UV2说明:*不要用中文用英文 (2) 建源文件:名称为 *.asm 说明:*不要用中文用英文,且不能与工程名同 (3) 在工程中添加源文件说明:子程序紧接着主程序存放,必须在 END 指令前 (4) 调试并运行程序 (5) 调试并运行程序:观察内部RAM 30H、31H单元内容并验证结果 实训2: (1) 建工程:名称为 *.UV2说明:*不要用中文用英文 (2) 建源文件:名称为 *.asm 说明:*不要用中文用英文,且不能与工程名同 (3) 在工程中添加源文件说明:子程序紧接着主程序存放,必须在 END 指令前 (4) 对工程进行汇编、编译 (5) 调试并运行程序:观察寄存器R5、R4、R3中的内容并验证结果 4.6思考内容 4-1编写程序,实现双字节无符号数加法运算,要求 (R0R1)+(R6R7)(60H61H)。 4-2 .编写多字节无符号数的加法程序。设两个N字节的无符号数分别存放在内部RAM中以DATA1和DATA2开始的单元中。相加后的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论