




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章
汇编语言程序设计4.1概述为完成特定的工作任务而组织起来的指令序列称为程序,编排这一指令序列的过程称为程序设计。4.1.1汇编语言语句的格式标号操作码操作数注释LOOP1:MOVA,20H;A←(20H)4.1.2汇编语言程序设计的一般步骤分析问题,确定数学模型确定算法设计程序流程图安排寄存器和存储空间编制汇编语言源程序上机调试4.2顺序程序设计顺序程序也称为简单程序,其特点是按照程序中指令的排列顺序逐条从头至尾地执行,程序流向不变。顺序程序是最基本的程序形式,其虽然简单,但它是构成复杂大型程序的基础。例4-1字节加法。将片内RAM60H和61H单元中的两个无符号8位数相加,结果存入内部RAM中的30H和31H两个单元之中。 ORG 3000HSTART: MOV A,60H ADD A,61H MOV 62H,A MOV A,#0 ADDC A,#0 MOV 63H,AHERE: SJMP HERE END同一任务可用不同的程序或不同的指令完成。上例求和运算也可用下面的程序实现。至于程序执行花的时间和程序占用的内存数量,一般不用在意,且程序执行所花的时间与硬件焊接的晶振有关。 ORG 3000HSTART: MOV R0,#60H MOV A,@R0 INC R0 ADD A,@R0 INC R0 MOV @R0,A CLR A ADDC A,#0 INC R0 MOV @R0,AHERE: SJMP $ END例4-2字加法。将存于外部数据存储器6000H~6003H单元的两个无符号字相加,和数存入6004H~6006H单元之中。 ORG 2000HBEGIN: MOV DPTR,#6000H MOVX A,@DPTR MOV R3,A INC DPTR MOVX A,@DPTR MOV R4,A INC DPTR MOVX A,@DPTR MOV R5,A INC DPTR MOVX A,@DPTR MOV R6,A MOV A,R3 ADD A,R5 INC DPTR MOVX @DPTR,A MOV A,R4 ADDC A,R6 INC DPTR MOVX @DPTR,A CLR A ADDC A,#0 INC DPTR MOVX @DPTR,AHERE: SJMP $ END例4-3将内部RAM30H单元中的低4位和高4位分别存入60H和61H单元中,即处理后,60H及61H单元的高4位均为零,低4位为原数的高、低半字节。 ORG 0300HSTART: MOV A,30H ANL A,#0FH MOV 60H,A MOV A,30H SWAP A ANL A,#0FH MOV 61H,AHERE: SJMP $ END例4-4将存放在32H单元的两个BCD码(高、低4位分别为一个BCD码)转换为相应的ASCII码后分别存入3AH和3BH单元。例4-4将存放在32H单元的两个BCD码(高、低4位分别为一个BCD码)转换为相应的ASCII码后分别存入3AH和3BH单元。 ORG 0100HBCDASC: MOV A,32H ANL A,#0FH ADD A,#30H MOV 3BH,A MOV A,32H SWAP A ANL A,#0FH ADD A,#30H MOV 3AH,AHERE: SJMP $ END本例也可以用以下程序实现 ORG 0600HSTART: MOV A,32H MOV B,#10H DIV AB ADD A,#30H MOV 3AH,A MOV A,B ADD A,#30H MOV 3BH,AHERE: SJMP $ END例4-5在60H单元存放有一个无符号二进制数(0~255),试编程将其转换为BCD码。将百位对应的BCD码存入30H单元的低4位,十位和个位的BCD码分别存入31H和32H单元。 ORG 0000HSTART: LJMP BINBCD ORG 0030HBINBCD: MOV A,60H MOV B,#64H DIV AB MOV 30H,A MOV A,B MOV B,#0AH DIV AB MOV 31H,A MOV 32H,BHERE: SJMP $ END4.3分支程序设计所谓分支程序是具有两个或两个以上流向的程序,其特点是程序中含有转移指令。转移指令包含无条件分支程序和条件分支程序。无条件分支程序十分简单,这里重点介绍应用十分普遍的条件分支程序。例4-6判断两个无符号数的大小。在外部数据存储器的3000H和3001H单元中存放有两个无符号8位数,现需决定它们的大小,并将较大者置于3000H单元中。 ORG 0100HSTART: MOV DPTR,#3000H MOVX A,@DPTR MOV R2,A INC DPTR MOVX A,@DPTR MOV R3,A CLR C SUBB A,R2 JC NOEXCH MOV A,R2 MOVX @DPTR,A MOV A,R3 MOV DPTR,#3000H MOVX @DPTR,A;大数送3001H单元N0EXCH: SJMP NOEXCH END例4-7在内部RAM的30H、31H和32H单元存放了三个a、b、c,其中a为有符号数,b、c为无符号数。现需编程完成下述运算:当a>0
当a=0
当a<0图4-8例4-7程序流程图YYNNNSTARTa取入AA=0?A>0?y=b-cy=b+cy=0y存入38H单元END ORG 0100HSTART: MOV A,30H JZ ZERO JNB ACC.7,JIA CLR C MOV A,31H SUBB A,32H SJMP RESULTZERO: CLR A SJMP RESULTJIA: MOV A,31H ADD A,32HRESULT: MOV 38H,A
HERE: SJMP$ END例4-8设标志单元为R2,其值控制程序转向16个分支程序段。当R2=0时,转向PROG0;当R2=1时转向PROG1;…;当R2=15时转向PROG15。 MOVA,R2 ADDA,R2 MOVDPTR,#INSTAB JMP@A+DPTR …INSTAB: AJMPPROG0 AJMPPROG1 … AJMPPROG15书中第(2)步“采用地址偏移量表”程序错误,第(3)步“采用分支地址表
”程序错误,可不看。4.4循环程序设计在很多问题的处理过程中,常有许多重复或相同的操作。在程序中就表现为某一指令序列要反复执行多次,这时可采用循环程序的结构。循环程序的优点是能简化程序的书写,减少其占用的存储空间,但程序的执行时间并不会减少。例4-9将数据串1~100按序置入外部数据存储器从2000H开始的连续的单元之中。 ORG 0200HSTART: MOV DPTR,#2000H MOV R3,#100 CLR ALOOP: INC A MOVX @DPTR,A INC DPTRDJNZ R3, LOOPHERE: SJMP $ END例4-10编写一个软件延时程序,延时时间为1ms。设单片机使用的晶振为12MHZ。 ORG 0A00HDELAT: MOV R2,#200DLL: NOP NOP NOP DJNZ R2,DLL RET例4-11在内部RAM30H单元开始的区域中连续存放20个无符号8位数。现需从中找出最大者,且将其置于60H单元 ORG 0200HFIMAX: MOV R1,#30H MOV R2,#19 MOV A,@R1 INC R1LOOP: CLR C SUBB A,@R1 JNC NEXT MOV A,@R1NEXT: INC R1 DJNZ R2,LOOP MOV 60H,AHERE: SJMP$ END例4-12在外部数据存储器从2200H单元开始的区域中存放有一个字符串,所有数据均为一个字节。该字符串以0EEH结束,试编程统计字符串的长度(设字符串的长度小于等于255),将统计结果置入2800H单元。 ORG 0300HSUMNUM: MOV DPTR,#2200H MOV R2,#0LOOP: MOVX A,@DPTR INC R2 INC DPTR CJNZA,#0EEH,LOOP MOVA,R2 MOVDPTR,#2800H MOV@DPTR,AHERE:SJMP$ END例4-13从内部RAM30H单元开始连续存放着8个无符号字节数。现需将其中的31H、33H、36H、和37H单元中的内容乘2,其余4个单元的内容加10后仍存回原单元。假定各单元之中的数处理后仍为单字节数。 ORG 0100HPRONUM: MOV R0,#30H MOV R2,#35HLOOP: MOV A,@R0 XCH A,R2 RRC A XCH A,R2 JNC MUL2 ADD A,#10 SJMP HEREMUL2: RLC AHERE: MOV @R0,A INC R0 CJNE R0,#38H,LOOPWAIT: SJMP $ END例4-15编程将内部RAM中从30H单元开始连续存放的50个无符号字节数按降序排列(即自大至小,地址号较小的单元存较大的数),重新排序后的数仍存放在原存储区域之中 ORG0300HSTART: MOV R2,#49LOOP: MOV R3,#49 MOV R0,#30HLOOP1: MOV A,R0 MOV R1,A MOV A,@R0 INC R0 CLR C SUBB A,@R0 JNC LOOP1 XCH A,@R0 MOV @R1,A DJNZ R3,LOOP1 DJNZ R2,LOOP ORG0300HSTART: MOV R2,#49LOOP: MOV A,R2 MOV R3,A MOV R0,#30HLOOP1: MOV A,R0 MOV R1,A MOV A,@R0 INC R0 CLR C SUBB A,@R0 JNC LOOP1 XCH A,@R0 MOV @R1,A DJNZ R3,LOOP1 DJNZ R2,LOOP4.5查表程序设计查表通常是指已知变量X,通过查找表格求该函数值f(x)。例4-16已知某数存于内部RAM32H单元中,数的范围为1~15,试编写查表程序求其立方值,并将结果存入38H、39H单元。 ORG 0200HSEATAB: MOV DPTR,#3000H MOV A,32H ADD A,32H MOV R2,A MOVC A,@A+DPTR MOV 38H,A MOV A,R2 INC A MOVC A,@A+DPTR MOV 39H,A SJMP $ ORG 3000HTABLE: DW 1,8,27,64,125 DW 216,343,512,729,1000 DW 1331,1728,2197,2744,3375 END4.6子程序设计在程序的不同部位需进行相同的操作或运算的情况,若按常规方法处理便需将某些指令序列重复书写若干次,这势必增大程序量,占用过多的存储空间。解决这一问题的方法便是使用子程序例4-19编写一子程序,将存放于内部36H单元的ASCII码转换为1位的十六进制数,转换结果存于50H单元中。(题意不明,程序错误,忽略)例4-20编写两字节二进制负数求补码的子程序。待求补的负数绝对值存放于内部RAM的30H(低字节)和31H(高字节)两单元中,求补结果仍存回原单元。 ORG 0800HBINNEG: SETB C MOV R0,#30H MOV R2,#2LOOP: MOV A,@R0 CPL A ADDC A,#0 MOV @R0,A INC R0 DJNZ R2,LOOP RET4.7运算程序设计例4-24双字节无符号数相乘(程序与课本略有区别)寄存器R7、R6保存一个乘数的高位和低位,R5、R4保存另一个乘数的高位和低位,结果从高位到低位顺次保存到MUL_3、MUL_2、MUL_1、MUL_0数据存储单元。TMUL: MOV
A,R6
MOV
B,R4
MUL
AB
MOV
MUL_0,A
MOV
R3,B
MOV
A,R4
MOV
B,R7
MUL
AB
ADD
A,R3
MOV
R3,A
MOV
A,B
ADDC
A,#00H
MOV
R2,A
MOV
A,R6
MOV
B,R5
MUL
AB
ADD
A,R3
MOV
MUL_1,A
MOV
R1,#00H
MOV
A,R2
ADDC
A,B
MOV
R2,A
JNC
LAST
MOV
R1,#1
LAST: MOV
A,R7
MOV
B,R5
MUL
AB
ADD
A,R2
MOV
MUL_2,A
MOV
A,B
ADDC
A,R1
MOV
MUL_3,A
RET三字节数除双字节数运算子程序MCS-51的DIV指令,只能做两个单字节的正整数除法运算,实际应用时,由于单字节所能表示的数值太小,往往不能满足要求,为此编写一段除法运算子程序,将一个三字节正整数除以一个双字节正整数。将被除数的最高位和除数的最高位对齐,用被除数减除数,如果够减则减并且商1,不够减则不减并且商0。余数左移一位重复上面操作,直到除数的最低位和被除数的最低位对齐。可见,二进制除法实质上是由“条件减”和“移位”两种操作来实现的。所谓
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目管理者的关键技能分析试题及答案
- 财务管理中的行为金融学应用试题及答案
- 财务分析与监控试题及答案2025
- 项目角色与影响力评估试题及答案
- 2025年税收政策变化试题及答案
- 社团立项课题申报书
- 项目管理考试中常见误区及试题答案
- 微生物检测进展动态试题及答案
- 解读注册会计师考试各科目的意义试题及答案
- 2025年注册会计师考试必学技巧试题及答案
- 旅行社企业章程范本
- GB/T 3091-2008低压流体输送用焊接钢管
- 太仓市国土空间总体规划(2021-2035)
- 上海合作组织-总课件
- 电容电流测试报告
- ACLS-PC-SA课前自我测试试题及答案
- 云南省地质灾害群测群防手册
- 毕业论文某燃煤锅炉房烟气除尘脱硫系统设计
- 兰炭外热式回转炉低温干馏工艺及技术装备简介
- 储罐计算说明书
- 拟投入本工程的主要施工设备表
评论
0/150
提交评论