第四章 汇编语言程序设计.ppt

上传人:eastlab115 文档编号:374228 上传时间:2018-10-05 格式:PPT 页数:43 大小:332KB
下载 相关 举报
第四章 汇编语言程序设计.ppt_第1页
第1页 / 共43页
第四章 汇编语言程序设计.ppt_第2页
第2页 / 共43页
第四章 汇编语言程序设计.ppt_第3页
第3页 / 共43页
第四章 汇编语言程序设计.ppt_第4页
第4页 / 共43页
第四章 汇编语言程序设计.ppt_第5页
第5页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第四章 汇编语言程序设计,循环程序,简单程序,查表程序,子程序,分支程序,程序设计实例引入,实例 假设一个班有50个人, 共有3门选修课: 计算机算法 服装CAD设计 德语 请找出: 同时选了三门课的同学;,问题的解决,第一步如何在计算机中表示选修某门课的所有同学?,选修这门人数,学生的学号,这个过程实际上是设计数据结构的问题,问题的解决,第二步设计思路:找出同时选了三门课的同学,这个过程实际上是设计算法的过程,既构建模型。,重复该过程,第三步:设计流程,几点启示,整体构思; 构建整体流程框图; 结构合理,流程清晰,简单明了; 局部模块化;,为什么要用流程图?,符合人进行逻辑思考的习惯 计算机

2、从根本上来说,没有任何逻辑性,所以,你必须告诉它,先做什么,后做什么,遇到什么情况又该做什么,等等 流程图设计本身是一个逐步求精的过程,最终将任务划分为若干能由机器指令实现的小模块,4.1 程序设计过程,题意分析 画出流程图 分配内存及端口 编制源程序 仿真、调试程序 固化程序,2、编程技巧,程序功能模块化尽量采用循环结构和子程序少用无条件转移指令多采用累加器来传递参数注意现场保护,即压入堆栈,4.2 顺序程序设计,例:求多项式 a2-b 解:设a存放在R2中,b存放在R3中,结果存放在R6和R7中。,程序如下:MOV A, R2MOV B, AMUL ABCLR CSUBB A, R3 ;带

3、进位减MOV R7,A :保存低8位MOV A, B SUBB A,#00H ;高八位减进位MOV R6,A END,4.3 分支程序设计,根据不同的条件转向不同的处理程序 控制转移指令 AJMP、LJMP、SJMP 、JMPJZ、JNZ、CJNE、DJNZ 位转移指令JC、JNC、JB、JNB、JBC,举例;累加器A内有一个16进制ASCII字符,要求转换成一个16进制数存放于A。,ASCII字符转换成16进制数规则: 数字09 :只需减30H 字母AF :减30H,再减7,ASCH: CLR CSUBB A, #30CJNE A, #10, $+3JC AH10SUBB A, #07 AH

4、10: RET,散转程序多分支程序,散转程序是指通过修改某个参数后,程序可以有三个以上的流向,多用于键盘程序。 常用的指令是JMP A+DPTR,DPTR,+,A,PC,A中内容为8位无符号数,16位地址数,程序清单如下: JUMP1: MOV DPTR,JPTAB1 ;跳转表首送数据指针MOV A,R7ADD A,R7 ;R72A (修正变址值) JNC NOAD ;判有否进位INC DPH ;有进位则加到高字节地址 NOAD: JMP A+DPTR ;转向形成的散转地址人口 JPTAB1: AJMP OPR0 ;直接转移地址表AJMP OPR1. AJMP OPRn,例: 根据R7的内容,

5、转向各自对应的操作程序 (R7= 0,转入OPR0;R7= 1,转入OPR1R7= n,转入OPRn),4.4 循环程序设计,循环程序的结构置循环初值循环体修改控制变量循环终止控制,循环程序举例,例:设在外部RAM中有一个ASCII字符串,它的首地址是在DPTR中,字符串以0结束。现要求用89c51串行口把该字符串发送出去。在串行口已经初始化的条件下,该流程图可用以下框图表示:,TI:串口发送中断请求标志。每发送完串行数据,硬件自动将置。CPU响应中断后,须由软件清0,流程图,结束,程序:SOUT: MOVX A,DPTRJNZ SOT1RETSOT1: JNB TI,SOT1CLR TIMO

6、V SBUF,AINC DPTRSJMP SOUT,TI:串口发送中断请求标志。每发送完串行数据,硬件自动将 置。CPU响应中断后,须由软件清0,例:200名学生参加考试,成绩放在8031的外部RAM的一个连续存储单元,95100分颁发A级证书,9094分颁发B级证书,编一程序,统计获A、B级证书的人数。将结果存入内部RAM的两个单元。,ORG 0030HEG XDATA 1000HGA DATA 20HGB DATA 21HMOV GA,#00MOV GB,#00 MOV DPTR,#EGMOV R2,#200 LOOP:MOVX A,DPTRCJNE A,#95, LOOP1,LOOP1:

7、 JNC NEXT1CJNE A,#90,LOOP2 LOOP2: JC NEXTINC GBSJMP NEXT NEXT1: INC GA NEXT: INC DPTRDJNZ R2,LOOPSJMP $END,4.5 查表程序,表格是事先存放在ROM中的,一般为一串有序的常数,例如平方表、字型码表等。 表格可通过伪指令DB来确定。 通过查表指令MOVC A,A+DPTRMOVC A,A+PC来实现。,用DB、DW建立表格 首地址送DPTR 关键字送A 查表:MOVC A,A+DPTR,用查表法计算平方(一)ORG 0000HMOV DPTR,#TABLE ;表首地址送DPTRMOV A,#

8、05 ;被查数字05AMOVC A,A+DPTR ;查表求平方SJMP $ TABLE:DB 0,1,4,9,16,25,36,49,64,81 END,用查表法计算平方(二)ORG 0000H 0000H MOV A,#05 ;05 A 0002H ADD A,#02 ;修正累加器A 0004H MOVC A,A+PC ;查表求平方 0005H SJMP $ 0007H: DB 0,1,4,9,16,25,36,49,64,81END,使用 MOVC A,A+PC须注意: 1. 使用传送指令将关键字送入ACC 2. ADD A, #DATA指令对A进行修改: PC+DATA=表格首地址 3.

9、 MOVC A,A+PC 完成查表.,DATA=表格首地址-指令地址-1,例 : MOV A, X ADD A,#01H MOVC A,A+PC RET DB 00,01,04,09,10H,19H,24H,31H,30H,DATA=表格首地址-指令地址-1 即:MOVC与DB之间的字节数,4.7 子程序设计,好处: 避免重复编程简化程序的逻辑结构缩短程序长度,节省存储单元便于调试、增强可移植性,1、子程序编写注意的问题,子程序调用: ACALL、 LCALL 子程序返回: RET 子程序第一条必须有标号. 注意现场的保护和恢复 子程序嵌套注意的问题:嵌套深度与堆栈区大小的问题. 正确传递参数

10、: 入口参数和出口参数.,64k范围内,2k范围内,2、 参数传递方法,用累加器或工作寄存器来传递参数用指针寄存器来传递参数用堆栈来传递参数程序段参数传递(适于传递大量常数参数),(1)累加器或工作寄存器传递参数,A、R0R7 优点:最简单,运算速度快。 缺点:累加器和工作寄存器数量有限,不能传递太多参数。,(2)指针寄存器传递参数,片内RAM:R0、R1 片外RAM:DPTR例:将(R0)和(R1)指出的内部RAM中两个3B无符号整数相加,结果送(R0)指出的内部RAM中,入口时, (R0)(R1)分别指向加数和被加数的低字节,出口时,(R0)指向结果的高位字节。利用MCS51的带进位加法指

11、令,编写程序:,程序: NADD: MOV R7,3CLR C NADD1: MOV A,R0 ADDC A,R1MOV R0,AINC R0INC R1DJNE R7,NADD1JNC ADDB MOV R0,#01HADDB: DEC R0RET,(3)堆栈传递参数,PUSHPOP优点:简单,能传递大量参数,由于参数在堆栈中,故大大简化了中断响应时的现场保护。,(4)程序段参数传递,采用程序段参数传递的方法,编写字符串发送的子程序:SOUT: POP DPHPOP DPLSOT1:CLR AMOVC A,A+DPTRINC DPTRJZ SENDJNB TI ,$CLR TIMOV SBU

12、F,ASJMP SOT1SEND: JMP A+DPTR,以发送MCS-51 CONTROLLER 为例,说明该子程序的调用方法:,ACALL SOUTDB MCS-51 CONTROLLER DB 0AH,0DH,0,换行键,回车键,以上子程序特点: 不以一般返回指令RET结尾,而是采用散转指令返回到参数表后第一条指令 可适用ACALL或LCALL,因为这两种调用指令把下一条指令或数据字节地址压入堆栈 需传递的参数可按最方便的次序排列 子程序只使用A和DPTR,习题1:片内RAM中30H和31H中存有两个无符号数,将两个数的最小者存放入40H中。,解:1)需要用到的指令:CJNE、JC2)

13、画流程图3)编程ORG 1000HMOV A,30HCJNE A,31H,BIGSJMP STORE BIG: JC STOREMOV A,31H STORE:MOV 40H,AEND,习题2设变量X存放在VAR单元内,函数Y存放在FUNC单元内,按下式赋值:1 X0Y = 0 X=0-1 X1,解:1)假设VAR在片内RAM的30H单元,FUNC在片内RAM的31H单元;2)画流程图,开始,(VAR)A,A=0?,-1(31H),1(31H),0(31H),结束,A0?,Y,Y,3)编程ORG 2000H30H DATA VAR31H DATA FUNC START:MOV A,30HJZ

14、COMPJNB ACC.7,POSIMOV 31H,0FFH POSI: MOV 31H,01H COMP: MOV 31H,00HEND,习题3: 设计延时50ms的程序,设晶振为12MHz。,解:1机器周期1us (T=1/f12)延时用DJNZ-2个机器周期50ms 2us125200编程:DEL: MOV R7,200DEL1:MOV R6,125DEL2:DJNZ R6,DEL2DJNE R7,DEL1RET 实际上,该程序执行时间50ms,因为没有考虑到除DJNZ指令之外的其它指令的执行时间。,例 设一巡回报警系统,对16路输入进行控制,现根据测量路数,找出每路的最大允许值。(若大于允许值就报警)。(查找双字节表格),TB3: MOV A,R2ADD A,R2MOV R3,AADD A, #6MOVC A,A+PCXCH A,R3ADD A, #3MOVC A,A+PCMOV R4,ARET TAB3: DW 1520,3721,4256 ; 表格最大长度256DW ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1