Problema: escriba un programa en lenguaje ensamblador para sumar dos números BCD de 16 bits con microprocesador 8086 de acarreo.
Ejemplo –
Algoritmo –
- Cargue la parte inferior de ambos números BCD de 16 bits en diferentes ubicaciones.
- Suma cada número sumando primero su parte inferior.
- Repita el paso anterior también agregando el acarreo, si corresponde.
- Haga la parte inferior del registro 00 y agregue el acarreo. Esto se hace para obtener el acarreo.
- Muestra todos los números con la parte más alta como acarreo, la parte media como suma de los 8 bits BCD más altos y la parte más baja como los 8 bits BCD más bajos.
Programa –
Dirección de memoria | Mnemotécnica | Comentarios |
---|---|---|
0400 | MOV AL, [500] | AL ← [500] |
0404 | BL MOV, [502] | BL ← [502] |
0408 | AÑADIR AL, BL | AL ← AL+BL |
040A | DAA | Ajuste decimal AL |
040B | MOV [600], AL | LA → [600] |
040F | MOV AL, [501] | AL ← [501] |
0413 | MOV BL, [503] | BL ← [503] |
0417 | ADC AL, BL | AL ← AL+BL+CY |
0419 | DAA | Ajuste decimal AL |
041A | MOV [601], AL | AL → [601] |
041E | MOV AL, 00 | AL ← 00H |
0420 | CDA AL, AL | AL ← AL+AL+CY |
0422 | MOV [602], AL | AL → [602] |
0426 | HLT | Detener ejecución |
Explicación –
- MOV AL, [500] mueve el valor almacenado en la ubicación de memoria 500 al registro AL.
- MOV BL, [502] mueve el valor almacenado en la ubicación de memoria 500 al registro BL.
- ADD AL, BL suma los valores en los registros AL y BL.
- DAA suma 6 al dígito que es mayor que 9.
- MOV [600], AL muestra el valor agregado a la ubicación de memoria 600.
- MOV AL, [501] mueve el valor almacenado en la ubicación de memoria 501 al registro AL.
- MOV BL, [503] mueve el valor almacenado en la ubicación de memoria 503 al registro BL.
- ADC AL, BL suma los valores en los registros AL y BL y lleva (si los hay).
- MOV BL, [503] mueve el valor almacenado en la ubicación de memoria 503 al registro BL.
- MOV [601], AL muestran el valor agregado en la ubicación de memoria 601.
- MOV AL, 00 mueve 00 en el registro AL.
- ADC AL, AL suma los valores en los registros AL y AL y lleva (si los hay).
- MOV [602], AL muestran el valor agregado en la ubicación de memoria 602.
- HLT detiene la ejecución.
Siguiente artículo relacionado: programa 8086 para sumar dos números BCD de 8 bits