Gameboy (z80) Opcode Zweck

8

Ich habe an einem Gameboy-Emulator gearbeitet, und mir ist aufgefallen, dass es bestimmte Opcodes gibt, die niemals Werte ändern würden, wie LD A, A , LD B, B usw. und auch AND A . Die ersten ändern offensichtlich nichts, da sie den Wert von Registern in dieselben Register laden, und da AND mit dem A Register verglichen wird, gibt AND A immer A zurück. Gibt es einen Zweck für diese Operationen, oder sind sie nach jedem Zyklus im Wesentlichen identisch mit NOP ?

    
zchbrntmr 17.10.2014, 02:10
quelle

3 Antworten

10

Als Jeffrey Bosboom und Hans Passant wies auf ihre Kommentare, der Grund ist Einfachheit . Genauer gesagt Hardware-Einfachheit.

Die Anweisungen

LD r,r' kopieren den Inhalt des Quellregisters ( r' ) in das Zielregister ( r ). LD r,r' opcodes folgen dieser Form:

%Vor%

Ziel- und Quellregister können diese Werte annehmen:

%Vor%

Um diese Anweisungen in Hardware zu implementieren, brauchen wir nur einen Multiplexer, der die Bits 0-2 empfängt, um das Quellenregister auszuwählen, und einen anderen Multiplexer, der die Bits 3-5 empfängt, um das Zielregister auszuwählen.

Wenn Sie überprüfen möchten, ob die Bits 0-2 und die Bits 3-5 auf dasselbe Register zeigen, müssten Sie der CPU mehr Logik hinzufügen. Und wie wir alle wissen, waren Ressourcen in den 80er Jahren begrenzter: P

Bitte beachten Sie, dass Ladeanweisungen wie LD A,A , LD B,B , LD C,C , LD D,D , LD E,E , LD H,H und LD L,L sich wie NOP verhalten. % Co_de% und AND A DO NOT verhalten sich jedoch wie OR A , da sie sich auf das Flag-Register auswirken und deren Ausführung möglicherweise den internen Maschinenzustand ändert.

    
GabrielOshiro 20.10.2014, 02:10
quelle
6

Anweisungen wie LD A,A und AND A können als NOP s erscheinen, aber sie können auch die Prozessor-Flags ändern und zum Testen des Werts eines Registers verwendet werden.

Überprüfen Sie die Dokumentation des Handbuchs sorgfältig auf solche Nebenwirkungen.

    
HBP 19.10.2014 02:46
quelle
2

There ist eigentlich Zweck in AND A (sowie OR A ) Anweisung - setzt Flag Z , wenn A Null ist und ansonsten löscht. Daher werden häufig sowohl AND A als auch OR A für diesen Zweck verwendet.

    
lvd 08.11.2014 16:27
quelle

Tags und Links