Problema: escriba un programa en lenguaje ensamblador en 8085 para buscar un número dado en una array de n números. Si se encuentra el número, almacene F0 en la ubicación de memoria 3051; de lo contrario, almacene 0F en 3051.
Suposiciones: el recuento de elementos en una array se almacena en la ubicación de memoria 2050. La array se almacena desde la dirección de memoria inicial 2051 y el número que el usuario desea buscar se almacena en la ubicación de memoria 3050.
Ejemplos –
Algoritmo –
- Haga que el puntero de memoria apunte a la ubicación de memoria 2050 con la ayuda de la instrucción LXI H 2050
- Almacene el valor del tamaño de la array en el registro C
- Número de tienda a buscar en el registro B
- Incremente el puntero de memoria en 1 para que apunte al siguiente índice de array
- Almacene el elemento de la array en el acumulador A y compárelo con el valor de B
- Si ambos son iguales, es decir, si ZF = 1, almacene F0 en A y almacene el resultado en la ubicación de memoria 3051 y vaya al paso 9
- De lo contrario, almacene 0F en A y guárdelo en la ubicación de memoria 3051
- Disminuya C en 01 y verifique si C no es igual a cero, es decir, ZF = 0, si es cierto, vaya al paso 3; de lo contrario, vaya al paso 9
- fin de programa
Programa –
DIRECCIÓN DE MEMORIA | MNEMOTÉCNICA | COMENTARIO |
---|---|---|
2000 | LXI H 2050 | Alto <- 20, Largo <- 50 |
2003 | MOV C, M | C <- M |
2004 | LDA 3050 | A <- M[3050] |
2007 | MOV B, A | B <- A |
2008 | INXH | HL <- HL + 0001 |
2009 | MOV A, M | A <-M |
200A | CMP B | A-B |
200B | JNZ 2014 | Saltar si ZF = 0 |
200E | MVI A F0 | A <- F0 |
2010 | STA 3051 | M[3051] <- A |
2013 | HLT | FINAL |
2014 | MVI A 0F | A <- 0F |
2016 | STA 3051 | M[3051] <- A |
2019 | DCR C | C <- C – 01 |
201A | JNZ 2008 | Saltar si ZF = 0 |
201D | HLT | FINAL |
Explicación – Registros utilizados A, B, C, H, L y memoria indirecta M:
- LXI H 2050 – inicialice el registro H con 20 y el registro L con 50
- MOV C, M: asigna el contenido de la ubicación de memoria indirecta, M, que está representado por los registros H y L al registro C
- LDA 3050: carga el contenido de la ubicación de memoria 3050 en el acumulador A
- MOV B, A – mueve el contenido de A en el registro B
- INX H: incrementa HL en 1, es decir, M se incrementa en 1 y ahora M apuntará a la siguiente ubicación de memoria
- MOV A, M: mueve el contenido de la ubicación de memoria M en el acumulador A
- CMP B: resta B de A y actualiza las banderas de 8085
- JNZ 2014: salta a la ubicación de memoria 2014 si se restablece el indicador cero, es decir, ZF = 0
- MVI A F0 – asignar F0 a A
- STA 3051: almacena el valor de A en 3051
- HLT: deja de ejecutar el programa y detiene cualquier ejecución adicional
- MVI A 0F – asignar 0F a A
- STA 3051: almacena el valor de A en 3051
- DCR C – decrementar C en 01
- JNZ 2008: salta a la ubicación de memoria 2008 si se restablece el indicador cero
- HLT: deja de ejecutar el programa y detiene cualquier ejecución adicional
Publicación traducida automáticamente
Artículo escrito por AmishTandon y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA