⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcdhex.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
字号:
		.area   BCD_HEX(data,abs)
		.org	0x12f
		
.M_bcdbuf::		.ds	2
.M_hexbuf::		.ds	2
.M_temp::		.ds	7
		.area   BCDHEX(code,rel)		
;|-------------------------------------------|		
;| .Hex2Bcd::For 2 bytes		     |
;| .Input: 				     |	
;|	    ex: hex=1986 bcd=6534	     |
;|	    19 =>.M_hexbuf		     |	
;|	    86 =>.M_hexbuf+1		     |	
;|          call  .Hex2Bcd		     |
;|	result:				     |	
;|	    65 =>.M_bcdbuf		     |	
;|	    34 =>.M_bcdbuf+1		     |	
;|-------------------------------------------|			    	

;--------------------------------------------
.Hex2Bcd::
	lda	#01h
	sta	PP
        lda     #0          
        sta     .M_bcdbuf
        sta     .M_bcdbuf+1
        lda     #8
        sta     .M_temp+1		 
        lda     .M_hexbuf
        sta     .M_temp
.JUMP1:
        lda     .M_temp
        adda    #0
        rolc
        sta     .M_temp
        lda     .M_bcdbuf+1
        call    .Chk_DAA
        addc    .M_bcdbuf+1
        call    .DAA
        sta     .M_bcdbuf+1
        lda     .M_bcdbuf
        call    .Chk_DAA
        addc    .M_bcdbuf
        call    .DAA
        sta     .M_bcdbuf
        lda     .M_temp+1
        deca
        sta     .M_temp+1
        brnz    .JUMP1
        lda     #8
        sta     .M_temp+1
        lda     .M_hexbuf+1
        sta     .M_temp
.JUMP2:
        lda     .M_temp
        adda    #0
        rolc
        sta     .M_temp
        lda     .M_bcdbuf+1
        call    .Chk_DAA
        addc    .M_bcdbuf+1
        call    .DAA
        sta     .M_bcdbuf+1
        lda     .M_bcdbuf
        call    .Chk_DAA
        addc    .M_bcdbuf
        call    .DAA
        sta     .M_bcdbuf
        lda     .M_temp+1
        deca
        sta     .M_temp+1
        brnz    .JUMP2   
        lda     .M_bcdbuf
        ;sta0	.Hbuf
        lda     .M_bcdbuf+1
        ;sta0	.Lbuf  
        ret
;-------------------------------------------        
.Chk_DAA:
        sta    	.M_temp+2	 
        lda     OP1
        sta    .M_temp+3     
        lda     .M_temp+2
        sta     .M_temp+4	 
        addc    .M_temp+4
        brc     .JUMP1$
        anda    #0xf0
        adda    #0
        cmpe    #0xa0
        brc     .JUMP1$
        lda     #0
        sta     .M_temp+6	 
        br      .JUMP2$
.JUMP1$:
        lda     #1
        sta     .M_temp+6
.JUMP2$:
        lda     .M_temp+4
        anda    #0x0f
        adda    #0
        rolc
        cmpe    #0x0a
        brc     .JUMP3$
        lda     #0
        sta     .M_temp+5     
        br      .JUMP4$
.JUMP3$:
        lda     #1
        sta     .M_temp+5     
.JUMP4$:
        lda     .M_temp+3
        sta     OP1
        lda     .M_temp+2
        ret
.DAA:
        sta     .M_temp+4
        lda     .M_temp+5
        anda    #1                  
        brz     .NO_ADD6
        lda     .M_temp+4
        adda    #0x06
        sta     .M_temp+4
.NO_ADD6:
        lda     .M_temp+6
        anda    #1                  
        brnz    .ADD60
        lda     .M_temp+4
        ret
.ADD60:
        lda     .M_temp+4
        adda    #0x60
        suba    #0
        sta     .M_temp+4
        
        ret

;|-------------------------------------------|		
;| .Bcd2Hex::For 2 bytes		     |
;| .Input: 				     |	
;|	    ex: bcd=1986 hex=07c2	     |
;|	    19 =>.M_bcdbuf		     |	
;|	    86 =>.M_bcdbuf+1		     |	
;|          call  .Bcd2Hex		     |
;|	result:				     |	
;|	    07 =>.M_hexbuf		     |	
;|	    c2 =>.M_hexbuf+1		     |	
;|-------------------------------------------|	
;--------------------------------------------
.Bcd2Hex::
	lda	#01h
	sta	PP					 
        lda     .M_bcdbuf		 
        sta     .M_hexbuf
        lda     .M_bcdbuf+1		 
        sta     .M_bcdbuf
        call    .bcdtohex
        lda     .M_bcdbuf
        sta     .M_hexbuf+1
        lda     .M_hexbuf
        sta     .M_bcdbuf
        call    .bcdtohex
        lda     .M_bcdbuf
        sta     .M_hexbuf
        lda     #0
        sta     .M_bcdbuf
        sta     .M_bcdbuf+1
        lda     .M_hexbuf
        sta     .M_temp
.JMP1:
        cmpe    #0
        brz     .JMP2
        lda     .M_bcdbuf+1
        adda    #100
        sta     .M_bcdbuf+1
        lda     .M_bcdbuf
        addc    #0
        sta     .M_bcdbuf
        lda     .M_temp
        deca
        sta     .M_temp
        br      .JMP1
.JMP2:
        lda     .M_bcdbuf+1
        adda    .M_hexbuf+1
        sta     .M_bcdbuf+1
        lda     .M_bcdbuf
        addc    #0
        sta     .M_bcdbuf
        
        lda	.M_bcdbuf
	sta	.M_hexbuf
	;sta0	.Hbuf
	lda	.M_bcdbuf+1
	sta	.M_hexbuf+1	        
        ;sta0	.Lbuf   
        ret
;----------------------bcd to hex-----------------------
.bcdtohex::					;Onebyte
                lda     #0h
                sta     .M_bcdbuf+1
.bcd_1$:        lda     .M_bcdbuf
                suba    #16h
                brnc    .bcd_4$
                sta     .M_bcdbuf
                anda    #0fh
                suba    #0ah
                brz     .bcd_2$
                brnc    .bcd_3$
.bcd_2$:        lda     .M_bcdbuf
                suba    #06h
                sta     .M_bcdbuf
.bcd_3$:        lda     .M_bcdbuf+1
                adda    #10h
                sta     .M_bcdbuf+1
                br      .bcd_1$
.bcd_4$:        lda     .M_bcdbuf
                anda    #0f0h
                cmpe    #0h
                brz     .bcd_5$
                lda     .M_bcdbuf
                suba    #06h
                sta     .M_bcdbuf
.bcd_5$:
                lda     .M_bcdbuf
                adda    .M_bcdbuf+1
                sta     .M_bcdbuf
                ;sta0	.Lbuf
                ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -