Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: MCLucro en 27 Octubre 2014, 02:29 am



Título: Problema Ensamblador 8085
Publicado por: MCLucro en 27 Octubre 2014, 02:29 am
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.