第4章 AT89C52汇编语言程序设计解析_第1页
第4章 AT89C52汇编语言程序设计解析_第2页
第4章 AT89C52汇编语言程序设计解析_第3页
第4章 AT89C52汇编语言程序设计解析_第4页
第4章 AT89C52汇编语言程序设计解析_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

END2.多字节减法运算程序设计[例4-19]已知以BLK1和BLK2为首地址的片内RAM存储区中分别有5字节无符号被减数和减数(低位在前、高位在后),试编写一多字节减法子程序,把差放入以BLK1为起始地址的存储单元。程序如下:ORGDSUBB:MOVMOVMOVCLRLOOP:MOVSUBBMOVINCINC0100HR0,#BLK1R1,#BLK2R2,#05HCA,@R0A,@R1@R0,AR0R1;被减数起始地址送R0;减数起始地址送R1;字长送R2;Cy清零;被减数送A;相减;存差DJNZR2,LOOPRETEND[例4-20]试编写多字节压缩BCD码减法运算程序。解:AT89C52单片机指令系统中只有十进制加法调整指令“DAA”。该指令只有紧跟在加法指令(ADD、ADDC)后才能得到正确的结果。为了使用“DAA”指令对十进制减法进行调整,必须采用对减法求补相加的方法,以9AH为模减去减数即得到减数的补数。设被减数低字节地址存在R1,减数低字节地址存在R0,字节数存在R2;差的低字节地址存在R0,差的字节数存在R3。入口地址:(R0=减数地址指针,(R1)=被减数地址指针,(R2)=字节数出口地址:(R0)=差的地址指针,(R3)=差的字节数,借位放在07H位使用资源:A、R0~R3、内部RAM单元和07H位变量程序如下:ORGSUBCD:MOVCLRCLRSUBCD1:MOVSUBBADDDAMOVINCINCINCCPLDJNZJNC0100HR3,#00H07HCA,#9AHA,@R0A,@R1A@R0,AR0R1R3CR2,SUBCD1SUBCD2;进位求反以形成正确借位;未减完去SUBCD1,减完向下执行;无借位去SUBCD2返回主程序,否则继续87;差字节单元清0;符号位清0;借位位清0;减数对模100求补;补码相加;存结果SETBSUBCD2:RET07H;有借位,置“1”符号位END程序中对减数求补后与被减数相加,用“DAA”指令进行调整。若二者相加调整后结果无进位(C=0),则表示二者相减有借位;若二者相加调整后有进位(C=1),则表示二者相减无借位。所以必须对进位标志位C进行求反操作,才能得到正确结果。3.伪随机数发生程序设计在仿真、编码和测试等许多应用中,经常会用到随机数序列。虽然,计算机不会产生绝对随机的随机数,但它能产生“伪随机数”。常用的伪随机数发生器有多种方法实现,在此介绍迭代线性同余法的实现。在这种方法中,每个数Xi与其下一个数Xi+1之间的关系如下:Xi+1=(AXi)modm其中,A是一定常乘数,m是一个除数。常把第一个数X0被称为“随机种子”,它是用来产生随机数的一个数。在计算机中,这样的一个“随机种子”其实是一个无符号整形数。[例4-21]假设“随机种子”取值为87,乘数A取值100,除数m取值为256,试编一程序产生80个伪随机数,并将其保存在片内RAM40H单元开始的存储区中。解:将一个16位二进制数除256所得的余数,其实就是原数中的低字节,这样就能采用如下所示的简单算法来代替原来的关系式。另外,当产生伪随机数0时,按此关系式所计算的值均为0,当此情况出现时,应将0改为FFH。Xi+1=Low_byte(AXi)按此简单算法所实现的汇编程序如下:ORGSEEDSTART:MOVMOVLOOP:MOVMOVMULCJNECONT:MOVINCMOVCJNESJMP$0100HEQU57H39H,#SEEDR0,#39HA,@R0B,#64H;取随机种子到累加器A;乘数取100;将随机种子作为第一个伪随机数保存AB;AXiA,#00H,CONT;是否产生0值A,#0FFHR0@R0,A;将Xi+1保存到片内RAMR0,#90H,LOOP习题与思考题4-1编写数据块传送程序,将片内RAM50H地址开始的100个字节送片外RAM3000H开始的单元。4-2编写一个程序,其功能为:(A→(30H→(31H→(32H→„„(3EH→(3FH4-3编写一个程序,其功能为将30H(高~32H(低和33H(高~35H(低两个3字节无符号数相加,结果存入30H(高~32H(低。4-4片内RAM40H和60H开始的单元分别存放两个8字节BCD码(低地址单元存放低字88节),编程将这两个数相加,并将结果存在片外1000H开始的单元。4-5编写程序,采用算术平均值滤波法求采样平均值,设8次采样值依次存放在40H~47H的连续单元中,结果保留在累加器A中。4-6片外RAM2000H地址开始存放长度为160的字符串,编程统计字符串中字符‘A’(ASCII码为41H)出现的次数,并存入片内RAM80H单元。4-7片内RAM从地址50H开始存放一字符串,字符串以回车符(ASCII码为0DH)作为结束符,编程计算字符串长度,并送片内RAM的FFH单元。4-8设自变量X为一无符号数,存放在片内RAM的VAX单元,函数值Y存放在FUNC单元,请编出满足如下关系的程序:Y=X2XX>50X=505XX<504-9编写一个子程序将字符串‘MCS-51Microcomputer’装入外部RAM8000H开始的显示缓冲区。4-10试设计一个子程序,其功能是应用查表指令“MOVCA,@A+PC”求累加器(A的平方值,结果送A,入口时(A<15。4-11编写一个子程序,用查表方法,将累加器A中的数转换为两个ASCII字符,送入内部RAM30H、31H单元中。4-12编写程序统计学生的英语成绩,分别归类90~100分、80~89分、70~79分、60~69分及60分以下,并将各分数段的人数送片内RAM单元。4-13设逻辑运算表达式如下:Y=(EF+)G(H)I+J其中变量E、F、G分别为P1.0、P1.4和定时器溢出标志TF0,H、I、J分别为F0、20H.3和外部中断标志IE1,输出变量Y为P1.5。试编写程序用软件方法实现上述逻辑功能。4-14在某应用系统中,有A~T共20个单字符命令,这些命令的处理程序入口地址依次存放于标号为JPTBL开始的地址表中。若输入的命令字符存放于A累加器,试编写一个散转程序。其功能为:若累加器A中的字符为合法字符,则转相应的入口地址;若累加器A中的字符为非法字符,则转出错处理程序ERR。4-15编写一个子程序,其功能为将内部RAM的30H~32H单元中的压缩BCD码拆成6位非压缩BCD码,存放到33H~38H单元中。4-16编写一

温馨提示

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

最新文档

评论

0/150

提交评论