第4章-89S51的汇编语言程序设计课件.ppt
《第4章-89S51的汇编语言程序设计课件.ppt》由会员分享,可在线阅读,更多相关《第4章-89S51的汇编语言程序设计课件.ppt(56页珍藏版)》请在三一办公上搜索。
1、2023/3/18,1,第4章 89S51的汇编语言程序设计,程序编制的方法和技巧,4.1,源程序的编辑和汇编,4.2,基本程序结构,4.3,子程序及其调用,4.4,2023/3/18,2,单片机应用系统由硬件系统和应用程序构成。,汇编语言 高级语言(例如,C语言),应用程序设计方法,汇编语言,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强的特点。,高级语言,对系统的描述与实现与人的思维相似,程序阅读、修改和移植方便,适合于编写复杂的程序。,2023/3/18,3,4.1 程序编制的方法和技巧,4.1.1 程序编制的步骤,明确任务:功能要求、技术指标 运行环境调研,任务分析,将实
2、际问题转化为计算机处理的程序算法。算法比较与优化(内存需求、运行速度、效率)。,算法设计,2023/3/18,4,强化模块观念,使程序结构清晰。简化代码。,程序模块(主程序模块、各种子程序模块)模块化优点:分块设计、层次清晰、便于接口。,4.1.2 程序编制的方法和技巧,采用循环和子程序的优点,注意:1、循环初值和结束条件,避免“死循环”现象。2、子程序的现场保护。,2023/3/18,5,4.1.3 汇编语言的语句格式,标号代表本行程序所在的地址。标号由18个ASCII码字符组成,第一个字符必须是字母。不能用已定义的关键字(指令助记符、伪指令等)。同一标号在一个程序中只能定义一次,不能重复定
3、义。标号后跟英文冒号“:”。,标号(即符号地址),标号:指令助记符 操作数1,操作数2,操作数3,;注释,2023/3/18,6,数据:二进制(B)十进制(D或省略D)十六进制(H)。注意:若十六进制操作数以字符AF开头,需在它前面加一个“0”,以便汇编时把它和标号区分开。符号:符号名、标号或“$”。表达式:由运算符和数据构成。,操作数,2023/3/18,7,注释,英文分号“;”开头。汇编时,遇到“;”就停止“翻译”。因此,注释字段不会产生机器代码。,2023/3/18,8,4.2.1 伪指令,4.2 源程序的编辑,4.2.2 源程序的编辑,2023/3/18,9,4.2.1 伪指令,伪指令
4、:用于指导汇编工作。汇编后,伪指令没有与之对应的机器代码。,起始地址设定伪指令ORG,ORG 表达式,表达式通常为十六进制地址,例:,ORG 8000HSTART:MOV A,#30H,ORG可多次使用,但地址值的顺序要由小到大。,2023/3/18,10,结束汇编伪指令END,END,该伪指令位于源程序的最后一行,表示汇编到此结束。整个源程序中只能有一条END命令,且位于程序的最后。对于END之后的程序,将不进行汇编处理。,2023/3/18,11,定义字节数据表伪指令DB,定义字数据表伪指令DW,1000H,标号:DB 字节数据表,ORG 1000HDB-2,-4,-6,8,10,18,1
5、001H,标号:DW 字数据表,ORG 1400HDATA1:DW 324AH,3CH,1400H,1401H,1402H,1403H,注意:字母按ASCII码存储。,2023/3/18,12,预留空间伪指令DS,标号:DS 预留空间字节数,ORG 2000HTAB1:DB 12H,34H DS 4H DB 5,2023/3/18,13,定义常量值的伪指令EQU,符号名 EQU 常值表达式,LEN EQU 10 SUM EQU 21HBLOCK EQU 22H MOV R7,LEN MOV R0,BLOCK MOV SUM,A,2023/3/18,14,位定义命令 BIT,用于给字符名称赋予位
6、地址,位地址可以是绝对位地址,也可是符号地址。例如:LEDBIT P1.6功能是把P1.6的位地址赋给变量LED。,2023/3/18,15,4.2.2 源程序的编辑,源程序的编辑,ORG 0000H LJMP MAIN ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H MOV A,#55HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP$END,依据汇编语言规则用好伪指令符号不用中文汇编程序以.ASM存盘,2023/3/18,16,4.3.1 顺序程序,(无分支、无循环),4.3 基本程序结构,ORG 0040HSTART:MOV A,21
7、H;取21H的内容 ANL A,#0FH;保留低半字节 SWAP A;移至高半字节 MOV 20H,A;存于20H单元 MOV A,22H;取22H的内容 ANL A,#0FH;保留低半字节 ORL 20H,A;合并到结果单元 SJMP$;等待 END,2023/3/18,17,4.3.2 分支程序,(双分支),【例】实现两个8位无符号数求和的子程序。,SADD:MOV A,R3;取加数(在R3中)CLR C ADD A,R4;被加数(在R4中)加A JC PP1 MOV R3,#00H;结果小于255时,高字节R3内容为00H SJMP PP2 PP1:MOV R3,#01H;结果大于255
8、时,高字节R3内容为01H PP2:MOV R4,A;结果的低字节在R4中 RET,入口:(R3)=加数;(R4)=被加数。,出口:(R3)=和的高字节;(R4)=和的低字节。,2023/3/18,18,【例】求单字节有符号数的二进制补码。正数补码是其本身,负数补码是其反码加1。因此,应首先判被转换数的符号,负数进行转换,正数本身即为补码。设二进制数放在A中,其补码放回到A中。参考程序如下:CMPT:JNB Acc.7,RETURN;(A)0,不需转换 MOV C,Acc.7;符号位保存 CPL A;(A)求反,加1 ADD A,#1 MOV Acc.7,C;符号位存在A的最高位RETURN:
9、RET,2023/3/18,19,4.3.2 分支程序,(多分支),多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。,2023/3/18,20,指令系统提供了非常有用的两种多分支选择指令:间接转移指令 JMP A+DPTR比较转移指令 CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel 间接转移指令“JMP A+DPTR”由数据指针DPTR决定多分支转移程序的首地址,由A的内容选择对应
10、分支。4条比较转移指令CJNE能对两个欲比较的单元内容进行比较,当不相等时,程序实现相对转移;若两者相等,则顺序往下执行。,2023/3/18,21,【例】设变量x存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y,并送回原单元。,2023/3/18,22,ORG 0040HSTART:MOV A,30H;取x至累加器 JZ NEXT;x=0,转NEXT ANL A,#80H;否,保留符号位 JZ DONE;x 0,转结束 MOV A,#05H;x 0处理 ADD A,30H MOV 30H,A;
11、X+05H送Y SJMP DONE NEXT:MOV 30H,#20H;x=0,20H送Y DONE:SJMP DONE END,2023/3/18,23,【例】求符号函数的值。符号函数定义如下:X存放在40H单元,Y存放在41H单元。,2023/3/18,24,程序如下:SIGNFUC:MOV A,40H CJNE A,#00H,NZEAR AJMP NEGTNZEAR:JB Acc.7,POSI MOV A,#01H AJMP NEGTPOSI:MOV A,#81HNEGT:MOV 41H,A END,2023/3/18,25,【例】根据R7的内容x(转移序号)转向相应的处理程序。设R7内
12、容为04,对应的处理程序入口地址分别为PP0PP4。,2023/3/18,26,START:MOV R7,#3;转移序号为3,欲转向PP3 ACALL JPNUM;子程序调用 AJMP START JPNUM:MOV DPTR,#TAB;DPTR指向分支入口的表首地址 MOV A,R7 ADD A,R7;R7乘2,调整偏移量(3x2=6)MOV R3,A;A=R3=6 MOVC A,A+DPTR;先取PP3的高字节(PP3是DW)XCH A,R3;高字节暂存于R3 INC A;增1后,A=7,指向下一个 MOVC A,A+DPTR;再取PP3的低字节 MOV DPL,A;处理程序入口地址低8位
13、送DPL MOV DPH,R3;处理程序入口地址高8位送DPH CLR A;DPTR指向PP3地址 JMP A+DPTR;跳转向PP3服务程序,2023/3/18,27,TAB:DW PP0;TAB是转移地址表 DW PP1 DW PP2 DW PP3 DW PP4 PP0:MOV 30H,#0;转移序号为0时,置功能号“0”于30H单元 RET PP1:MOV 30H,#1;转移序号为1时,置功能号“1”于30H单元 RET PP2:MOV 30H,#2;转移序号为2时,置功能号“2”于30H单元 RET PP3:MOV 30H,#3;转移序号为3时,置功能号“3”于30H单元 RET PP
14、4:MOV 30H,#4;转移序号为4时,置功能号“4”于30H单元 RET,2023/3/18,28,4.3.3 查表程序,【例4-3】设计一子程序,功能是根据累加器A中的数x(09之间)查x的平方表y,根据x的值查出相应的平方y。本例中的x和y均为单字节数。ADD A,#01HMOVC A,A+PCRET DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H;数09的平方表,2023/3/18,29,指令“ADD A,#01H”的作用是A中的内容加上“01H”,“01H”即为查表指令与平方表之间的“RET”指令所占的字节数。加上“01H”后,可保证PC
15、指向表首,累加器A中原来的内容仅是从表首开始向下查找多少个单元。在进入程序前,A的内容在0009H之间,如A中的内容为02H,它的平方为04H,可根据A的内容查出x的平方。指令“MOVC A,A+DPTR”应用范围较广,使用该指令时不必计算偏移量,优点是表格可以设在64KB程序存储器空间内的任何地方,而不像“MOVC A,A+PC”那样只设在PC下面的256个单元中,所以使用较方便。,2023/3/18,30,如果DPTR已被使用,则在查表前必须保护DPTR,且结束后恢复DPTR,例4-3可改成如下形式:PUSH DPH;保存DPH PUSH DPL;保存DPLMOV DPTR,#TAB1MO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 89 S51 汇编语言 程序设计 课件
链接地址:https://www.31ppt.com/p-3730285.html