ad2.asm
来自「基于80C51的一个例子程序,实现了流水灯操作」· 汇编 代码 · 共 98 行
ASM
98 行
BYTE_LEN EQU 3
SUM EQU 30H
ADDR1 EQU SUM+BYTE_LEN
ORG 0000H
JMP START
ORG 0040H
START:
MOV R5,#0AH
MOV R6,#05AH
CALL AD
MAIN:
JMP MAIN
; IN: R5,R6
; OUT: SUM
AD:
CALL CLR_SUM
MOV R4,#12
AD_NEXT1: CALL SHR_16
JNC AD_NEXT2
CALL READ_TABLE
CALL BCD_ADD
AD_NEXT2: DJNZ R4,AD_NEXT1
RET
; IN:R5,R6
; OUT: CF, R5,R6
SHR_16:
MOV A,R5
RRC A
MOV R5,A
MOV A,R6
RRC A
MOV R6,A
RET
CLR_SUM:
MOV R0,#SUM
MOV R2,#BYTE_LEN
CLR A
CLR_SUM_NEXT: MOV @R0,A
INC R0
DJNZ R2,CLR_SUM_NEXT
RET
; IN : R4,BYTE_LEN
; OUT: @R1
READ_TABLE:
MOV R1,#ADDR1
MOV R2,#BYTE_LEN
MOV A,R4
DEC A
MOV B,#BYTE_LEN
MUL AB
MOV B,A
MOV DPTR,#TABLE
READ_TABLE_NEXT: MOV B,A
MOVC A,@A+DPTR
MOV @R1,A
MOV A,B
INC DPTR
INC R1
DJNZ R2,READ_TABLE_NEXT
RET
TABLE:
DB 00H,00H,50H ;1
DB 00H,00H,25H ;2
DB 00H,50H,12H ;3
DB 00H,25H,06H ;4
DB 50H,12H,03H ;5
DB 25H,56H,01H ;6
DB 12H,78H,00H ;7
DB 06H,39H,00H ;8
DB 53H,19H,00H ;9
DB 76H,09H,00H ;10
DB 88H,04H,00H ;11
DB 44H,02H,00H ;12
; IN: @R0,@R1,R2= BYTE LEN
; OUT: @R0
BCD_ADD:
MOV R0,#SUM
MOV R1,#ADDR1
MOV R2,#BYTE_LEN
CLR C
BCD_ADD_NEXT: MOV A,@R0
ADDC A,@R1
DA A
MOV @R0,A
INC R0
INC R1
DJNZ R2,BCD_ADD_NEXT
RET
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?