汇编语言的查表很简单
MOV DPTR,#TAB ;数据表格首地址TAB赋值给数据指针作为基址
MOV A,R0 ;把表格索引值R0(R0=0,1,2,3,4,5,6,7,表示表格里第几个数据)送A作为变址
MOVC A,@A+DPTR ;查表格中基址DPTR(即表格首地址)加上变址A(表格里第几个地址)里的和地址里的内容送到A
MOV P1,A ;将A里面查表所得结果送到P1口输出
……
TAB:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,……
3F是表格里第0个数据,06是表格里第1个数据,5B是表格里第2个数据
例如:R0=2,那我们要查的是表格里第2个数据5B,DPTR中的基址是表格中第0个数据3F所在的地址,这个地址+2就是表格中第2个地址查得数据就是5B
org 0000hmov 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
LOOP:
MOV A, @R0
ADD A, #S_TAB - ($ + 4)
MOVC A, @A + PC
MOV @R1, A
INC R0
INC R1
DJNZ R2, LOOP
RET
S_TAB:
DB 1, 4, 9, 16, 25, 36, 49, 64, 81, 100
完
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)