您现在的位置: 主页 > MCU > 单片机应用 > 查表指令中计算偏移量的简便方法 -
本文所属标签:
为本文创立个标签吧:

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

来源: 网络用户发布,如有版权联系网管删除 2018-09-08 

[导读]
对于复杂的计算,单片机的速度显得偏慢。最好的办法是人工事先算出全部的结果,依次存放在ROM中,需要计算时,直接从ROM中查出结果即可。查表有两条指令: MOVC A, @A + PC MOVC A, @A + DPTR前者不使用

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

本文引用地址: http://www.21ic.com/app/mcu/201806/764397.htm

查表有两条指令:
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
;================================================================
;完




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机应用 > 查表指令中计算偏移量的简便方法 -
 

"查表指令中计算偏移量的简便方法 -"的相关文章

网站地图

围观()