下载此文档

第章指令与编程.doc


文档分类:汽车/机械/制造 | 页数:约54页 举报非法文档有奖
1/54
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/54 下载此文档
文档列表 文档介绍
第章指令与编程.doc第九节汇编语言典型编程方法汇编语言编程只讲一些最基本的,复杂的运算不讲,因为后面还要讲单片机C语言编程,用单片机C语言编程有很大的优越性。学****了单片机C语言编程后,提倡用C语言和汇编语言混合编程,以C语言为主。一、算术逻辑处理例1:将40H开始存放的10个字节的数与50H开始存放的10个字节的数相减(假设被减数大于减数)。设被减数地址(指针)存放在R0,减数地址(指针)存放在R1,差数放回被减数单元,R5存放字节个数,则程序如下:SUB:MOVR0,#40H;被减数首地址 MOVR1,#50H;减数地址 MOVR5,#10;字节个数 CLRC;清进位位SUB1:MOVA,***@R0;被减数送累加器A SUBBA,***@R1;两数相减结果送A ******@R0,A;结果送被减数地址 INCR0;指向下一个被减数 INCR1;指向下一个减数 DJNZR5,SUB1;10个数未运算完,转SUB1 RET例2:将两个半字节数合并成一个字节数。设内部RAM40H,41H单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并成一个字节,将40H的低字节为合成字节的高字节,存入50H单元中。程序如下:START:MOVR1,#40H;设置R1为数据指针MOVA,***@R1;取40H中的内容ANLA,#0FH;取40H的低半字节SWAPA ;40H低半字节移至高半字节INCR1 ;修改数据指针,指向41H;XCHA,***@R1 ;41H内容送A,40H低半字节送41H原40H低半字节送41H高半字节;ANLA,#0FH;取41H的低半字节ORLA,***@R1 ;拼字MOV50H,A ;存放结果在50HRET二、数制转换程序例3:将一个字节二进制数转换成BCD码。转换后存到RAM的20H、21H。源程序:MOVB,#100;MOVA,#99H;被转换数(153)DIVAB;求百位,商在A,余数在BMOV21H,A;将百位数送RAM的21HMOVA,#10;XCHA,B;被除数送A,除数送BDIVAB;十位在A,个位在BSWAPA;将十位移到高4位ADDA,B ;将十位与个位合并,放到AMOV20H,A;将十位、个位存20H单元RET(调二-BCD转换)例4:二进制转换为十进制将计数器的TH0读入R2,TL0读入R3,将读入的16位二进制转换为5位十进制(最大65535)。1)转换结果为5位,必须占3个存储单元,将转换结果存到R4、R5、R6中。2)二-十进制转换公式i=0,…,MM为二进制的位数,从右向左,从0开始;ai为该位的值“1”或“0”。如1010转换为二进制:3)转换编程思路如何编程实现转换,以上面1010中的最高位1为例:20=1;21=20+20=1×2=2;(1+1)22=21+21=2×2=4;(2+2)23=22+22=4×2=8;(4+4)规律:当前位置的权值(如权值为3)是将从1开始每步自相加的结果。将所有系数为1的权值累加起来就是十进制的结果。实现方法:把R2、R3中的二进制带进位位左移,就是最高位开始累加,每移一次,将R4、R5、R6带进位位自加(相当于乘2),最高位等于a15×215,如果最高位为1,循环16次就累加了16次,变成32768。依次类推,实现了转换。4)参考源程序Z0Y0:CLRA;A清0;MOVR4,A;R4、R5、R6清0,R4放最高位MOVR5,A;MOVR6,A;MOVR7,#10H;循环16次LO30:CLRC;进位位清0,进位位中存放的系数,最高为开始MOVA,R3;以下将二进制带进位位左移(6句)RLCA;低位的最高位送入CMOVR3,A;MOVA,R2;RLCA;把低位中的最高位送入高位的最低位,高位的最高位MOVR2,A;移到CMOVA,R6;将十进制的低位送AADDCA,R6;带进位位相加,进位位是由上面左移得到DAA;进行十进制调整MOVR6,A;将结果又送R6MOVA,R5;对十进制中位进行处理ADDCA,R5;进位位是由R6相加到进位时得到DAA;MOVR5,A;MOVA,R4;对十进制高位进行处理ADDCA,R4;进位位是由R5相加到进位时得到DAA;MOVR4,A;DJNZR7,LO30;判断是否循环了16次RET(调二-十转换)三、分支程序设计例5:双向分支程序设计设X存在30H单元中,根据下式X+2 X>0Y= 100 X=0求出Y值,将Y值存入31H。∣X∣ X<0解:根据数据的符号位判别该数的正负,若最高位为0,再判别该数是否为0。程序流程如图4-4所示。 1000HMOV A,30H ;取数JB ,NEG;最高位为符号位,负数=1,转NEGJZ ZER0;最高位为零,判读X为0转ZER0ADDA,#02H ;为正数,求X+2AJMPSAVE

第章指令与编程 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数54
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xinsheng2008
  • 文件大小394 KB
  • 时间2019-08-19