入坑单片机(7):第7章汇编语言程序设计之查表程序设计

您所在的位置:网站首页 dpl的原理 入坑单片机(7):第7章汇编语言程序设计之查表程序设计

入坑单片机(7):第7章汇编语言程序设计之查表程序设计

2023-12-21 07:09| 来源: 网络整理| 查看: 265

顺序、循环、分支是程序按结构划分,而算术、查表、检索是程序按内容划分,盲猜前者会融进后者,所以我觉得把前者单独拿出来考不合算,比如算术程序设计就能捎带着一块考顺序、循环。

这一集我们来看查表程序设计

查表顾名思义,就是按映射集查找,既然是个找,那线索自然就是位置。

看个例题:

从这个例题中我们要学会的是具有推广意义的查表子程序:

首先,我们得了解个SFR——数据指针DPTR寄存器,它由两个8位的寄存器DPH(高8位)和DPL(低8位)组成。专门用来寄存片外RAM及扩展I/O口进行数据存取时的地址。编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用(即高位字节寄存器DPH和低位字节寄存器DPL)。对外部RAM也能间接寻址。

为啥要弄DPTR呢,因为查表的这个表往往在片外RAM。

查表子程序的一般结构为:设表头+定偏移+存储

查表子程序的复杂程度主要取决于定偏移。

对于单字节比如这个ASCII码的查表,定偏移的指令句群很简单,如果是多字节,那么它是多次单字节+单字节间步进。

它的子程序check1_2:

MOV DPTR,#TABLE

;——————表头

MOV A,R2

ADD A,R2;这时候A=2x

;——————以上三句为一个指令句群,执行计算地址偏移量的功能

MOV R2,A;2x先存到R2中

;——————该句单独为一个句群,为了步进作准备

MOVC A,@A+DPTR

MOV R3,A

:——————以上两句为一个指令句群,执行将查表查到的单字节存储功能

INC R2;R2步进1,表示2x+1

MOV A,R2;

;——————以上两句为一个指令句群,执行步进功能

MOVC A,@A+DPTR

MOV R4,A

;——————以上两句为一个指令句群,执行将查表查到的单字节存储功能

RET

TABLE:DW ……;伪指令DW用来定义程序存储器相邻两个单元的内容为常数,编译器会把常数的高8位放在前,低8位放在后。

所以,我建议的记忆方法是:设表头——算——查——步进——查——步进……表。三字节的与两字节的类似,就是继续步进,我估计要考的话考个双字节就行,整三字节干啥,没必要~

不过还有个狗蛋的事情,前两个单、双字节都是对于表的数据而言,偏移量x都是单字节。如果偏移量x也是双字节的就又麻烦一些:

课本207页子程序如下:

check2_2:MOV DPTR,#TABLE

;——————表头

                  MOV A,R3;取偏移量x的低8位

                  ADD A,R3;低位=2x低位

                  MOV R3,A;低位暂存

                  MOV A,R2;取偏移量x的高8位

                  ADDC A,R2;高位=2x高位+低位进位

                  MOV R2,A;高位暂存

;———————我们可以看到计算偏移量的指令句群膨胀了一倍

                 MOV A,DPL

                 ADD A,R3

                 MOV DPL,A     ;DPL不能直接ADD,需要经过A的中转

;————————以上三句为一个指令句群,执行低位偏移量配低位数据指针功能

                 MOV A,R2

                 ADDC A,DPH

                 MOV DPH,A

;————————以上三句为一个指令句群,执行高位偏移量配高位数据指针功能

;————————这两个句群也可以视为一个大的句群,执行偏移量配指针的功能

                 CLR A;前两个例题中没有,这句是该题特有的,A已结束指针配置的中转任务

                 MOVC A,@A+DPTR;查表,DPTR已经由上一步配置完成

                 MOV R4,A;存高位

;————————以上三句为一个指令句群,执行单字节的查表存储

                 INC DPTR;步进,步进后就是低位了

;————————该句单独为一个句群,执行步进功能

                 CLR A;

                 MOVC A,@A+DPTR

                 MOV R5,A;存低位

;————————以上三句为一个指令句群,执行单字节的查表存储

                  RET

TABLE:DW……

所以我建议的记忆方法仍是:设表头——算——配——查——步进——查——步进……表,

算到查之间多了一步指针配置

查表指令和散转指令结合可以方便的实现程序散转。首先列表入口地址并赋键值

不过这个PPT里没有讲,先不管了。

              



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3