第章指令与编程

第章指令与编程

ID:41245430

大小:394.50 KB

页数:54页

时间:2019-08-20

第章指令与编程_第1页
第章指令与编程_第2页
第章指令与编程_第3页
第章指令与编程_第4页
第章指令与编程_第5页
资源描述:

《第章指令与编程》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第九节汇编语言典型编程方法汇编语言编程只讲一些最基本的,复杂的运算不讲,因为后面还要讲单片机C语言编程,用单片机C语言编程有很大的优越性。学习了单片机C语言编程后,提倡用C语言和汇编语言混合编程,以C语言为主。一、算术逻辑处理例1:将40H开始存放的10个字节的数与50H开始存放的10个字节的数相减(假设被减数大于减数)。设被减数地址(指针)存放在R0,减数地址(指针)存放在R1,差数放回被减数单元,R5存放字节个数,则程序如下:SUB:MOVR0,#40H;被减数首地址MOVR1,#50H;减数地址MOV

2、R5,#10;字节个数CLRC;清进位位SUB1:MOVA,@R0;被减数送累加器ASUBBA,@R1;两数相减结果送AMOV@R0,A;结果送被减数地址INCR0;指向下一个被减数INCR1;指向下一个减数DJNZR5,SUB1;10个数未运算完,转SUB1RET例2:将两个半字节数合并成一个字节数。设内部RAM40H,41H单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并成一个字节,将40H的低字节为合成字节的高字节,存入50H单元中。程序如下:START:MOVR1,#40H;

3、设置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;被转换数(15

4、3)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)二-十进制转换公式

5、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带进位位自

6、加(相当于乘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

7、,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+2X>0Y

8、=100X=0求出Y值,将Y值存入31H。∣X∣X<0解:根据数据的符号位判别该数的正负,若最高位为0,再判别该数是否为0。程序流程如图4-4所示。参考程序如下:ORG1000HMOVA,30H;取数JBACC.7,NEG;最高位为符号位,负数=1,转NEGJZZER0;最高位为零,判读X为0转ZER0ADDA,#02H;为正数,求X+2AJMPSAVE;转到SAVE,保存数据ZER0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。