单片机原理与应用技术第节汇编语言程序的基本结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NEG : SUL2:
3.5.2 分支程序设计
2) 散转多分支程序
根据某种输入或运算的结果转向各个处理程序称 为散转多分支,即散转程序。 (1) 利用转移指令表实现转移 将转移到不同程序的转移指令列成表格,判断条件后 查表,执行表中的转移指令。 【例】 【功能】某菜单有9项。根据输入数码转去执行相应的 子程序。即输入“1”,执行子程序1;输入“2”,执行 子程序2;依次类推。
图3.10 顺序程序流程图
特点:从第一条指令开始顺序执行,直到最后一条指令
3.5.2 分支程序设计
分支:根据某种标志改变程序执行的顺序。 一般分为单分支、多分支。 分支流程图如图3.11所示。
(a) 单分支
(b)多分支
图3.11 分支程序流程图
3.5.2 分支程序设计
百度文库
3.5.2 分支程序设计
NADD: MOV R3,A MOVC A, @A+DPTR XCH A, R3 ;转移地址高8位 INC A MOVC A, @A+DPTR MOV DPL,A ;转移地址低8位 MOV DPH, R3 CLR A JMP @A+DPTR TAB: DW PR0,PR1,PR2, · · · · · · · · · · · PRn PR0: 处理程序0 PR1: 处理程序1 · · PRn: 处理程序n END
1. 单分支
【例】 【功能】某装置有自动/手动控制按键,按键状态由P1.0口输入; 高电平为自动控制,低电平为手动控制 【入口参数】P1.0 CY: JB P1.0,AUTO HC: …… LJMP CY AUTO: …… LJMP CY
3.5.2 分支程序设计
2. 多分支 包括一般多分支和散转多分支。 1) 一般多分支 【例】 【功能】x、y均为8位二进制数,求解: x0 1 【入口参数】(R0)=x。 y x0 1 【出口参数】(R1)=y。
3.5.2 分支程序设计
;由于长跳转指令LJMP占用3B, ;各子程序入口地址相距3B JMP @A+DPTR ;根据输入码,执行相应的子程序 ORG 2000H ;程序入口地址表 TAB1: LJMP NO1 LJMP NO2 LJMP NO3 LJMP NO4 LJMP NO5 LJMP NO6 LJMP NO7 LJMP NO8 LJMP NO9 END MUL AB
3.5.2 分支程序设计
(3) 利用地址偏移量表实现散转 这种方法将转移目标地址与表首地址差列表,作为 转移目标地址。 【例】 【功能】有5个按键 0,1,2,3,4,根据按下的键 转向不同的处理程序,分别为PR0,PR1,PR2, PR3,PR4。 【分析】汇编时,利用了伪指令的数学计算功能,标 首地址加上处理程序与标首地址差转到处理程序。 【入口参数】(B)=转向程序号(键盘编码)。 【出口参数】转移到相应的子程序入口。
0
x0
3.5.2 分支程序设计
START: CJNE R0, #00H, SUL1 ;判断R0是否为0,为0转SUL1 MOV R1, #00H SJMP SUL2 JC NEG ;小于0转NEG MOV R1, #01H SJMP SUL2 MOV R1, #0FFH RET
SUL1:
3.5.2 分支程序设计
(2) 利用转向地址表实现转移
这种方法将转移地址列成表格,将表格的内容作为转移的目标 地址。 【例】 【功能】根据R3(0~n)的内容转向对应的程序;处理程序的入口 符号地址分别为PR0~PRn(n<256) 【分析】 ① 将PR0 ~PRn入口地址列在表格中,每一项占两个单元; ② PRn在表中的偏移量为2n,因此将R3的内容乘“2”即得PRn 在表中的偏移地址; ③ 从偏移地址2n和2n+1两个单元分别取出PRn的高8位地址和 低8位地址送DPTR寄存器,用JMP @A+DPTR指令(A先清零) 即转移到PRn入口执行。
3.5.2 分支程序设计
ORG 0030H KEY_JMP: MOV A, B MOV DPTR, #TAB MOVC A,@A+DPTR JMP @A+DPTR TAB: DB PR0-TAB DB PR1-TAB DB PR2-TAB DB PR3-TAB DB PR4-TAB PR0: 处理程序0 PR1: 处理程序1 PR2: 处理程序2 PR3: 处理程序3 PR4: 处理程序4 END
3.5.2 分支程序设计
【分析】用直接转移指令组成一个转移表,然后把菜单 号读入累加器(A),转移表首地址放入DPTR中,利用 JMP @A+DPTR实现散转。 【入口参数】(R3)=存输入键盘码1~9。 【出口参数】转移到相应的子程序入口。
ORG KEY_JMP:MOV MOV DEC MOV 0030H DPTR, #TAB1;子程序入口首地址送DPTR A, R3;把键盘输入缓冲区内容送累加器(A) A ;由于输入数码为1~9,因此需减1 B, #03H
3.5 汇编语言程序的基本结构
汇编语言源程序设计通常采用结构化设计方法, 任何复杂的程序都可分解为: 顺序结构部分 分支结构部分 循环结构部分 子程序部分
3.5.1 顺序程序设计
【例】【功能】求变量X()的平方。
【入口参数】X值存放在片内RAM的30H单元 【出口参数】X2值存放在片内RAM的31H单元 程序框图如图3.10所示。 ORG 1000H START:MOV DPTR,#2000H MOV A,30H MOVC A,@A+DPTR MOV 31H,A SJMP $ ORG 2000H TABLE:DB 00,01,04,09,16,25 END
3.5.2 分支程序设计
【入口参数】(R3)=0~n 转移。 【出口参数】转移到相应的子程序入口。 PR0 EQU 0110H PR1 EQU 0220H PR2 EQU 0330H · · · · · · · · · · · · · · · · · · · · · · · ORG 0030H KEY_JMP: MOV DPTR, #TAB MOV A,R3 ADD A,R3 ;(A)←(R3)*2 JNC NADD INC DPH ;(R3*2)>256