|
Optimierungstechniken Assembler
Auf dieser Seite zeige ich einige Techniken zur Optimierung der Assemblerprogrammierung für den Z80 Prozessor. Optimierungen gegenüber der Standardprogrammierung ergeben sich entweder im Umfang des vom Assembler erzeugten Codes und / oder der Geschwindigkeit der Ausführung des Codes. Wenn in den Tabellen keine Hinweise angegeben sind ist der Ersatzcode absolut kompatibel mit Ausnahme der Ausführungszeit und der Codegröße.
Zuweisungen und Manipulationen
Einsatzzweck |
Standardcode |
Optimierter Code |
Vorteil |
Hinweise & Nachteil |
Löschen des Akkumulators |
LD A,0 |
XOR A |
1 Byte 3 Takte |
Der Inhalt der Flags wird geändert |
Löschen des Akkumulators |
LD A,0 |
SUB A |
1 Byte 3 Takte |
Der Inhalt der Flags wird geändert |
Laden von Doppelregistern |
LD B,$55 LD C,$AA |
LD BC,$55AA |
1 Byte 4 Takte |
kann auch auf die Registerpaare DE und HL angewendet werden |
Belegen einer Speicherzelle |
LD A,$55 LD (HL),A |
LD (HL),$55 |
1 Byte 4 Takte |
A wird nicht mit dem Wert belegt |
Inkrementieren / Dekrementieren einer Speicherzelle |
LD A,(adresse) INC A LD (adresse),A |
LD HL,adresse INC (HL) LD A,(HL) |
2 Byte 2 Takte |
Benötigt zusätzlich das HL Register. LD A,(HL) kann entfallen wenn der Wert nicht benötigt wird. |
Logik und Vergleiche
Einsatzzweck |
Standardcode |
Optimierter Code |
Vorteil |
Hinweise & Nachteil |
Akkumulator auf 0 testen |
CP 0 |
OR A |
1 Byte 3 Takte |
|
Akkumulator auf 1 testen |
CP 1 |
DEC A |
1 Byte 3 Takte |
Achtung: Verändert den Inhalt von A |
Akkumulator invertieren |
XOR $FF |
CPL |
1 Byte 3 Takte |
|
Akkumulator Bit 0 testen |
AND 1 CP 1 JR Z,label |
AND 1 JR NZ,label |
2 Byte 7 Takte |
|
Programmablauf
Einsatzzweck |
Standardcode |
Optimierter Code |
Vorteil |
Hinweise & Nachteil |
Unterprogrammaufruf vor Return Befehl |
CALL label RET |
JP label |
1 Byte 17 Takte |
|
Schleifen |
DEC B JR NZ,label |
DJNZ label |
1 Byte 3 Takte |
Kommt häufig vor wenn 8080 Programme auf Z80 übersetzt werden |
|