add_bcd.asm

来自「PIC单片机开发的功能函数:加减乘除转换」· 汇编 代码 · 共 80 行

ASM
80
字号
;******************* 无符号 BCD 加法  ***************
;
;       This routine performs a 2 Digit Unsigned BCD Addition
; It is assumed that the two BCD numbers to be added are in
; locations Num_1 & Num_2. The result is the sum of Num_1+Num_2
; and is stored in location Num_2 and the overflow carry is returned
; in location Num_1
;
;   Performance :
;               Program Memory  :       25
;               Clock Cycles    :       17   ( worst case )
;
;*******************************************************************;
;
Num_1   equ     8       ; 加数寄存器,加法和的高位寄存器。
result  equ     8
;
Num_2   equ     9       ; 加数寄存器,加法和的低位寄存器。
O_flow  equ     9
; 其它的寄存器自己定义    
;
BCDAdd 
 movf    Num_1,W
	 clrf    Num_1           ;clear num_1
	 addwf   Num_2,1         ; do binary addition
	 btfsc   STATUS,C        ;< 256 then skip
	 goto    inc_n1n2        ;else inc all
	 movlw   66              ;add 66
	 addwf   Num_2,1         ;/
	 btfss   STATUS,DC       ;half carry?
	 goto    sub_06          ;no then subtract
	 btfss   STATUS,C        ;full carry?
	 goto    sub_60          ;yes then subtract
inc_n1  
incf    Num_1,1         ;inc it
	  retlw   0               ;clr w
sub_06
  btfss   STATUS,C        ;full carry
	  goto    sub_66          ;yes subtract 66
	  movlw   6               ;else subtract 6
	  goto    sub_com         ;do common
sub_66
      movlw   66              
sub_com
 subwf   Num_2,1                   
	  retlw   0
sub_60
      movlw   60
	  goto    sub_com
inc_n1n2
	  movlw   66
	  addwf   Num_2,1
	  goto    inc_n1
;
;********************************************************************
;               测试程序(注意它怎样使用该子程序)
;*********************************************************************
main   
 movlw   99
	 movwf   Num_1      ; Set Num_1 = 99 ( max BCD digit )
	 movlw   99
	 movwf   Num_2      ; Set Num_2 = 99
;
	 call    BCDAdd     ; After addition, Num_2 = 98
;                          ;  and Num_1 = 01 ( 99+99 = 198 -> max number )
;
self    goto    self     ;如不是测试程序,这句无用
;
;
	org     1FF
	goto    main
;
	END






⌨️ 快捷键说明

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