查表程序设计

查表程序:
所谓查表法,就是对一些复杂的函数运算如sinx,x+x^2等,事先把其全部可能范围的函数值按一定的规律编成表格(实际上是ROM的内存单元)存放在计算机的ROM(是程序存储器)。当用户程序中需要使用这些函数时,直接按编排好的索引寻找答案。这种方法节省了运算步骤,使程序更简便,执行速度更快。在控制应用场合或智能仪器仪表中,经常使用查表法。

为了实现查表功能:在51系列单片机中专门设置了两条查表指令:

MOVC A,@A+DPTR   ;常用,一般DPTR做基地址,A做游标,这样就可以访问一个特定的表格了

MOVC A,@A+PC

例子:
已知数据0~9的平方,设变量x的值在累加器A中,查表后求x^2的值,并放回A中保存。试编写程序

假设:RAM的40H,41H,分别放着03H,09H,求其平方,放在A中

注:这里03H表示十进制3,025H表示十进制25,本来025不等于25,但是为了简便,并且在内存中存的都是16进制,所以这里直接用16进制数值等价于十进制数值

解:源代码入下:

ORG 0000H
LJMP INIT
ORG 0100H
INIT:        ;初始化,向RAM的40H,41H单元中存放3和9用来查表
    MOV R0,#40H
    MOV @R0,#03H
    INC R0
    MOV @R0,#09H
MAIN:
    MOV R0,#40H
    MOV DPTR,#TABLE     ;让DPTR指向TABLE,A中存放表格中的带访问的下标,下标从0开始
    MOV A,@R0      
    MOVC A,@A+DPTR    ;访问TABLE[3]
    INC R0
    MOV A,@R0
    MOVC A,@A+DPTR    ;访问TABLE[9]

    SJMP $
TABLE:        ;存放在ROM中的表格,TABLE的地址理论上可以取得ROM中的任何地址
    DB 00H,01H,04H,09H,16H
    DB 25H,36H,49H,64H,81H
    END

分析结果:

寄存器结果:


ROM中的表格:  怎末查看这个表格,很简单,在调试的时候看DPTR里的值,就是表格在ROM中的地址

原文地址:https://www.cnblogs.com/nanfengnan/p/14958562.html