Suma y resta de números BCD, traducido de: http://icarus.ticalc.org/articles/z80_faq.html * SUMA BCD: ------------ Entrada: HL = Dirección base (en memoria) del 1er operando a sumar. DE = Dirección base del segundo operando a sumar. B = Longitud de los números (Ambos registros deben de apuntar direcciones de memoria que contengan una ristra de "B" dígitos BCD). Salida: Los datos apuntados por HL cambiarán y valdrán la suma. ld a, b or a ret z ;test whether length = 0 Loop: ld a, (de) ;get byte of adder adc a, (hl) ;add it to addend, care for carry daa ;convert to BCD-decimal ld (hl), a ;save number back in addend inc hl ;next number inc Dde djnz Loop ;continue until all bytes summed ret * RESTA BCD: ------------ Entrada: HL = Dirección base (en memoria) del 1er operando a restar. DE = Dirección base del sustraendo.. B = Longitud de los números (Ambos registros deben de apuntar direcciones de memoria que contengan una ristra de "B" dígitos BCD). Salida: Los datos apuntados por DE cambiarán y valdrán la resta. ld a, b or a ret z ;test whether length = 0 ex de, hl ;exchange subtrahend and minuend Loop: ld a, (de) ;get byte of minuend sbc a, (hl) ;subtract byte of subtrahend daa ;convert to BCD-decimal ld (de), a ;save number back in minuend inc hl ;next number inc de djnz Loop ;continue until all bytes summed ret