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 + -
显示快捷键?