Código 8085 para convertir número binario a código ASCII

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 –

  1. Carga el contenido de 2050.
  2. 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.
  3. 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).
  4. 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:

  1. LDA 2050: Esta instrucción cargará el número de la dirección 2050 al acumulador.
  2. 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.
  3. STA 3050: Esta instrucción almacenará el resultado (realizado en subrutina) del Acumulador en la dirección 3050.
  4. 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.
  5. RLC: rota el contenido del acumulador un bit a la izquierda sin acarreo.
  6. RLC: rota el contenido del acumulador un bit a la izquierda sin acarreo.
  7. RLC: rota el contenido del acumulador un bit a la izquierda sin acarreo.
  8. RLC: rota el contenido del acumulador un bit a la izquierda sin acarreo.
    (Aplicando RLC 4 veces se invertirá el contenido del Acumulador)
  9. 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. 10. STA 3051: Esta instrucción almacenará el resultado (realizado en subrutina) del Acumulador en la dirección 3051.
  11. 11. HLT: Esta instrucción terminará el programa.

Subrutina:

  1. ANI 0F: esta instrucción separará el LSB del número presente en el acumulador y almacenará el resultado nuevamente en el acumulador.
  2. CPI 0A: esta instrucción comparará el contenido del acumulador con 0A, es decir, [A]-0A.
  3. JNC 205A: si la bandera de acarreo se convierte en 0, saltará a 205A; de lo contrario, pasará a la siguiente instrucción.
  4. ADI 30: Agregará 30 al contenido del Acumulador y nuevamente almacenará el resultado en el Acumulador.
  5. 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.
  6. Agregará 37 al contenido del Acumulador y nuevamente almacenará el resultado en el Acumulador.
  7. 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

Deja una respuesta

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