已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.3 汇编语言程序设计,3.3.1 汇编语言及其语句格式 1、汇编语言 这里介绍MCS-51单片机的汇编语言。 2、汇编语言的语句格式 一条汇编语言的语句包括四部分内容:标号、操作码、操作数和注释。其格式为: 标号:操作码 操作数;注释 例如:LOOP: MOV A , #20H ; (A)20H,3.3.2 伪指令 1、定位伪指令 格式:ORG n 2、定义字节伪指令 格式:标号:DB X1, X2, Xn 此伪指令的功能是把Xi存入从标号开始连续的单元中。 3、定义双字节伪指令 格式:标号:DW X1,X2,Xn 此伪指令的功能是把Xi存入从标号开始的连续单元中。,4、预留存贮区伪指令 格式:DS n DS n从标号指定单元开始,预留n个单元的存贮区。 5、赋值伪指令 格式:字符名称x EQU n 此指令的功能是将数据或地址n赋给字符名称。 6、结束汇编指令 格式: END END指示源程序到结束,常将其放在汇编语言源程序的末尾。,3.3.3 汇编语言程序设计过程 1、分析任务,确定算法或解题思路 2、根据算法和解决思路画出程序流程图 流程图是由一些框图和流程线组合而成: 置的框图连接在一起,位于不同框图的圈内,应标注相同的字母。,3、根据流程图编写程序 4、上机调试程序 3.3.4 顺序结构程序设计 按照程序编写的顺序,依次执行。任何复杂的程序,都含有较大成份的顺序结构程序。 【例3-8】 将两位压缩BCD码转换成二进制数 编程思路:(a1a0)BCD= a110+a0 编程说明:待转换的两位压缩BCD码存放于R2,转换结果存回R2。 程序流程图如图3-1所示。,编程如下: START: MOV A , R2 ANL A , #0F0H ;取高位BCD码 SWAP A MOV B , #0AH MVL AB MOV R3 , A MOV A , R2 ANL A , #0FH ;取低位BCD码 ADD A , R3 MOV R2 , A END,3.3.5 分支程序设计,【例3-9】 求符号函数的值 1 当X0 Y= 0 当X=0 的值。 -1 当X0 编程说明:设变量X存放在40H单元中,函数Y存放在41H单元中。此程序为三分支程序。 程序流程图如图3-3所示。,编程如下: START: MOV A,40H JZ COMP JNB ACC.7, POST MOV A,#81H ;表示-1 SJMP COMP POSI: MOV A,#01H ;表示+1 COMP: MOV 41H,A END,【例3-10】 求单字节有符号二进制数的补码。,编程如下: CMPT: MOV A , 30H JNB ACC.7 , NCH ;(A)0,不需要转换 MOV C , ACC.7 ;保存符号 MOV 10H , C CPL A ADD A , #1 MOV C , 10H MOV ACC.7 , C ;恢复符号 NCH: END,图3-5中,K的最大值一般为128。 【例3-1】 用单片机作四则运算。 编程说明:在单片机系统中,设置+、四个运算键,这四个运算键的键值分别为0、1、2、3(键值存放在寄存器(2中),当其中一个按键按下时,进行相应的运算。 P1口输入被加数、被减数、被乘数或被除数,以及运算结果的低8位或商。 P3口输入加数、减数、乘数或除数,,以及结果的高8位或余数。 键号存放在累加器A中。 程序流程图如图3-6所示。,参考程序如下: START: MOV P1 , #0FFH MOV P3 , #0FFH MOV DPTR, #TABLE CLR C MOV A, R2 SUBB A,#04H JNC ERROR ADD A , #0-4H,CLR C RL A ;正确的散转偏移号,键号2 JMP A+DPTR TABLE: AJMP PRG0 AJMP PRG1 AJMP PRG2 AJMP PRG3 ERROR: ( 错误处理) PRG0: MOV A,P1,ADD A,P3 MOV P1,A CLR A ADDC A,#00H ;进位位放入A中 MOV P3,A RET PRG1: MOV A,P1 CLR C SUBB A,P3 MOV P1,A,CLR A RLC A ;借位放入A中 MOV P3,A RET PRG2: MOV A,P1 MOV B,P3 MUL AB MOV P1,A MOV P3,B RET,PRG3: MOV A,P1 MOV B,P3 DIV AB MOV P1,A MOV P3,B RET,【例3-12】已知内存单元有16个二进制无符号数,分别存放在30H3FH中,试求它们的累加和,并将其和数存放在R4、R5中。 编程说明:存放16个二进制无符号数的首地址为30H,此循环程序的循环次数为16次,和数放在R4、R5中。程序流程如图3-8。,参考程序如下: START: MOV R0 ,#30H MOV R2 , #10H MOV R4 , #00H MOV R5 , #00H,LOOP: MOV A , R5 ADD A , R0 MOV R5 , A MOV A , #00H ADDC A , R4 MOV R4 , A INC R0 DJNZ R2 , LOOP END,【例3-13】 将内部数据存贮器30H4FH单元中的内容传送至外部数据存贮器2000H开始的单元中。 解:编程说明: 内部数据区首址: R030H 外部数据区首址: DPTR2000H 循环次数: R232H 程序流程如图3-9所示。,参考程序如下: START: MOV R0 , #30H MOV DPTR , #2000H MOV R2 , #32H LOOP: MOV A , R0 MOVX DPTR , A INC R0 INC DPTR DJNZ R2 , LOOP END,【例3-14】试将内部数据存储器中连续存放的N个数据由小到大进行排列。 设:数据区首地址存于寄存器R0中,数据个数N存于寄存器R6中。程序流程如图3-10所示。 参考程序如下: MOV 30H , R0,L1: DEC R6 MOV A , R6 MOV R3 , A MOV R2 , A MOV A , R0 MOV R1 , A INC R1,L2: MOV A , R0 CLR C SUBB A , R1 JC L3 MOV A , R0 XCH A , R1 MOV R0 , A L3: INC R1 DJNZ R2 , L2 INC R0 DJNZ R3 , L1 MOV R0 , 30H END,3.3.8 查表程序设计 【例3-15】利用查表的方法编写Y= X2 (X=0,1,29 )的程序。 编程说明: 设变量X的值存放在内存30H单元中,变量Y的值存入内存31H单元。先用远查表指令MOVC A, A+DPTR 编写程序(参考程序1);再用近查表指令MOVC A , A+PC 编写程序(见参考程序2)。,参考程序1: ORG 1000H START: MOV A , 30H MOV DPTR , #TABLE MOVC A , A+DPTR MOV 31H , A TABLE: DB 0 , 1 , 4 , 9 , 16 DB 25 , 36 , 49 , 64 , 81 END,参考程序2: ORG 1000H START: MOV A , 30H ADD A , 02H MOVC A , A+PC MOV 31H , A DB 0 , 1 , 4 , 9 , 16 DB 25 , 36 , 49 , 64 , 81 END,【例3-16】 将1位十六进制数,转换成相应ASC码。用计算求解和查表求解,进行比较。 (1) 计算求解: 编程说明: 设待转换的一位十六进制数存放在40H 单元中,转换后的ASC码仍存放在40H 中。 编程思路: 十六进制数09 的ASC为41H46H.,当待转换的数9时,加30H,既是其对应的ASC码;当待转换的数9时,加37H。程序流程如图3-11所示。,参考程序如下: ORG 0100 H MOV A , 40 H ANL A , # 0F H CLR C SUBB A, # 0AH,JC NEXT ADD A , #0AH ADD A , #37H SJMP SAVE NEXT: ADD A , #0AH ADD A , #30H SAVE: MOV 40H , A END,(2) 查表求解: ORG 0100H MOV A , 40H ANL A , #0FH ADD A , 02H MOVC A , A+PC MOV 40H , A DB 0, 1, 2, 3, 4, 5 DB 6, 7, 8, 9, A, B DB C, D, E, F END,3.3.9 子程序设计 1、子程序的调用与返回 MCS-51单片机有两条子程序调用指令:ACALL addr11、 LCALL addr16;一条子程序返回指令RET。 2、保存与恢复寄存器内容 例如:SUB1: PUSH PSW PUSH A PUSH R6 (此处省略了子程序的内容) POP R6 POP A PUSH PSW,3、子程序的参数传递 主程序在调用子程序时,经常需要传送一些参数,子程序运行完后也经常将一些参数回送给主程序,这叫参数传递。 【例3-17 】 编程计算c = a2 +b2。 编程说明:这个问题中,计算某数的平方可以用子程序来实现,两次调用该子程序,并求和便得到所需结果。设a、b 分别存于内部RAM 的30H、31H单元,结果C存于内部RAM的40H单元。,参数传递:主程序中,将某数存放到累加器A中,作为子程序的入口参数;子程序中,将所求数的平方值存放在累加器A中,作为出口参数(即主程序的返回值)。 子程序的入口参数:A中存放某数的值。 子程序的出口参数:A中存放所求数的平方。 子程序如下: SQR: INC A MOVC A , A+PC ;查平方表 RET TABLE:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- CN118708590B 一种天文数据索引方法、装置、设备及介质 (武汉达梦数据库股份有限公司)
- 螺旋上的童年:小学美术一年级下册《小蜗牛慢慢爬》教学设计
- 第五章一元一次方程第2节第4课时利用去分母解方程导学案(七年级数学人教版2024)
- 小学三年级科学《花、果实和种子》核心知识清单
- 桩基工程施工质量验收方案
- 消防自动报警系统安装调试手册
- 独立储能电站运行维护规范
- 钢结构焊缝修复安全方案
- 无菌医疗器械初包装检验方案
- 高校学生宿舍装修施工手册
- 【玉溪】2026年云南玉溪市红塔区卫生健康系统公开招聘毕业生及紧缺人才10人笔试历年典型考题及考点剖析附带答案详解
- 企业增值税管理制度
- 高炉炉前组长安全制度培训
- 结构构件焊接质量监督方案
- 急诊科院感工作制度
- 2026中国人寿秋招笔试题及答案
- 房地产销售人员薪酬调整方案
- 2026年张掖市甘州区事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 十五五规划纲要解读:中药产业创新发展
- 安全生产述职述安制度
- TTCCT004-2023智能云断路器技术规范
评论
0/150
提交评论