Buenas, tengo un ejercicio que no logro resolver.
El ejercicio en cuestión es el siguiente:
2. Suma y resta de números decimales.
a. Sumar y restar dos números que se encuentran en formato decimal en las posiciones de memoria 0x0100 y 0x0101.
b. La opción de suma o resta viene dada en el puerto 00: 0x00 -> suma; 0x01 -> resta
c. Almacenar el resultado en las posiciones 0x0102 y 0x0103, donde la primera posición almacena los dos cifras decimales menos significativas y la segunda almacena las dos más significativas (00 ó 01 dependiendo del posible acarreo decimal).
d. Sirva como “pista” el estudio de la representación BCD (Binary Coded Decimal). Básicamente lo que sucede es que nosotros insertaremos los números directamente como si se tratasen de decimales, nos olvidamos de las cifras “A” a la “F”.
e. Asimismo, debemos tener en cuenta que el internamente procesador sigue considerando todos los números como hexadecimales, por lo que las operaciones aritméticas se realizarán en dicha base.
f. Puesto que el resultado final aparecerá en hexadecimal, a continuación de dicha operación habrá que aplicar un proceso de ajuste decimal para obtener el valor correcto, como si hubiésemos realizado la operación matemática en base 10.
Por ejemplo, si quiero sumar 88 y 12 tendría que dar esto:
0x0100 88
0x0101 12
0x0102 00
0x0103 01
0xYYYY se refiere a la posición de memoria. Muchas gracias de antemano!
Mi código es el siguiente:
mvi h,01
mvi l,00
mov a,m
mov b,a
inr l
mov a,m
mov c,a
inr l
add b
daa
jnc noacarreo
acarreo: mov m,a
inr l
mvi c,01
hlt
jc acarreo
noacarreo: mov m,a
hlt
Lo que pasa que al realizar la suma anterior me da 88+12=a0, cuando tendría que darme 00.
El código es un prototipo, pero teniendo este problema no lo puedo terminar.