1 / 29

第 5 讲:汇编程序的编写

MCS-51 单 片 机 原 理 及 设 计. 第 5 讲:汇编程序的编写. 电气工程系 赵志衡 Tel:86413623 E-mail:zhzhhe@hit.edu.cn. MCS-51 汇 编 程 序 的 编 写. 课程主要内容. 汇编程序的基本知识 常用汇编程序设计方法. 汇编程序的基本知识. 汇编指令的基本结构: [ 标号 ] :操作码助记符 [ 第 1 操作数 ],[ 第 2 操作数 ] ; [ 注释 ] Loop1: mov a, #0ffh; 累加器 A 赋值为 ff

mele
Download Presentation

第 5 讲:汇编程序的编写

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MCS-51 单 片 机 原 理 及 设 计 第5讲:汇编程序的编写 电气工程系 赵志衡 Tel:86413623 E-mail:zhzhhe@hit.edu.cn

  2. MCS-51 汇 编 程 序 的 编 写 课程主要内容 • 汇编程序的基本知识 • 常用汇编程序设计方法

  3. 汇编程序的基本知识 汇编指令的基本结构: [标号]:操作码助记符 [第1操作数],[第2操作数];[注释] Loop1: mov a, #0ffh; 累加器A赋值为ff mov a,#10h mov a,#16 标号:表示该指令所在的符号地址,一般由字母和数字组成, 第一位为字母,其余位为字母、数字任选。 操作码助记符、第1操作数和 第2操作数:指令的核心部分。对于某些指令可能不存在完整的两个操作数。 注释:是由用户加入的文本,对汇编程序不起任何作用,只是方便阅读。 * 第1操作数又称目的操作数,第2操作数又称源操作数 ** 51不区分大小写

  4. 汇编程序的基本知识 • 汇编语言的构成 • 指令性语句(51指令系统) • 指示性语句:伪指令 • 伪指令:伪指令不属于MCS51指令系统中的指令,它是程序员发给汇编程序的命令,也称为汇编程序控制命令。 • 程序设计流程

  5. 常用的部分伪指令 • ORG • END • EQU • DB

  6. 伪指令简介 ORG 起点指令 ORG addr16 org 0000h ORG指令用于指明程序代码或数据块在存储器中的起始地址。addr16代表一个16位地址,即程序或数据块的首地址。  EQU 等值指令 标号 EQU 表达式 aaa equ 30h bbb equ 40H mov a,aaa mov a,#bbb+1  EQU指令用于为程序中的任意标号赋值。 程序中的常量通常可以用标号代替,便于修改。  主程序前要先用equ指令为常量标号赋值。

  7. 伪指令简介  DB 定义字节指令 [标号]:DB 数据列表 DB指令用于定义字节型数据或数据串,并将数据作为常数填入指定的存储器单元中。 END 结束汇编指令 [标号]:END END指令置于程序结尾处,作为源程序结束的标志。

  8. 程序设计流程 (1)明确要求和要达到的目的 (2)确定解决问题的计算方法和步骤 (3)画出流程图 (4)分配内存地址 (5)按流程图编写程序 (6)上机汇编、调试、修改直至最后确定源程序

  9. …… 程序结构: 分支结构 子程序结构 复合结构:多种程序结构的组合 顺序结构 循环结构

  10. 简单程序(顺序结构) • 大量使用数据传送类指令 • 注意正确选择指令以提高效率

  11. Org 0h Ljmp 2000h ORG 2000H MOV R0,#22H MOV @R0,#00 MOV A,20H XCHD A,@R0 ORL 22H,#30H SWAP A ORL A,#30H MOV 21H,A z:SJMP z END 15BYTE ,11T MOV A,20H MOV B,#10H DIV AB ORL B,#30H MOV 22H,B ORL A,#30H MOV 21H,A SJMP $ END 15BYTE 14T 将20H单元内的压缩BCD码变换成相应ASCII码放在21H、22H中

  12. BCD码与ASCII码对照 • 0——30H 1——31H • 2——32H 3——33H • 4——34H 5——35H • 6——36H 7——37H • 8——38H 9——39H

  13. 分支程序 • 根据程序要求无条件或有条件改变程序执行的顺序,选择程序的流向 • 特点:程序中含有转移类指令 • 关键:正确选用转移指令

  14. 正确运用转移指令 • 无条件分支程序 • 程序设计者事先设计好的 • LJMP • 有条件分支程序 • 根据已经执行的程序中标志位、A或内部RAM的某些位的结果决定程序的流向 • JZ/JNZ、CJNE、DJNZ、位控制转移类指令 (JC、JNC、JB、JNB、JBC)

  15. 注 意 • 使用条件转移指令形成分支前 一定保证供条件转移指令进行判别的条件是有意义的。 JC LOOP • 正确选定所用的转移条件及转移目标地址

  16. 循环程序 • 循环初始化 • 循环次数计数器、工作寄存器设初值等 • 循环体 • 尽量简练 • 循环控制 • 检查结束条件,及时退出循环

  17. 注意循环嵌套 允许外重循环嵌套内重循环 循环体不能交叉 不能从循环程序外部跳入循环程序内部

  18. 例:10个数据排序 • 常用气泡法(两两比较法):它先使E0和E1进行比较,若E0>E1,则两数交换,否则不动,然后E1和E2进行比较,按同样的原则,决定是否交换,一直比较下去,最后完成E8和E9的比较及交换。经过10-1次比较后,E9位置必然得到数组中的最大值。犹如一个气泡冒到水顶,如此循环即可完成排序。

  19. Size equ 10 Change equ 00H Sort: mov rO, #50H mov r7, #Size-l clr Change Goon: Mov a, @r0 Inc r0 mov B, @r0 cjne a, B, NotEqual sjmp Next NotEqual: jc Next setb Change xch a, @r0 dec rO xch a, @r0 inc rO Next: Djnz r7, Goon Jb Change, Sort Ljmp $ end 将RAM地址为50H~59H中的10个数据,从小到大进行排序(实验1)

  20. 查表程序的设计 主要用于 • 复杂代码转换显示 • 数据补偿:传感器补偿 • 复杂函数计算: Y=SIN(X)

  21. 查表指令 • 在51中建议使用的查表指令为 MOVC A,@A+DPTR 最好不用 MOVC A,@A+PC !

  22. 查表指令的使用 例 求0~9的平方 ORG 0000H LJMP A1 ORG 0080H A1: NOP NOP MOV SP,#60H MOV DPTR,#2000H MOV A,#03H;将0~9之内任意一个数赋值给A。 MOVC A,@A+DPTR A2: SJMP A2 ORG 2000H DB 00h,01h,04h,09h,10h,19h,24h,31h,40h,51h END

  23. 查表指令的使用 例 求0~9的平方 ORG 0000H LJMP A1 ORG 0080H A1: NOP NOP MOV SP,#60H MOV DPTR,#tab MOV A,#03H;将0~9之内任意一个数赋值给A。 MOVC A,@A+DPTR A2: SJMP A2 Tab: DB 00h,01h,04h,09h,10h,19h,24h,31h,40h,51h END

  24. 子程序的设计 • 子程序和运算程序是程序设计的两大支柱。 • 子程序的概念:完成确定任务,并能为其他程序反复调用的程序段。要求子程序在结构上具有通用性和独立性。 例如:代码转换,运算程序等。

  25. 子程序编写的注意事项 • 子程序调用:LCALL • 子程序返回:RET • 子程序嵌套注意的问题:嵌套深度与堆栈区大小的问题. • 子程序第一条必须有标号. • 正确传递参数:入口参数和出口参数. • 注意现场的保护和恢复

  26. 子程序的参数传递 (方法很多)  通过寄存器传递 MAIN: MOV R0,#30H MOV R7,#0AH ACALL SUBR mov b,r1 …………. SUBR: PUSH a mov a,r7 clr c subb a,r0 mov r1,a pop a ret end

  27. 作业1:硬件的基本操作  如何对sfr中的内容进行读写? 如何对52系列单片机的高128字节RAM进行读写?  如何读出片外数据存储器字节地址为2000H中的内容?

  28. 作业2:显示子程序编制 • 编制一个显示子程序 • 要求:待显示量存放在R1中,得到的显示码存放在R2中。 • 数码管段与数据位关系,显示为低电平驱动

  29. END

More Related