metà-carry / bandierina metà-prestito nell'istruzione DAA
Domanda
Ci scusiamo per rendere questo la mia seconda domanda Z80 DAA - ho praticamente implementato questa istruzione ora, ma c'è una cosa che non sono sicuro - è l'H flag impostato da questa istruzione a tutti? Il manuale Z80 dice 'vedere istruzioni', ma si parla solo la bandiera prima del DAA, non dopo che è stato eseguito.
Ho impostato le bandiere come segue:
S è impostato se il risultato è negativo (0x80 & risultato uguale a 0x80) Z viene impostato se il risultato è zero H (non sicuro quindi questa domanda) P / V è impostato sulla parità del risultato (1 se anche, 0 se dispari) N è lasciato solo C viene impostato se maggiore nibble del valore dell'accumulatore originale viene modificato
Oltre a questo, l'istruzione sembra esibirsi come mi aspetto che :-) Spero che qualcuno può chiarire questo per me, molte grazie.
Soluzione
E 'una buona domanda. Sì, il comportamento H di bandiera non è chiaramente documentato, perché è comportamento è non standard con DAA
.
Se nibble inferiore (meno significativi quattro bit) di A è un numero non base 10 (superiore a 9 come A, B, C, D, E o F) o H flag è impostato , 6 è aggiunto al registro. Questo significa anche se nibble inferiore è in 0-9 gamma, è possibile forzare aggiungere 6 a un registro impostando bandiera H.
Quando si tratta di tua domanda, H bandiera di solito rimane intatto nella mia esperienza ma non si può dipendere da quello, perché si dice che "l'effetto è non standard", che significa H di bandiera può cambiare o non può cambiare a seconda della situazione. In casi come questo, si dovrebbe sempre pensare H bandiera è influenzato dal istruzioni DAA
dopo l'esecuzione, anche se si vede che non è influenzata nei test.
Altri suggerimenti
ho potuto trovare solo qui che il tempo di portare / prendere in prestito bandiera viene modificata da DAA.
I raccomanda che questo flag sia impostato esattamente come (riporto ausiliaria) flag è impostato AF dalle istruzioni DAA e DAS su CPU x86. Non vedo alcuna ragione per cui non ci dovrebbe essere alcuna differenza nel funzionamento tra i8080 / i8085 / Z80 e di i8086 di DAA / DAS.
Il DAA x86 / DAS imposta AF a 1 se regola i bassi 4 bit dell'accumulatore da 6. Se non li registra, azzera AF a 0.
Vedere le pseudo-codice per DAA e DAS nei manuali di CPU x86 di Intel (o AMD).