Frage

Entschuldigung dafür, dass ich dies zu meiner zweiten Z80 -DAA -Frage gemacht habe - ich habe diese Anweisung jetzt so ziemlich implementiert, aber ich bin mir nicht sicher - ist das H -Flag von dieser Anweisung überhaupt festgelegt? Das Z80 -Handbuch besagt 'siehe Anweisung', aber es erwähnt nur die Flagge vor DAA, nicht nachdem sie ausgeführt wurde.

Ich setze die Flags wie folgt fest:

S ist festgelegt, wenn das Ergebnis negativ ist (0x80 & Ergebnis Equals 0x80) Z ist festgelegt, wenn das Ergebnis Null H ist (nicht sicher ist diese Frage) P/V ist auf die Parität des Ergebniss fest wird in Ruhe gelassen. C wird eingestellt, wenn der höhere Knabbern des ursprünglichen Akkumulatorwerts geändert wird

Abgesehen davon scheint die Anweisung wie ich es zu erwarten scheint :-) Ich hoffe, jemand kann dies für mich aufklären, vielen Dank.

War es hilfreich?

Lösung

Es ist eine gute Frage. Ja, das Verhalten von H Flag ist nicht klar dokumentiert, da das Verhalten nicht standardmäßig ist DAA.

Wenn niedrigere Knabbern (am wenigsten signifikante vier Bits) von a eine nicht basische 10-Zahl ist (mehr als 9 wie a, b, c, d, e oder f) oder H Flag ist eingestellt, 6 wird dem Register hinzugefügt. Dies bedeutet, dass Sie auch dann zwingen können, ein Register zu addieren, indem Sie ein Register einstellen, indem Sie das H-Flag einstellen.

Wenn es um Ihre Frage geht, Flag normalerweise bleibt meiner Erfahrung nach unberührt, aber Sie können sich nicht darauf verlassen, da gesagt wird, dass "der Effekt nicht standardmäßig ist", was bedeutet, dass die Flagge möglicherweise sich ändert oder sich möglicherweise nicht von der Situation ändern kann. In solchen Fällen sollten Sie immer glauben, dass H Flag von der betroffen ist DAA Anweisung nach der Ausführung, auch wenn Sie sehen, dass sie in Ihren Tests nicht beeinflusst werden.

Andere Tipps

Ich konnte nur finden hier Dass die Flagge mit halbkörnigem/liehensmäßig durch DAA geändert wird.

Ich empfehle, dass dieses Flag genau so festgelegt wird, wie das AF -Flag (Auxiliary Carry) von den Anweisungen von DAA und DAS auf X86 -CPUs festgelegt wird. Ich sehe keinen Grund, warum es einen Unterschied im Betrieb zwischen i8080/i8085/Z80 und I8086 von DAA/Das.

Das X86 DAA/DAS setzt AF auf 1, wenn es die niedrigsten 4 Bit des Akkumulators um 6 einstellt. Wenn er sie nicht einstellt, wird AF auf 0 zurückgesetzt.

Siehe den Pseudo-Code für DAA und DAS in den X86-CPU-Handbüchern des Intel (oder AMD).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top