Programa 8085 para intercambiar dos números de 8 bits – Part 1

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 –

  1. Cargue el acumulador con el contenido de cualquier ubicación (ya sea 2500 o 2501 o cualquier ubicación dada).
  2. 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.
  3. Almacene el contenido del acumulador en otra ubicación (datos de 2501 a 2500).
  4. 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 –

  1. LDA 2500 – Acumulador de carga con el contenido de la ubicación 2500
  2. MOV B, A: copia el contenido del acumulador al registro B
  3. LDA 2501 – Acumulador de carga con el contenido de la ubicación 2501
  4. STA 2500: almacene el contenido del acumulador en la ubicación 2500
  5. MOV A, B – Copia el contenido del registro B al acumulador
  6. STA 2501: almacene el contenido del acumulador en la ubicación 2501
  7. 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

Antes de los datos de ejecución

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

Después de la ejecución Datos intercambiados

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *