05_assembler_slides_Z Flashcards
Was sind die zwei Bedeutungen des Begriffs “Assembler”?
- Maschinensprache (Assemblersprache): Dies ist die niedrigste Programmiersprache, die direkt von der CPU ausgeführt werden kann. - Vom Menschen lesbare Version der Maschinensprache: Eine symbolische Darstellung der Maschinensprache, die für Menschen verständlicher ist.
Was ist ein Opcode in der Assemblerprogrammierung?
-
Opcode: Eine Bitfolge, die eine bestimmte Maschineoperation darstellt, wie z.B.
0000 1100 0001 0010
. Opcodes sind die elementaren Befehle, die von der CPU verstanden und ausgeführt werden.
Warum wird Assemblercode in hochoptimiertem Code verwendet?
- Hochoptimierter Code: Assembler wird auf Plattformen mit begrenzten Ressourcen verwendet, um maximale Effizienz und Leistung zu erreichen, z.B. in Verschlüsselungsroutinen.
Wie kann man Assemblercode erhalten?
-
Kompilieren mit
-S
: Erzeugt eine.s
Datei, die den Assemblercode enthält. - Disassembler (z.B.objdump
): Wandelt Opcodes in menschenlesbaren Assemblercode um. - Decompiler: Erzeugt Quelltext aus Assemblercode, besonders effektiv bei Bytecode-Sprachen wie Java.
Was sind Compiler-Optimierungen und wie beeinflussen sie den Assemblercode?
-
Compiler-Optimierungen: Techniken, die der Compiler verwendet, um den Code effizienter zu machen, wie z.B. die Verwendung von
xor %Register, %Register
anstelle vonmov %Register, 0
, um Register zu löschen.
Was ist die Harvard-Architektur und wie wird sie in AVR Mikrocontrollern verwendet?
- Harvard-Architektur: Ein Speichermodell, bei dem Befehls- und Datenspeicher getrennt sind, was parallelen Zugriff ermöglicht und damit die Effizienz erhöht. AVR Mikrocontroller nutzen diese Architektur.
Was zeigt das Zero Flag (Z) im Status Register (SREG) eines AVR Mikrocontrollers an?
- Zero Flag (Z): Zeigt an, dass das Ergebnis der letzten Operation 0 war. Dies ist nützlich für bedingte Anweisungen und Schleifenbedingungen.
Welche Funktionen haben bedingte und unbedingte Sprunganweisungen in der Assemblerprogrammierung?
-
Bedingte Sprunganweisungen: Diese Anweisungen ändern den Programmzähler basierend auf einer Bedingung (z.B.
brcs k
). - Unbedingte Sprunganweisungen: Diese Anweisungen ändern den Programmzähler ohne Rücksicht auf Bedingungen (z.B.jmp label
).
Was ist Little Endian und wie beeinflusst es die Arbeit mit mehreren Byte großen Datentypen?
-
Little Endian: Ein Speicherformat, bei dem die niedrigwertigsten Bytes an den niedrigsten Speicheradressen gespeichert werden. Bei Operationen auf mehrbytegroßen Datentypen muss dies berücksichtigt werden, insbesondere bei Overflow-Berechnungen wie
adc
(Addition mit Carry).
Wie funktionieren Subroutinen in Assembler?
-
Subroutinen: Werden mit
call
aufgerufen, was den alten Programmzählerwert auf den Stack sichert. Mitret
wird die Sprungadresse vom Stack gelesen, um zur aufrufenden Stelle zurückzukehren.
Wie kann man Verzweigungen in Assembler implementieren?
-
Verzweigungen: Werden durch bedingte und unbedingte Sprünge realisiert. Beispiel:
assembly cp . . . ; Überprüfe Bedingung1 brxx label1 ; Springe, wenn Bedingung1 nicht erfüllt Befehl1 jmp end ; Unbedingter Sprung zum Ende der Verzweigung label1: ; Sprunglabel für else-if-Zweig cp . . . ; Überprüfe Bedingung2 brxx label2 ; Springe, wenn Bedingung2 nicht erfüllt Befehl2 jmp end ; Unbedingter Sprung zum Ende der Verzweigung label2: ; Sprunglabel für else-Zweig Befehl3 end: ; Sprunglabel am Ende der Verzweigung
Wie kann eine While-Schleife in Assembler implementiert werden?
-
While-Schleife: Wird durch bedingte Sprünge umsetzbar. Beispiel:
assembly loop: ; Sprunglabel am Beginn der Schleife cp . . . ; Überprüfe Bedingung1 brxx end ; Springe, wenn Bedingung1 nicht erfüllt Befehl1 jmp loop ; Unbedingter Sprung zum Kopf der Schleife end: ; Sprunglabel am Ende der Schleife