4汇编语言程序设计1.pptVIP

  1. 1、本文档共94页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4汇编语言程序设计1.ppt

MOVC A, @A+DPTR; 查表读取第一个字节 XCH A, 31H ; 第一个字节内容存入31H INC DPTR MOVC A, @A+DPTR; 查表读取第二个字节 MOV 32H, A ; 第二字节的内容存入32H TAB: DW 1230H, 1450H, ... DW 2230H, 2440H, ... DW 3120H, 3300H, ... 例 14 在一个温度检测系统中, 温度模拟信号由 10 位A/D输入。将A/D结果转换为对应温度值, 可采用查表方法实现。 先由实验测试出整个温度量程范围内的A/D转换结果, 把A/D转换结果000H~3FFH所对应的温度值组织为一个表存储在程序存储器中, 那么就可以根据检测到的模拟量的A/D转换值查找出相应的温度值。  设测得的A/D转换结果已存入 20H, 21H单元中(高位字节在20H中, 低位字节在21H中), 查表得到的温度值存放在22H,23H单元(高位字节在 22H中, 低位字节在23H中)。 程序如下:  FTMP: MOV DPTR, #TAB ; DPTR←表首地址 MOV A, 21H ; (20H)(21H)×2 CLR C RLC A MOV 21H, A MOV A, 20H RLC A MOV 20H, A MOV A, 21H ; 表首地址+偏移量 CLR C ADDC A, DPL MOV DPL, A MOV A, 20H ADDC A, DPH MOV DPH, A CLR A MOVC A, @A+DPTR; 查表得温度值高位字节 MOV 22H, A CLR A INC DPTR MOVC A, @A+DPTR; 查表得温度值低位字节 MOV 23H, A RET TAB: DW … 4.5 子程序与运算程序设计 4.5.1 子程序和参数传递 一、 子程序的概念 通常把这些基本操作功能编制为程序段作为独立的子程序, 以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令, 当程序执行到调用指令, 就转到子程序中完成规定的操作, 并返回到原来的程序继续执行下去。 二、 子程序的调用 调用子程序的指令有“ACALL”和“LCALL”, 执行调用指令时, 先将程序地址指针PC改变(“ACALL”加 2, “LCALL”加 3), 然后 PC值压入堆栈, 用新的地址值代替。执行返回指令时, 再将 PC值弹出。  子程序调用中, 主程序应先把有关的参数存入约定的位置, 子程序在执行时, 可以从约定的位置取得参数, 当子程序执行完, 将得到的结果再存入约定的位置, 返回主程序后, 主程序可以从这些约定的位置上取得需要的结果, 这就是参数的传递。 注意事项 子程序起始地址必须有标号,为子程序名 末尾一条为RET返回指令 必要时在子程序开头和结尾安排保护和恢复的指令 子程序内必须使用相对跳转指令 参数传递 寄存器或片内RAM传递子程序参数 寄存器传递子程序参数的地址 堆栈传递子程序参数 位地址传递子程序参数 例15 把内部RAM某一单元中一个字节的十六进制数转换成两位ASCII码, 结果存放在内部RAM的连续两个单元中。 假设一个字节的十六进制数在内部 RAM 40H单元, 而结果存入 50H, 51H单元, 可以用堆栈进行参数传递, 程序如下: 例15把内部RAM某一单元中一个字节的十六进制数转换成两位ASCII码, 结果存放在内部RAM的连续两个单元中。 假设一个字节的十六进制数在内部 RAM 40H单元, 而结果存入 50H, 51H单元, 可以用堆栈进行参数传递, 程序如下: MAIN: MOV R1, #50H ; R1 为存结果的指针 MOV A, 40H ; A为需转换的十六进制数 SWAP A ; 先转换高位半字 PUSH ACC ; 压栈 LCALL HEASC ; 调用将低半字节的内容转换;

文档评论(0)

cai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档