《最新单片机汇编幻灯片.ppt》由会员分享,可在线阅读,更多相关《最新单片机汇编幻灯片.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机汇编单片机汇编主要内容主要内容1. 汇编语言格式及构成汇编语言格式及构成2. 汇编源程序设计步骤及汇编汇编源程序设计步骤及汇编3. 顺序程序设计顺序程序设计4. 分支程序设计分支程序设计5. 循环和查表程序设计循环和查表程序设计6. 子程序设计子程序设计2.3.6 循环和查表程序设计循环和查表程序设计例题例题3 3:已知内部:已知内部RAM ADDRRAM ADDR为始址的无符号数数据块的块长存储于为始址的无符号数数据块的块长存储于LENLEN单元内,请编程找出数据块中的最大数并存入单元内,请编程找出数据块中的最大数并存入MAXMAX单元单元解:解: ORG 1000HORG 1000H
2、 LEN DATA 31H LEN DATA 31H MAX DATA 32H MAX DATA 32H MOV R0 MOV R0,#ADDR #ADDR ;R0R0指向数据块,初始化为数据块首地址指向数据块,初始化为数据块首地址 MOV MAX, #00H MOV MAX, #00H ;MAXMAX单元初始化,清零单元初始化,清零LOOPLOOP:MOV AMOV A,R0 R0 ;开始循环体,将一个数取到;开始循环体,将一个数取到A A CJNE A CJNE A,MAXMAX,BRCHBRCH;比较该数与;比较该数与MAXMAX的大小的大小BRCHBRCH:JC NEXT JC NEX
3、T ;若该数小,则进行下一次循环;若该数小,则进行下一次循环 XCH AXCH A,MAX MAX ;若该数大,则与;若该数大,则与MAXMAX交换交换NEXTNEXT:INC R0 INC R0 ;为下一次循环做准备;为下一次循环做准备 DJNZ LENDJNZ LEN,LOOP LOOP ;判断循环次数;判断循环次数 SJMP SJMP $ END END例题例题4 4:R0R0的低四位对应一个的低四位对应一个1616进制数码,编写程序,将该数码对应进制数码,编写程序,将该数码对应字符的字符的ASCIIASCII编码送入编码送入R1R1。(例如:若。(例如:若R0R0的低的低4 4位为位为
4、1110B1110B,对应,对应1616进进制数码制数码E E,则将字符,则将字符EE的的ASCIIASCII码送入码送入R1R1) 9 8 7 6 5 4 3 2 1 0 SJMP $ MOV R0, A MOVC A, A+PC 解:解: ORG 1000HORG 1000H MOV A, R0 MOV A, R0 ANL A, #0FH ANL A, #0FH ADD A, #03H ADD A, #03H MOVC A, A+PC ; MOVC A, A+PC ; 查表指令查表指令 MOV R1, A ;MOV R1, A ;指令长度为一个字节指令长度为一个字节 SJMP SJMP $
5、 ; ;指令长度为两个字节指令长度为两个字节ASCTABASCTAB:DB DB 0, 1, 2, 3, 4 ; 制表制表 DB DB 5, 6, 7, 8, 9 DB DB A, B, C, D, E , F END END2.3.7 2.3.7 子程序设计子程序设计 子程序可自动保护断点(即主程序中下一条指令的地址),但不子程序可自动保护断点(即主程序中下一条指令的地址),但不会自动保护现场(即运行子程序前的寄存器状态),若要保护现场,会自动保护现场(即运行子程序前的寄存器状态),若要保护现场,则在子程序的开始部分用压入堆栈命令保护现场,在结束部分用弹出则在子程序的开始部分用压入堆栈命令保
6、护现场,在结束部分用弹出堆栈命令恢复现场堆栈命令恢复现场 可利用寄存器、存储单元或堆栈进行子程序的入口参数和出口参可利用寄存器、存储单元或堆栈进行子程序的入口参数和出口参数传递数传递例题例题5 5:设:设MDAMDA和和MDBMDB内有两数内有两数a a和和b b,请编出求请编出求c=ac=a2 2+b+b2 2并把并把c c送入送入MDCMDC的程序,的程序,设设a a和和b b皆为小于皆为小于1010的整数的整数 SQRTAB SQR 100 81 64 49 36 25 表表 16 9 4 1 0 RETMOVC A,A+PC ORG 1000HORG 1000H MDA DATA 20
7、H MDA DATA 20H MDB DATA 21 MDB DATA 21 MDC DATA 22H MDC DATA 22H MOV A, MDA MOV A, MDA ;入口参数传递;入口参数传递 ACALL SQRACALL SQR ;调用子程序;调用子程序 MOV RMOV R1 1, A, A MOV A, MDB MOV A, MDB ACALL SQR ACALL SQR ADD A, R ADD A, R1 1 MOV MDC, A MOV MDC, A SJMP SJMP $ $SQRSQR:ADD A, #01 ADD A, #01 ;子程序;子程序 MOVC A, A+
8、PCMOVC A, A+PC RET RET ;RETRET为一个字节为一个字节SQRTABSQRTAB:DB 0, 1, 4, 9, 16 DB 0, 1, 4, 9, 16 ;平方表;平方表 DB 25, 36, 49, 64, 81DB 25, 36, 49, 64, 81 END END练习练习1 1:外部:外部RAMRAM从从2000H2000H到到2100H2100H有一数据块,请编出将它们传送到有一数据块,请编出将它们传送到3000H3000H到到3100H3100H区域的程序。区域的程序。练习练习2 2:某系有:某系有200200名学生参加外语统考,若成绩存放在名学生参加外语统
9、考,若成绩存放在80318031外部外部RAMRAM始址为始址为ENGLISHENGLISH的连续存储单元,现决定给成绩在的连续存储单元,现决定给成绩在9595分分100100分之间的分之间的学生颁发学生颁发A A级合格证书,给成绩在级合格证书,给成绩在9090分分9494分之间的学生颁发分之间的学生颁发B B级合格级合格证书。试编一程序,可以统计证书。试编一程序,可以统计A A级和级和B B级证书的学生人数,并把统计结级证书的学生人数,并把统计结果分别存入内部果分别存入内部RAMRAM的的GRADAGRADA和和GRADBGRADB单元。单元。练习练习3 3(思考)(思考):已知:在内部:已
10、知:在内部RAMRAM中,共有两组无符号四字节被加数中,共有两组无符号四字节被加数和加数分别存放在和加数分别存放在FIRSTFIRST和和SECONDSECOND为始址的区域(低字节在前,高字为始址的区域(低字节在前,高字节在后),请编程求和(设和也为四字节),并把和存于节在后),请编程求和(设和也为四字节),并把和存于SUMSUM开始的开始的区域。区域。练习练习4 4:已知:已知MDAMDA和和MDBMDB内分别存有两个小于内分别存有两个小于5 5的整数,请用查表子程序的整数,请用查表子程序实现实现C=aC=a2 2+2ab+b+2ab+b2 2,并把和存于,并把和存于MDCMDC单元单元练
11、习练习5 5:设晶振频率为:设晶振频率为6MHz6MHz,试编写一能延时,试编写一能延时20ms20ms的子程序。的子程序。练习练习6 6(思考):已知内部(思考):已知内部RAMRAM单元单元MAMA和和MBMB中分别有两个有符号数,请编中分别有两个有符号数,请编一减法子程序,并把差存入一减法子程序,并把差存入RESULTRESULT和和RESULT+1RESULT+1中中问题:有符号数的减法,如(问题:有符号数的减法,如(-98-98)-98-98因为因为98D=62H=0110 0010B -98D=1001 111098D=62H=0110 0010B -98D=1001 1110则则
12、 1001 1110B- 0110 0010B=0011 1100B=3CH=31001 1110B- 0110 0010B=0011 1100B=3CH=3* *16+12=6016+12=60,结果不对,结果不对算法:将带符号数进行两字节扩展,则高字节的各个位都与符号位相同算法:将带符号数进行两字节扩展,则高字节的各个位都与符号位相同 -98=1111 1111 1001 1110B-98=1111 1111 1001 1110B 98=0000 0000 0110 0010B 98=0000 0000 0110 0010B (-98-98)-98=1111 1111 0011 1100B
13、 -98=1111 1111 0011 1100B 为负数,为负数,转换为转换为1010进制数:减进制数:减1 1取反得取反得0000 0000 1100 0100B=00C4H=1960000 0000 1100 0100B=00C4H=196 即结果为即结果为-196-196, 与笔算结果一致。与笔算结果一致。练习练习7 7(思考):设(思考):设80318031单片机外部单片机外部RAMRAM从从1000H1000H单元开始存放单元开始存放100100个无符个无符号号8 8位二进制数。要求编一子程序能把它们从大到小依次存入片内位二进制数。要求编一子程序能把它们从大到小依次存入片内RAMRAM从从10H10H开始的存储区。开始的存储区。 问题:需考虑排序的算法问题:需考虑排序的算法本章小结本章小结掌握顺序程序、分支程序、循环和查表掌握顺序程序、分支程序、循环和查表程序、子程序的设计程序、子程序的设计