En el microprocesador 8085, ¿cómo puedo borrar / restablecer todas las banderas (s, z, ac, p, cy) sin afectar el contenido del acumulador? [duplicar]

1

Solo conozco el código en el que se ven afectados los contenidos del acumulador. No es un duplicado, ya que solicité una solución que no afecta al acumulador.

    

2 respuestas

1

Puede restablecer todos los indicadores ejecutando instrucciones que los afectan adecuadamente. Aquí hay un método que solo usa un registro y no pila (este ejemplo usa B): -

 MVI B,0  ; B = 0
 INR B    ; B = 1 (resets Sign, Zero, Parity and Auxiliary Carry flags) 
 STC      ; set Carry flag
 CMC      ; complement Carry flag

La instrucción INR (Increment Register) establece los indicadores S, Z, P y AC según el resultado del incremento. 1 es positivo y no cero, por lo que los indicadores S y Z se restablecen. Tiene un número impar de bits '1', por lo que P se restablece, y no hay transferencia desde el bit 3, por lo que se restablece la CA.

INR no afecta el indicador de transporte, por lo que debemos restablecerlo por separado. Desafortunadamente, el 8085 no tiene una instrucción de 'reinicio de carga', pero sí tiene 'set carry' y 'complemento carry'.

Al cargar diferentes números en el registro y / o al variar las otras instrucciones, puede establecer o restablecer las banderas a voluntad. Esto es útil para devolver información de estado a la que se puede responder rápidamente utilizando instrucciones de salto condicional. Los valores de los indicadores pueden representar lo que quieras (por ejemplo, el conjunto de indicadores P no tiene por qué significar "paridad par").

    
respondido por el Bruce Abbott
2

Podrías aprovechar la instrucción POP PSW .

  1. Mueva el contenido actual del acumulador a la parte correspondiente de un par de registros, por ejemplo A - > C

  2. Ponga a cero la otra mitad de ese par de registros

  3. Inserta ese par de registros en la pila

  4. Extraiga el acumulador y PSW de la pila.

Al buscar los mnemónicos reales de 8085 y verificar que es la mitad inferior (frente a la superior) del par de registros que corresponde al acumulador en un POP PSW , se deja como ejercicio para el lector.

Si esto parece una rotonda, aunque es posible que exista una mejor manera, tenga en cuenta que normalmente no hay una razón para hacer lo que está tratando de hacer, aparte de una llamada de subrutina. / retorno o cambio de contexto más drástico como una interrupción de hardware o software (u cosas oscuras como escribir un depurador), por lo que la pila es la fuente más común de reinicialización de las banderas.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas