Programa 8085 para verificar si el número de 16 bits dado es palíndromo o no

Problema: escriba un programa en lenguaje ensamblador para verificar si el número de 16 bits dado es palíndromo o no. Si el número es palíndromo, almacene 01 en la ubicación de memoria 3050; de lo contrario, almacene FF en la ubicación de memoria 3050.

Nota: un número palíndromo es un número que permanece igual cuando se invierten sus dígitos.

Suponga que el número de 16 bits, para verificar el palíndromo, está almacenado en la ubicación de memoria 2050.

Ejemplos –


Algoritmo –

  1. Cargue el contenido de la ubicación de memoria 2050 en el registro L y el contenido de la ubicación de memoria 2051 en el registro H
  2. Mover el contenido de L en el acumulador A
  3. Invierta el contenido de A ejecutando la instrucción RLC 4 veces
  4. Mueve el contenido de A en L
  5. Mover el contenido de H en A
  6. Invierta el contenido de A ejecutando la instrucción RLC 4 veces
  7. Mover el contenido de L en H
  8. Mueve el contenido de A en L
  9. Almacene el contenido de L en la ubicación de memoria 2070 y el contenido de H en la ubicación de memoria 2071
  10. Cargue el contenido de la ubicación de memoria 2050 en A
  11. Mover el contenido de A en el registro B
  12. Cargue el contenido de la ubicación de memoria 2070 en A
  13. Compare el contenido de A y B. Si el contenido no es el mismo, almacene FF en A y guárdelo en la ubicación de memoria 3050
  14. Si los contenidos de A y B son iguales, cargue el contenido de la ubicación de memoria 2051 en A
  15. Mover el contenido de A en B
  16. Cargue el contenido de la ubicación de memoria 2071 en A
  17. Compare el contenido de A y B. Si el contenido no es el mismo, almacene FF en A y guárdelo en la ubicación de memoria 3050
  18. Si los contenidos de A y B son iguales, almacene 01 en A y guárdelo en la ubicación de memoria 3050

Programa –

DIRECCIÓN DE MEMORIA MNEMOTÉCNICA COMENTARIO
2000 LHLD 2050 L <- M[2050], H <- M[2051]
2003 MOV A, L A <-L
2004 RLC Rotar el contenido del acumulador dejado por 1 bit sin llevar
2005 RLC Rotar el contenido del acumulador dejado por 1 bit sin llevar
2006 RLC Rotar el contenido del acumulador dejado por 1 bit sin llevar
2007 RLC Rotar el contenido del acumulador dejado por 1 bit sin llevar
2008 MOV L, A L <- A
2009 MOV A, H A <-H
200A RLC Rotar el contenido del acumulador dejado por 1 bit sin llevar
200B RLC Rotar el contenido del acumulador dejado por 1 bit sin llevar
200C RLC Rotar el contenido del acumulador dejado por 1 bit sin llevar
200D RLC Rotar el contenido del acumulador dejado por 1 bit sin llevar
200E MOV H, L H <- L
200F MOV L, A L <- A
2010 SHLD 2070 M[2070] <- L, M[2071] <- H
2013 LDA 2050 A <- M[2050]
2016 MOV B, A B <- A
2017 LDA 2070 A <- M[2070]
201A CMP B A-B
201B JZ 2024 Saltar si ZF = 0
201E MVI A, FF A <- 01
2020 STA 3050 M[3050] <- A
2023 HLT FINAL
2024 LDA 2051 A <- M[2051]
2027 MOV B, A B <- A
2028 LDA 2071 A <- M[2071]
202B CMP B A-B
202C JZ2035 Saltar si ZF = 0
202F MVI A, FF A <-FF
2031 STA 3050 M[3050] <- A
2034 HLT FINAL
2035 MVI A, 01 A <- 01
2037 STA 3050 M[3050] <- A
203A HLT FINAL

Explicación: los registros A, H, L, B se utilizan para fines generales.

  1. LHLD 2050: carga el contenido de la ubicación de memoria 2050 en L y 2051 en H.
  2. MOV A, L: mueve el contenido de L en A.
  3. RLC: desplaza el contenido de A a la izquierda un bit sin acarreo. Repita la instrucción actual 4 veces para que el contenido de A se invierta.
  4. MOV L, A: mueve el contenido de A en L.
  5. MOV A, H: mueve el contenido de H en A.
  6. RLC: desplaza el contenido de A a la izquierda un bit sin acarreo. Repita la instrucción actual 4 veces para que el contenido de A se invierta.
  7. MOV H, L: mueve el contenido de L en H.
  8. MOV L, A: mueve el contenido de A en L.
  9. SHLD 2070: almacena el contenido de L en 2070 y H en 2071.
  10. LDA 2050: cargue el contenido de la ubicación de memoria 2050 en A.
  11. MOV B, A: mueve el contenido de A en B.
  12. CMP B: compara el contenido de A y B. Establece el indicador cero si el contenido es el mismo; de lo contrario, se reinicia.
  13. JZ 2024: salta a la ubicación de memoria 2024 si ZF = 1.
  14. MVI A, FF: almacenar FF en A.
  15. STA 3050: almacenar contenido de A en 3050.
  16. HLT: deja de ejecutar el programa y detiene cualquier ejecución posterior.
  17. LDA 2051: cargue el contenido de la ubicación de memoria 2050 en A.
  18. MOV B, A: mueve el contenido de A en B.
  19. LDA 2071: cargue el contenido de la ubicación de memoria 2071 en A.
  20. CMP B: compara el contenido de A y B. Establece el indicador cero si el contenido es el mismo; de lo contrario, se reinicia.
  21. JZ 2035: salta a la ubicación de memoria 2035 si ZF = 1.
  22. MVI A, FF: almacenar FF en A.
  23. STA 3050: almacenar contenido de A en 3050.
  24. HLT: deja de ejecutar el programa y detiene cualquier ejecución posterior.
  25. MVI A, 01: almacenar 01 en A.
  26. STA 3050: almacenar contenido de A en 3050.
  27. HLT: deja de ejecutar el programa y detiene cualquier ejecución posterior.

Publicación traducida automáticamente

Artículo escrito por AmishTandon 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 *