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 –
- 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
- Mover el contenido de L en el acumulador A
- Invierta el contenido de A ejecutando la instrucción RLC 4 veces
- Mueve el contenido de A en L
- Mover el contenido de H en A
- Invierta el contenido de A ejecutando la instrucción RLC 4 veces
- Mover el contenido de L en H
- Mueve el contenido de A en L
- Almacene el contenido de L en la ubicación de memoria 2070 y el contenido de H en la ubicación de memoria 2071
- Cargue el contenido de la ubicación de memoria 2050 en A
- Mover el contenido de A en el registro B
- Cargue el contenido de la ubicación de memoria 2070 en A
- 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
- Si los contenidos de A y B son iguales, cargue el contenido de la ubicación de memoria 2051 en A
- Mover el contenido de A en B
- Cargue el contenido de la ubicación de memoria 2071 en A
- 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
- 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.
- LHLD 2050: carga el contenido de la ubicación de memoria 2050 en L y 2051 en H.
- MOV A, L: mueve el contenido de L en A.
- 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.
- MOV L, A: mueve el contenido de A en L.
- MOV A, H: mueve el contenido de H en A.
- 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.
- MOV H, L: mueve el contenido de L en H.
- MOV L, A: mueve el contenido de A en L.
- SHLD 2070: almacena el contenido de L en 2070 y H en 2071.
- LDA 2050: cargue el contenido de la ubicación de memoria 2050 en A.
- MOV B, A: mueve el contenido de A en B.
- CMP B: compara el contenido de A y B. Establece el indicador cero si el contenido es el mismo; de lo contrario, se reinicia.
- JZ 2024: salta a la ubicación de memoria 2024 si ZF = 1.
- MVI A, FF: almacenar FF en A.
- STA 3050: almacenar contenido de A en 3050.
- HLT: deja de ejecutar el programa y detiene cualquier ejecución posterior.
- LDA 2051: cargue el contenido de la ubicación de memoria 2050 en A.
- MOV B, A: mueve el contenido de A en B.
- LDA 2071: cargue el contenido de la ubicación de memoria 2071 en A.
- CMP B: compara el contenido de A y B. Establece el indicador cero si el contenido es el mismo; de lo contrario, se reinicia.
- JZ 2035: salta a la ubicación de memoria 2035 si ZF = 1.
- MVI A, FF: almacenar FF en A.
- STA 3050: almacenar contenido de A en 3050.
- HLT: deja de ejecutar el programa y detiene cualquier ejecución posterior.
- MVI A, 01: almacenar 01 en A.
- STA 3050: almacenar contenido de A en 3050.
- 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