第四章汇编语言程序设计教材分析.pptVIP

  • 149
  • 0
  • 约6.08千字
  • 约 43页
  • 2017-02-09 发布于湖北
  • 举报
4.3.4 子程序设计 子程序的概念 通常把那些基本操作功能编制为一个独立夫人程序段, 这些就是可供不同程序或同一程序反复调用的子程序。在程序中需要执行这种操作的地方放置一条调用指令, 当程序执行到调用指令, 就转到子程序中完成规定的操作, 并返回到原来的程序继 续执行下去。 * * 子程序结构与设计注意事项 子程序中必须有一条子程序返回指令(RET),其功能是当子程序执行完后能自动返回到主程序中去。 注意事项: (1)子程序名 (2)明确入口条件、出口条件 (3)注意保护现场和恢复现场 * * 子程序的调用与返回 子程序的调用 调用子程序的指令有“ACALL”和“LCALL”, “LCALL”:16位入口地址 “ACALL”:11位入口地址,另5位由PC提供 执行调用指令时, 先将程序地址指针PC改变(“ACALL”加 2, “LCALL”加 3), 然后 PC值压入堆栈, 用新的地址值代替。执行返回指令时, 再将 PC值弹出。  * * 子程序调用中, 主程序应先把有关的参数存入约定的位置, 子程序在执行时, 可以从约定的位置取得参数, 当子程序执行完, 将得到的结果再存入约定的位置, 返回主程序后, 主程序可以从这些约定的位置上取得需要的结果, 这就是参数的传递。 子程序的调用涉及到堆栈,在主程序中必须要正确设置堆栈指针。 子程序嵌套是指在子程序执行过程中,还可以调用另一个子程序。 * * 例4-13 用程序实现C=A*A+B*B。 设A和B均小于10,A存在内部RAM31H单元,B存在内部RAM 32H,把C存入内部RAM 33H单元。 解:本题中包含2个求平方值,把求平方设计为子程序。 子程序名称:SQR 功能:求小于10的数的平方(查表法) 入口参数A,出口参数A * * 主程序: ORG 0800H MOV SP,#60H MOV A,31H LCALL SQR MOV R1,A MOV A,32H LCALL SQR ADD A,R1 MOV 33H,A SJMP $ * * ORG 0900H SQR: ADD A,#01H MOVC A,@A+PC RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END 堆栈变化:画图说明 * * The End 习题: 4-6试编程将内部RAM 40H---60H单元内容传送到外部RAM以2000H为首地址的存储区中 4-7在外部RAM首地址为DATA的存贮器中,有10个字节的数据,试编程将每个字节的最高位无条件置“1” 4-8 编写程序将外部RAM 3000H开始的13个单元中的数据隔一个传送到内部RAM30H开始的区域 4-9编程将外部RAM地址为1000H---1030H的数据块全部搬迁到内部RAM 30H---60H中,并将原来数据全部清零。 4-18设在外部RAM 2000H---2004H单元中,存放有5个压缩BCD码,试编程将它们转换成ASCII码,存放到以2005H为首地址的外部RAM中。 4-21 根据图3-10,设计灯亮移位程序,要求8个发光二极管每次亮1个,点亮40ms。顺次循环右移点亮,循环不止。 4-22 根据图3-10,设计亮灯程序,要求8个发光二极管间隔分成2组,每组4个,2组交叉点亮,变换时间为100ms,反复循环不止。 * * * * 该单片机系统的晶振频率为12MHz 3-14 已知(A)=5Bh,(R1)=40H,(40H)=C3H,(PSW)=81H,试写出各条指令单独执行结果,并说明程序状态字的状态。 (1) XCH A,R1 (2)XCH A,40H (3) XCH A,@R1 (4)XCHD A,@R1 (5) SWAP A (6)ADD A,R1 (7) ADD A,40H (8)ADD A,#40H (9) ADDC A,40H (10)SUBB A,40H (11)SUBB A,#40H 3-18 编程完成下列操作 (1)将外部RAM 1000H单元的所有位取反 (2)将外部RAM 60H单元的高2位清零,低2位取反,其它位保持不变。 * * 3-24 判断下列指令的正误,并说明原因 (1)CLR A (2)CLR E0H

文档评论(0)

1亿VIP精品文档

相关文档