Problema: programa de nivel de ensamblaje en 8085 que convierte un número binario en un número ASCII.
Ejemplo –
Suposiciones: el número binario que debe convertirse en valor ASCII se almacena en la ubicación de memoria 2050 y la salida se mostrará en la ubicación de memoria 3050 y 3051.
Algoritmo –
- Carga el contenido de 2050.
- Luego separe el LSB del no. usando la instrucción ANI 0F y MSB del número cargando nuevamente el contenido de 2050 y gírelo un bit 4 veces para invertir el número y luego use ANI 0F nuevamente para separar el dígito.
- Si el dígito es mayor o igual a 0A (en hexadecimal), agregue 37; de lo contrario, agregue 30 para convertirlo en valor ASCII (para verificar que el número sea mayor o igual a A, use la instrucción: CPI 0A y luego verifique la bandera de acarreo, si es 0 significa que el dígito es mayor o igual que A y si 1 dígito es menor que A).
- Ahora almacene los valores ASCII de ambos dígitos en 3050 y 3051 respectivamente.
Programa –
Rutina principal:
DIRECCIÓN | MNEMOTÉCNICA | COMENTARIOS |
---|---|---|
2000 | LDA 2050 | A<-[2050] |
2003 | LLAMA AL 2500 | ir a la dirección 2500 |
2006 | STA 3050 | A->[3050] |
2009 | LDA 2050 | A<-[2050] |
200C | RLC | Rotar el número un bit a la izquierda sin llevar |
200D | RLC | Rotar el número un bit a la izquierda sin llevar |
200E | RLC | Rotar el número un bit a la izquierda sin llevar |
200F | RLC | Rotar el número un bit a la izquierda sin llevar |
2010 | LLAMA AL 2500 | ir a la dirección 2500 |
2013 | STA 3051 | A->[3051] |
2016 | HLT | Termina el programa |
Subrutina:
DIRECCIÓN | MNEMOTÉCNICA | COMENTARIOS |
---|---|---|
2500 | AÑO 0F | A<-[A] Y 0F |
2502 | IPC 0A | [A]-0A |
2504 | JNC 250A | Saltar a [250A] si carryflag es 0 |
2507 | IDA 30 | A<-[A]+30 |
2509 | RETIRADO | Regrese a la siguiente instrucción desde donde se llamó a la dirección de la subrutina en la rutina principal |
250A | IDA 37 | A<-[A]+37 |
250C | RETIRADO | Regrese a la siguiente instrucción desde donde se llamó a la dirección de la subrutina en la rutina principal |
Explicación –
Rutina principal:
- LDA 2050: Esta instrucción cargará el número de la dirección 2050 al acumulador.
- CALL 2500: esta instrucción dejará de ejecutar las instrucciones de la rutina principal después de ella y se moverá a la dirección de subrutina 2500 para realizar la subtarea y después de realizar las instrucciones de la subrutina volverá a la rutina principal y ejecutará las instrucciones después de CALL 2500.
- STA 3050: Esta instrucción almacenará el resultado (realizado en subrutina) del Acumulador en la dirección 3050.
- LDA 2050: esta instrucción volverá a cargar el número de la dirección 2050 en el acumulador, ya que el número cargado anteriormente se cambia en el acumulador.
- RLC: rota el contenido del acumulador un bit a la izquierda sin acarreo.
- RLC: rota el contenido del acumulador un bit a la izquierda sin acarreo.
- RLC: rota el contenido del acumulador un bit a la izquierda sin acarreo.
- RLC: rota el contenido del acumulador un bit a la izquierda sin acarreo.
(Aplicando RLC 4 veces se invertirá el contenido del Acumulador) - 9. CALL 2500: esta instrucción dejará de ejecutar las instrucciones de la rutina principal después de ella y se moverá a la dirección de subrutina 2500 para realizar la subtarea y después de realizar las instrucciones de la subrutina volverá a la rutina principal y ejecutará las instrucciones después de CALL 2500.
- 10. STA 3051: Esta instrucción almacenará el resultado (realizado en subrutina) del Acumulador en la dirección 3051.
- 11. HLT: Esta instrucción terminará el programa.
Subrutina:
- ANI 0F: esta instrucción separará el LSB del número presente en el acumulador y almacenará el resultado nuevamente en el acumulador.
- CPI 0A: esta instrucción comparará el contenido del acumulador con 0A, es decir, [A]-0A.
- JNC 205A: si la bandera de acarreo se convierte en 0, saltará a 205A; de lo contrario, pasará a la siguiente instrucción.
- ADI 30: Agregará 30 al contenido del Acumulador y nuevamente almacenará el resultado en el Acumulador.
- RET: Ahora volverá a la rutina principal después de la siguiente instrucción de CALL y comenzará a ejecutar las instrucciones de la rutina principal.
Agregará 37 al contenido del Acumulador y nuevamente almacenará el resultado en el Acumulador. - RET: Ahora volverá a la rutina principal después de la siguiente instrucción de CALL y comenzará a ejecutar las instrucciones de la rutina principal.
Artículo siguiente: programa 8085 para convertir números BCD de 8 bits en código ASCII
Publicación traducida automáticamente
Artículo escrito por AashutoshChauhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA