; 使用MOVCA,@A+PC指令实现查表法计算平方值的程序
; 将内存30H到31H地址中的数值转换为其平方值并存储于40H至49H地址
; 预先在30H到39H地址中存储了1至10的数值
.org 0000h
mov 30h, #01h
mov 31h, #03h
mov 32h, #05h
mov 33h, #07h
mov 34h, #09h
mov 35h, #02h
mov 36h, #04h
mov 37h, #06h
mov 38h, #08h
mov 39h, #10h
call SquareTable
sjmp $
; 平方查找子程序
SquareTable:
MOV R0, #30H ; 设置数据源起始地址
MOV R1, #40H ; 设置目标存储区域起始地址
MOV R2, #10 ; 循环次数设置为10次
Loop:
MOV A, @R0 ; 读取当前处理的数据
ADD A, #SQUARE_TAB - ($ + 4) ; 计算偏移量
MOVC A, @A + PC ; 从程序存储器中读取对应的平方值
MOV @R1, A ; 将计算结果存储到指定位置
INC R0 ; 移动到下一个数据
INC R1 ; 更新目标存储地址
DJNZ R2, Loop ; 判断是否完成所有数据的处理
RET ; 返回主程序
SQUARE_TAB:
DB 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 ; 存储1至10的平方值
end