51单片机汇编 数码管动态显示问题

程序如下 我想将中间部分 用一组有规律的语句表示出来 哪个高手会呢

SMG_1 EQU P1.0 ;P1为位选
SMG_2 EQU P1.1
SMG_3 EQU P1.2
SMG_4 EQU P1.3
ORG 0100H
JMP MAIN
ORG 0200H
MAIN:
MOV DPTR,#TMP

CLR A ;千位显示0
CLR SMG_1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_1
INC DPTR

CLR A ;百位显示1
CLR SMG_2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_2
INC DPTR

CLR A ;十位显示2
CLR SMG_3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_3
INC DPTR

CLR A ; 个位显示3
CLR SMG_4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_4
LJMP MAIN

DELAY:
MOV R5,#25
M1: MOV R6,#30
DJNZ R6,$
DJNZ R5,M1
RET
TMP:
DB 0C0H,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H
END
SMG_1 EQU P1.0 ;P1为位选
SMG_2 EQU P1.1
SMG_3 EQU P1.2
SMG_4 EQU P1.3
ORG 0100H
JMP MAIN
ORG 0200H
MAIN:

call disp ;调用子程高行序

LJMP MAIN

DELAY:
MOV R5,#25
M1: MOV R6,#30
DJNZ R6,$
DJNZ R5,M1
RET
TMP:
DB 0C0H,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H

disp: ;原来中间的部分,现在,是一个子程序

MOV DPTR,#TMP

CLR A ;千位羡伍显示0
CLR SMG_1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_1
INC DPTR

CLR A ;百位显示1
CLR SMG_2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_2
INC DPTR

CLR A ;十戚派哗位显示2
CLR SMG_3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_3
INC DPTR

CLR A ; 个位显示3
CLR SMG_4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_4
ret ;后面,要加上这句

END
用c写吧,很方便的。而且也大众化,遇到问题好解决。汇编看着有点头晕。