Programa 8085 para encontrar el bit establecido del acumulador

Problema: todos los bits de un acumulador son 0 excepto un solo bit que es 1. Escriba un programa en lenguaje ensamblador usando 8085 para determinar qué bit del acumulador es 1. El resultado debe ser un número decimal del 1 al 8 y debe ser almacenado en el registro C.

Ejemplos –

Example 1 : Accumulator Content is 10H (Hex)

Accumulator Content -> 0 0 0 1 0 0 0 0 
Result after execution -> Register C : 5 

Example 2 : Accumulator content is 02H (Hex)

Accumulator Content -> 0 0 0 0 0 0 1 0 
Result after execution -> Register C : 2

Solución:
el problema se puede resolver a través de múltiples métodos. Aquí, se han discutido dos enfoques:

  1. Sin usar Carry Flag
  2. Uso de la bandera de transporte

Método 1: Sin usar Carry Flag

Algoritmo –

  1. Inicializar un contador en forma de registro C
  2. Cargue un registro B con 01 a AND con acumulador y verifique el bit establecido
  3. Y el contenido del acumulador con registro B
  4. Si el resultado de la operación AND es distinto de cero, entonces se obtiene el resultado final
  5. Si el resultado es cero, incrementa el contador C
  6. El contenido del acumulador se desplaza a la derecha usando RRC sin afectar la bandera de acarreo
  7. La búsqueda del siguiente bit se realiza de nuevo.

Programa –

Dirección de inicio del programa -> 3000H

DIRECCIÓN DE MEMORIA MNEMOTÉCNICA COMENTARIO
3000 LXI SP, 5000H Inicializar puntero de pila
3003 MVI C, 01H C <- 01H
3005 MVI B, 01H B <- 01H
3007 Ana B. Y A con B
3008 JNZ 3010H Saltar en el reinicio de cero bandera (Z = 1) a la ubicación 3010H
300B INR C C <- C+1
300C CRR Gire el acumulador a la derecha sin llevar
300D JMP 3007H Salto incondicional a la ubicación 3007H
3010 HLT Detener ejecución

Explicación –

  1. LXI SP, 5000H se usa para inicializar el puntero de la pila en una ubicación más alta de modo que no coincida con el contador del programa
  2. MVI C, 01H almacena el valor del contador que almacenará el resultado final al final de la ejecución
  3. MVI B, 01H almacena 01H para registrar B
  4. ANA B Lógico Y el contenido del registro B con el bit más a la derecha del acumulador para verificar el bit establecido
  5. JNZ 3010H salta a la instrucción Halt si la operación AND da como resultado un valor distinto de cero; implica que el bit está establecido y se obtiene el resultado final
  6. INR C incrementa el contador de bits si la operación AND da como resultado un valor cero; lo que implica que la búsqueda del bit establecido debe continuar
  7. RRC se usa para cambiar el acumulador a la derecha sin afectar la bandera de acarreo
  8. JMP 3007H salta incondicionalmente para verificar el siguiente bit de acumulador
  9. HLT detiene la ejecución del flujo del programa

Método 2: usar la bandera de transporte

Algoritmo –

  1. Inicializar un contador en forma de registro C
  2. El contenido del acumulador se desplaza a la derecha a través de la bandera de acarreo
  3. El contador se incrementa
  4. Si se establece la bandera de acarreo (el bit más a la derecha del acumulador), se obtiene el resultado final
  5. Si se restablece la bandera de acarreo (CY=0), la iteración continúa para el siguiente bit

Programa –

Dirección de inicio del programa -> 3000H

DIRECCIÓN DE MEMORIA MNEMOTÉCNICA COMENTARIO
3000 LXI SP, 5000H Inicializar puntero de pila
3003 MVI C, 00H C <- 00H
3005 RAR Gire el acumulador a la derecha a través de Carry
3006 INR C C <- C+1
3007 JNC 3005H Saltar a la ubicación 3005H si CY=0
300A HLT Detener ejecución

Explicación –

  1. LXI SP, 5000H se usa para inicializar el puntero de la pila en una ubicación más alta de modo que no coincida con el contador del programa
  2. MVI C, 00H almacena el valor del contador que almacenará el resultado final al final de la ejecución
  3. RAR gira el acumulador hacia la derecha a través de la bandera de acarreo de tal manera que después de la instrucción, la bandera de acarreo contiene el bit más a la derecha del acumulador
  4. INR C Incrementa el contador
  5. JNC 3005H salta a la ubicación 3005H si el indicador Carry no está configurado, es decir, el bit más a la derecha del acumulador es 0. No se ejecuta si el indicador Carry está configurado
  6. HLT detiene la ejecución del flujo del programa

Publicación traducida automáticamente

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