Problema: multiplique dos números de 8 bits almacenados en las direcciones 2050 y 2051. El resultado se almacena en las direcciones 3050 y 3051. La dirección de inicio del programa se toma como 2000.
Ejemplo –
Algoritmo –
- Estamos sumando el número 43 siete (7) veces en este ejemplo.
- Como la multiplicación de dos números de 8 bits puede tener un máximo de 16 bits , necesitamos un par de registros para almacenar el resultado.
Programa –
Dirección de memoria | Mnemotécnica | Comentario |
---|---|---|
2000 | LHLD 2050 | H←2051, L←2050 |
2003 | XCHG | H↔D, L↔E |
2004 | MOV C, D | C←D |
2005 | MVI D 00 | D←00 |
2007 | LXI H 0000 | H←00, L←00 |
200A | PAPÁ D | HL←HL+DE |
200B | DCR C | C←C-1 |
200C | JNZ 200A | Si la bandera cero = 0, vaya a 200A |
200F | SHLD 3050 | H→3051, L→3050 |
2012 | HLT |
Explicación – Registros utilizados: A, H, L, C, D, E
- LHLD 2050 carga contenido de 2051 en H y contenido de 2050 en L
- XCHG intercambia contenido de H con D y contenido de L con E
- MOV C, D copia el contenido de D en C
- MVI D 00 asigna 00 a D
- LXI H 0000 asigna 00 a H y 00 a L
- DAD D suma HL y DE y asigna el resultado a HL
- DCR C decrementa C en 1
- JNZ 200A salta el contador de programa a 200A si el indicador cero = 0
- SHLD almacena el valor de H en la ubicación de memoria 3051 y L en 3050
- HLT deja de ejecutar el programa y detiene cualquier ejecución adicional
Lea a continuación: Programa en lenguaje ensamblador (microprocesador 8085) para sumar dos números de 8 bits
Otro enfoque:
Podemos hacer la multiplicación de dos números de 8 bits sin usar los comandos DAD y XCHG.
Programa-
DIRECCIÓN | MNEMOTÉCNICA | COMENTARIO |
2000 | LXI H, 2050H | |
2003 | MOV B, M | B←M |
2004 | INXH | |
2005 | MOV C, M | C←M |
2006 | MVI A, 00H | A←00 |
2008 | ARRIBA:AÑADIR B | A<-A+B |
2009 | DCR C | C←C-1 |
200A | SUPERIOR JNZ | |
200D | INXH | |
200E | MOV M, A | M←A |
200F | HLT | terminar el programa |
Explicación: los registros A, H, L, C, B se utilizan para fines generales.
1. LXI H, 2050 cargará el registro de par HL con la dirección 2050 de ubicación de memoria.
2. MOV B, M copia el contenido de la memoria en el registro B.
3. INX H incrementará la dirección del par HL en uno y lo convertirá en 2051H.
4. MOV C,M copia el contenido de la memoria en el registro C.
5. MVI A,00H asigna 00 a A.
6. arriba : ADD B agrega el contenido del acumulador con el registro B y almacena el resultado en el acumulador.
7. DCR C decrementa el registro C.
8. JNZ TOP salta encima hasta que C no se convierte en 0.
9. INX H incrementará la dirección del par HL en uno y lo convertirá en 2052H.
10. MOV M,A copia el contenido de A que es nuestra respuesta al registro M.
11. HLT deja de ejecutar el programa y detiene cualquier ejecución posterior.
Publicación traducida automáticamente
Artículo escrito por AnmolAgarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA