Problema: escriba un programa en lenguaje ensamblador para intercambiar dos números de 8 bits almacenados en un microprocesador 8085.
Suposición: Suponga que hay dos números de 8 bits. Un número de 8 bits se almacena en la dirección de memoria de la ubicación 2500 y otro se almacena en la dirección de memoria de la ubicación 2501. Deje que 05 se almacene en la ubicación 2500 y que 06 se almacene en la ubicación 2501 (no necesariamente, pueden ser dos números cualquiera de 8 bits).
Ejemplo –
Algoritmo –
- Cargue el acumulador con el contenido de cualquier ubicación (ya sea 2500 o 2501 o cualquier ubicación dada).
- Mueva el contenido del acumulador a cualquier registro (digamos B) para que el contenido de otra ubicación pueda cargarse en el acumulador y los datos anteriores del acumulador se guarden en el registro.
- Almacene el contenido del acumulador en otra ubicación (datos de 2501 a 2500).
- Cargue el acumulador con el contenido del registro y luego guárdelo en otra ubicación de dirección.
Programa –
Dirección | Mnemotécnica | Comentarios |
---|---|---|
2000 | LDA 2500 | A<-[2500] |
2003 | MOV B, A | B<-A |
2004 | LDA 2501 | A<-[2501] |
2007 | STA 2500 | 2500<-[A] |
200A | MOV A, B | A<-B |
200B | STA 2501 | 2501<-[A] |
200E | HLT | Termina el programa |
Explicación –
- LDA 2500 – Acumulador de carga con el contenido de la ubicación 2500
- MOV B, A: copia el contenido del acumulador al registro B
- LDA 2501 – Acumulador de carga con el contenido de la ubicación 2501
- STA 2500: almacene el contenido del acumulador en la ubicación 2500
- MOV A, B – Copia el contenido del registro B al acumulador
- STA 2501: almacene el contenido del acumulador en la ubicación 2501
- HLT – Termina el programa
Enfoque: 2 Uso de la instrucción XRA:
Podemos usar la operación XOR para intercambiar 2 números
sin usar variables adicionales, sabemos que podemos intercambiar x e y usando:
x = x ^ y
y = x ^ y
x = x ^ y
De la misma manera podemos usar registros para encontrar soluciones para el mismo. La implementación se proporciona a continuación:
Dirección | Mnemotécnica | Comentarios/ Explicación |
---|---|---|
2000 | LXI H,2050H | Cargue el par de registros HL como 2050H, que actuará como puntero de memoria. |
2003 | MOV A, M | Mueva el contenido de la ubicación de memoria [2050H] al Acumulador A. |
2004 | INXH | Incrementa el puntero de memoria en 1. Entonces [HL] = 2051H, para obtener los siguientes datos. |
2005 | MOV C, M | Mueva nuevamente el contenido del puntero de memoria 2051H al Registro C. Entonces tenemos dos registros de datos A y C |
2006 | XRA C | XOR A y C es decir { A <—-A ^ C} |
2007 | MOV D, A | Mueva el valor del acumulador XORed en el registro D para un cálculo adicional. |
2008 | XRA C | De nuevo haz la operación XOR con el registro C. Tenga en cuenta que aquí el contenido del acumulador se copia en el registro D, no desaparece de A. |
2009 | MUEVE UN | Mueva el contenido del acumulador XORed por segunda vez en el registro E. que actuará como { y <—– x ^ y} aquí y = Registro E . |
200A | XRA D | Nuevamente Acumulador XOR con registro D. El registro D contiene el valor de la primera operación XOR, que es la variable x en la programación general. |
200B | STA 2050H | El acumulador ahora contiene el valor del registro C que inicialmente era el segundo valor en la memoria y lo almacena en la ubicación 2050H . |
200E | MOV A, E | Ahora mueva el valor del Registro E al Acumulador A, que será el valor del acumulador original que estaba inicialmente en la ubicación 2050H. |
200F | STA 2051H | Almacene el valor acumulador de los datos intercambiados en la ubicación de memoria 2051H. Por lo tanto, nuestra operación de intercambio se realiza con éxito. |
2012 | HLT | Detener/Detener la ejecución del programa |
- Código + Salida:
Código Inicial + Contador de Ubicación como: 2050H y 2051H. [2050H] = 4C y [2051H] =3E
Código después del ensamblaje y la ejecución:
Se realiza el intercambio y los contadores de ubicación se configuran como [2050H] = 3E y [2051H] = 4C
De esta forma, con el uso de la instrucción XOR disponible en el microprocesador 8085, podemos intercambiar dos números de 8 bits.
Enfoque: 3>> Usando la instrucción XCHG:
Dirección | Mnemotécnica | Comentarios/Explicación |
---|---|---|
2000 | LDA2500H | Cargue el acumulador desde la ubicación de memoria 2500H |
2003 | MOV H, A | Mueva los datos del acumulador cargado al registro H |
2004 | LDA2501H | Ahora muévase una ubicación más y obtenga datos de la ubicación de memoria 2501H en el acumulador |
2007 | MOV D, A | Mueva nuevamente los datos del acumulador al registro D. Ahora tenemos dos datos de 8 bits en los registros H y D. |
2008 | XCHG | La instrucción XCHG intercambiará el contenido del par de registros HL con el par de registros DE. |
2009 | MOV A, H | Ahora, debido al intercambio, tenemos H <- D y D <- H . Así que ahora mueva el valor del registro H en el Acumulador A. |
200A | STA 2500H | Almacene el valor del acumulador en la ubicación 2500H que anteriormente contenía el valor del registro H original pero ahora contiene el valor del registro D. |
200D | MOV A, D | Nuevamente mueva el contenido del registro D al Acumulador A. Este ahora contendrá el valor intercambiado del registro H. |
200E | STA 2501H | Guarde el valor del acumulador intercambiado en la ubicación 2501H. que ahora tendrá valor de intercambio del registro H. Así que el proceso de intercambio está hecho. |
2011 | HLT | Detener/detener la ejecución del programa |
- Antes del intercambio (fase de datos de entrada): [2500H] = 1F, [2501H] = 9E
- Después del programa ensamblado y cargado: Datos intercambiados: [2500H] = 9E, [2501H] = 1F
Por lo tanto, de esta manera, podemos intercambiar dos datos de 8 bits usando los 3 enfoques anteriores y usando diferentes instrucciones.
Publicación traducida automáticamente
Artículo escrito por Deepanshi_Mittal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA