Pregunta

Disculpas por hacer de esta mi segunda pregunta Z80 DAA, ahora he implementado esta instrucción, pero hay una cosa de la que no estoy seguro, ¿está la bandera H establecida por esta instrucción? El manual Z80 dice 'ver instrucción', pero solo menciona la bandera antes de DAA, no después de que se ejecute.

Establecí las banderas de la siguiente manera:

S se establece si el resultado es negativo (0x80 y el resultado es igual a 0x80) Z se establece si el resultado es cero h (no estoy seguro de por lo tanto esta pregunta) P/V está establecido en la paridad del resultado (1 si es incluso, 0 si impar) n se deja solo C se establece si se modifica el mordido más alto del valor del acumulador original

Aparte de esto, la instrucción parece funcionar como espero :-) Espero que alguien pueda aclarar esto para mí, muchas gracias.

¿Fue útil?

Solución

Es una buena pregunta. Sí, el comportamiento de la bandera de H no está claramente documentado porque su comportamiento no es estándar con DAA.

Si el mordisco más bajo (cuatro bits menos significativos) de A es un número no base-10 (mayor que 9 como A, B, C, D, E o F) o La bandera H está configurada, 6 se agrega al registro. Esto significa que incluso si el mordisco más bajo está en el rango de 0-9, puede forzar para agregar 6 a un registro estableciendo el indicador H.

Cuando se trata de tu pregunta, H Flag normalmente permanece intacta en mi experiencia, pero no puede depender de eso porque se dice que "el efecto no es estándar", lo que significa que la bandera H puede cambiar o no cambiar dependiendo de la situación. En casos como este, siempre debe pensar que la bandera H se ve afectada por el DAA Instrucción después de la ejecución, incluso si lo ve, no se ve afectado en sus pruebas.

Otros consejos

Solo pude encontrar aquí que la bandera de medio transporte/préstamo es modificada por DAA.

Recomiendo que esta bandera se establezca exactamente como las instrucciones AF (Auxiliary Carry) están establecidas por las instrucciones DAA y DAS en las CPU X86. No veo ninguna razón por la cual debería haber ninguna diferencia de funcionamiento entre I8080/I8085/Z80's e I8086 DAA/DAS.

El X86 DAA/DAS establece AF a 1 si ajusta los 4 bits más bajos del acumulador por 6. Si no los ajusta, restablece AF a 0.

Vea el pseudo-código para DAA y DAS en los manuales de CPU X86 de Intel (o AMD).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top