查表指令中计算偏移量的简便方法

对于复杂的计算,单片机的速度显得偏慢。
最好的办法是人工事先算出全部的结果,依次存放在ROM中,需要计算时,直接从ROM中查出结果即可。

查表有两条指令:
    MOVC A, @A + PC
    MOVC A, @A + DPTR
前者不使用DPTR,节省资源,但是其中有个“偏移量”颇为难算,它涉及到指令机器码的字节数,通常是编译一遍之后,由人工来数,“偏移量”究竟是应该多少,经常有错误出现,且不便于修改程序。

做而论道有一个利用编译系统自动计算偏移量的方法,下面给出一个例子。
;================================================================
要求利用MOVC A, @A + PC指令,编写一查平方表程序,将片内30H ~ 39H内的数查出平方值,然后送入40H ~ 49H单元。
应该预先在30H ~ 39H存入数据为 1,3,5,7,9,2,4,6,8,10。
;-----------------------------------------------------------------------
程序如下:
    org 0000h
    mov 30h, #1               ;先存放预置数据
    mov 31h, #3
    mov 32h, #5
    mov 33h, #7
    mov 34h, #9
    mov 35h, #2
    mov 36h, #4
    mov 37h, #6
    mov 38h, #8
    mov 39h, #10

    call SQRT                 ;调用子程序

    sjmp $

;-----------------------------------------------------------------------
;查表法求平方的程序如下。

SQRT:             
    MOV R0, #30H             ;数据源地址
    MOV R1, #40H             ;数据目的地址
    MOV R2, #10              ;共有10个数
LOOP:
    MOV A, @R0
    ADD A, #S_TAB - CHA     ;自动计算“偏移量”
    MOVC A, @A + PC
CHA:
    MOV @R1, A
    INC R0
    INC R1
    DJNZ R2, LOOP
    RET

S_TAB:
    DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196
;================================================================
;完

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值