网站大量收购独家精品文档,联系QQ:2885784924

微机原理与应用:第二十二讲 汇编语言经典程序设计举例中.ppt

微机原理与应用:第二十二讲 汇编语言经典程序设计举例中.ppt

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二十二讲 汇编语言经典程序设计中 * 例4-20 编一子程序,根据6个不同的序号获取6个不同的转移地址。设序号i={0,1,2,3,4,5},转移地址={2100H,2400H,2500H,2900H,2D00H,2F00H}。程序执行前,i被存放在R4中。程序执行后,转移地址放在DPTR中。 解:根据题意,x是序号i,y是转移地址。采用线性查表的方法来编制程序,其中转移地址作为数据表格存放在程序存储器中,地址是16位二进制数,用伪指令DW来定义。并采用公式(4-1)求得转移地址,具体算法如以下流程图所示。 * 例4-20流程图 * 例4-20源程序 根据流程图,程序编制如下: ;函数值是双字节数据的查表子程序 ;入口参数:子程序名LUPW,序号i存放在寄存器R4中。 ;出口参数:转移地址放在DPTR中。 * 例4-20源程序续 LUPW: PUSH PSW; 保护现场。 PUSH ACC; MOV A,R4; 将序号送入累加器A。 ADD A,R4; 进行i×2运算。 MOV R4,A; 暂存i×2运算结果。 ADD A,#d1; i×2加偏移量 MOVC A,@A+PC;根据公式(4-1)求得转移地址高8位。 STORE1: MOV DPH,A; 将转移地址高8位存放在DPH。 MOV A,R4; 再将i×2放入累加器A。 ADD A,#d2; i×2加偏移量 MOVC A,@A+PC; 求得转移地址低8位。 STORE2: MOV DPL,A; 将转移地址低8位存放在DPL。 POP ACC; 恢复现场。 POP PSW; RET; 子程序返回。 TABLE: DW 2100H,2200H,2300H,2400H,2500H,2600H;地址表格。 d1 EQU TABLE-STORE1; d2 EQU TABLE-STORE2+1; * 例4-20源程序说明 以上程序在执行第一条查表指令时, PC的当前值+ i×2 +TABLE-STORE1 =表首地址TABLE+ i×2 , 用于取数据的高8位字节。 以上程序在执行第二条查表指令时, PC的当前值+ i×2 +TABLE-STORE2+1 =表首地址TABLE+ i×2 +1, 用于取数据的低8位字节。 * 2、映射查表 当x与y不是简单的线性关系,x的定义域和y的值域都是不规则时,数学上常用映射来表示x与y的关系。 若x的定义域用ai表示,y的值域用bi表示,则为了根据ai求bi,必须在存储器中建立一张表格,表格的结构如表4-2所示。 * 例4-21 编一子程序,根据6个不同的ASCII字符获取6个不同的转移地址。设字符={‘A’,‘D’,‘E’,‘L’,‘M’,‘Z’},转移地址={3000H,3124H,3230H,3356H,3478H,357AH}。程序执行前,字符x被存放在内部数据存储器30H中。程序执行后,若x的值不在定义域中,被认为是非法字符,使F0=0;反之,使F0=1,转移地址y放在DPTR中。 解:根据题意,x是字符,y是转移地址。采用映射查表的方法来编制程序。编程中用伪指令DB定义数据ai,用DW来定义数据bi。表格以00H作为结束符,程序的具体算法如图4-10所示。 * 程序流程图 * 例4-21源程序 ; x和y是不规则数据的查表子程序 ;入口参数:子程序名MAP,x存放在内部数据存储器30H中。 ;出口参数:若F0=0,表示查表失败;若F0=1,表示查表成功, ;转移地址y放在DPTR中。 MAP: PUSH PSW; 保护现场。 PUSH B; PUSH ACC; * 例4-21源程序续 MOV DPTR, #TABLE; 设置数据表格指针。 CLR F0; 清F0。 LOOP: CLR A; 清ACC。 MOVC A, @A+DPTR; 从表格中取数。 STORE1: JNZ CONTI; 判断查表是否结束。 SJMP STOP; 查表结束,转入STOP。 CONTI: CJNE A,30H, NEXT; 若x≠ai,转入NEXT。 INC DPTR; 若x=ai,则调整指针取bi。 STORE2: CLR A; MOVC A, @A+DPTR; MOV B, A; 将转移地址高8位暂时存放在B。 * 例4-21源程序续 INC DPTR; CLR A; MOVC A, @A+DPTR; MOV DPH, B; 将转移地址放入DPTR。 MOV DPL, A; SETB F0; 使F0等于1,表示查表成功。 STOP: POP ACC; 恢复现场。 POP B POP PSW; RET; 子程序返

文档评论(0)

学习让人进步 + 关注
实名认证
内容提供者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档