CÓDIGO PARA SIMULAR LA INSTRUCCIÓN DAA
Para usar este código, se debe hacer una llamada a la subrutina
daa
(jsr daa
) justo después de haber hecho la suma en el registro A.
No afecta a ningún registro y los flags C, N y Z resultan afectados según
el resultado BCD de la suma.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; daa ;
; simula la instrucciOn daa del ensamblador ;
; se debe usar detAs de la instrucciOn adda para sumas BCD ;
; ;
; Entrada: A-resultado de la suma CC-flags de la suma ;
; Salida: A-resultado ajustado BCD CC-flags ajustados BCD ;
; Registros afectados: ninguno ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
daa:
pshs a,cc
lda ,s ; A=CC
clr ,-s ; S-> 00 CC A
anda #0x20 ; bit H de CC
bne daa_ajusteBajo ; si H=1, hay que ajustar la cifra baja
lda 2,s ; si H=0 y la cifra baja>9, ajustarla
anda #0xF
cmpa #0xA
blo daa_sinAjusteBajo
daa_ajusteBajo:
lda #6
sta ,s
daa_sinAjusteBajo:
lda #1
anda 1,s
bne daa_ajusteAlto ; si flag C=1, hay que ajustar la alta
lda 2,s ; o si C=0 y resultado>0x9A
cmpa #0x9A
blo daa_sinAjusteAlto
daa_ajusteAlto:
lda ,s
ora #0x60
sta ,s
daa_sinAjusteAlto:
lda ,s+ ; aNadimos el ajuste a A
adda 1,s
sta 1,s
tfr cc,a ; el flag C es el or del C original y el de la suma
ora ,s
sta ,s
puls cc,a
tsta ; ajustamos los flags Z y N del resultado
rts
© 2022 Guillermo González Talaván.