From: Scott Dattalo
Translated and optimized for the Scenix SX by Nikolai Golovchenko
;****************************************** ;bcd_add ; ; Computes x = x + y ; where x and y are all 8-bit packed BCD numbers ; Exits with C=1 if x+y > 0x99 and with z=1 if ; x+y = 0x100 or x+y = 0. ; ; Size: 15 instructions ; Execution time including return: 14/15 cycles bcd_add mov W, #$66 ;x = x + y + 0x66 add W, y add x, W clr W sb DC ;if lsn of x + lsn of y < 10 (dec) or W, #$06 ;then remove the extra 6 added above snb C ;Similarly for the msn jmp bcd_add2 or W, #$60 sub x, W ;correct result clrb C ;restore carry ret bcd_add2 sub x, W ;correct result setb C ;restore carry ret
If you don't need to check the carry the routine can be simplified:
;****************************************** ;bcd_add_nc ; ; where x and y are all 8-bit packed BCD numbers ; Exits with z=1 if x+y = 0x100 or x+y = 0. ; ; Size: 10 instructions ; Execution time including return: 12 cycles bcd_add_nc mov W, #$66 ;x = x + y + 0x66 add W, y add x, W clr W sb DC ;if lsn of x + lsn of y < 10 (dec) or W, #$06 ;then remove the extra 6 added above sb C ;Similarly for the msn or W, #$60 sub x, W ;correct result ret
If you don't want to influence input registers, the following routine computes s = x + y:
;****************************************** ;bcd_add_to ; ; Computes s = x + y ; where x and y are all 8-bit packed BCD numbers ; Exits with C=1 if x+y > 0x99 and with z=1 if ; x+y = 0x100 or x+y = 0. ; ; Size: 16 instructions ; Execution time including return: 15/16 cycles bcd_add_to mov W, #$66 ;x = x + y + 0x66 add W, y add W, x mov s, W clr W sb DC ;if lsn of x + lsn of y < 10 (dec) or W, #$06 ;then remove the extra 6 added above snb C ;Similarly for the msn jmp bcd_add_to2 or W, #$60 sub s, W ;correct result clrb C ;restore carry ret bcd_add_to2 sub s, W ;correct result setb C ;restore carry ret
Comments:
file: /Techref/scenix/lib/math/add/bcdp2_sx.htm, 2KB, , updated: 2009/12/7 11:16, local time: 2024/12/22 05:21,
18.227.46.54:LOG IN
|
©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://massmind.org/Techref/scenix/lib/math/add/bcdp2_sx.htm"> PIC Microcontroller Math Method BCD (packed) addition</A> |
Did you find what you needed? |
Welcome to massmind.org! |
Welcome to massmind.org! |
.