Befehlssatz/Assembler Flashcards
(23 cards)
Befehlssatzarchitektur
- instruction set achitecture (ISA): vollständige Abstraktion der Hardware
- beinhaltet die implementierten befehlssätze
- Neuerungen können durch Befehls Erweiterungen hinzugefügt werden
- Unterscheidung erfolgt nach:
- > befehlssatztyp, Verarbeitungsbreite, Registerzahl, Addressierungsarten
- Umsetzung kann in einem Mikroprozessor Familie oder in einer virtuellen Maschine erfolgen
Befehlsarten
- Arothmetische und logische Befehle
- Transferbefehle
- Sprungbefehle
- in manchen ISAs auch weitere befehlsarten -> CISC
Arithmetische und logische Befehle
- immer drei Operanden:
- > 2 Quelloperanden (sources)
- > 1 Zieloperand (destination)
- > add t0, t2, t1 ;
- > t0 = t1 + t2
Transferbefehle
- dienen dem Kopieren von Daten innerhalb des Systems
- > Ziel und Quelle können Register oder Speicherplätze sein
- > Daten beim Transfer nicht verändert
- > Transfer kann ein und mehrere Bytes beinhalten
- > ldb t0, 64(t1) ;
- > t0 = M[ t1 + 64] : lade ein Byte von der Adresse (t1 + 64) in das Register t0
Sprungbefehle
- jump oder branch: dienen der Programmflusssteuerung
- werden mit folgenden C Anweisungen verwendet:
- > Verzweigungen (if oder switch Anweisungen)
- > wiederholstrukturen( for, do- while oder while schleifen )
- > Unbedingte programmsprünge
- > Funktionsaufrufe
Register Operanden
- meisten Operationen nutzen Register als Quell- oder zieloperanden
- Register sind direkt mit der ALU verbunden -> Registerzugriffe sind sehr schnell
- > Registerbreite ist Abhängig von der ISA
- es kann der ganze oder Teile des Inhalt verwendet werden -> byte(8bits) halfword (16 Bits), Word (32bit), Doubleword (64 Bit)
- einige Isas (RISC) verlangen dass Operanden von arithmetischen und logischen Operationen immer in Registern liegen
Speicher Operanden
Daten die nicht in Registern sind müssen aus dem Hauptspeicher geladen werden.
- Verwendung je nach ISA:
- > in transferoperationen (immer möglich)
- > in arithmetischen und logischen Operationen
- > Unterscheidung: 1 adress, 2 adress und 3 adress ISAs
- Speicher immer Byte addressierbar -> jede Adresse identifiziert ein Byte
Register vs Speicher Operationen
- für jede ISA lässt sich sagen:
- > registerzugriffe schnelle als Speicher
- > Daten im Speicher benötigen zusätzliche Load und Store Operationen
- > Compiler versuchen immer Register zu verwenden
Immediate Operand
- sind Konstanten, die direkt in einer Instruktion angegeben werden
- > addi x22, x22, 4 ; x22 = x22 + 4
- machen den häufig genutzten Fall schnell:
- > kleine Zahlenwerte für Konstanten sind üblich
- > vermeiden speicherzugriffe
Maschinencode
Instructionen werden binär kodiert in Maschinen Code und werden im Programmspeicher abgelegt
- anhängig von der ISA
- für Menschen nur schwer lesbar
Assembler code
Eine Maschinen orientierte Sprache der zweiten Generation
- im Gegensatz zum Maschinencode:
- > verständliche Symbole im Textform (add)
- > symbolische Adressen und registernamen
- machinenabhhängig und kann auf andereren ISAs nicht ünverändert genutzt werden
RISC V Prozessor
- wurde an der Uni Berkeley entwickelt
- Besonderheiten des Befehlsatzes:
- > freie mudlar erweiterbare befehlssatzarchitektur
- > sehr einfache Grundstruktur
- > viele verschiedene Umsetzungen
Befehlssatzerweiterung
- befehlssätze lassen sich erweitern
- RISC V bietet bereits vordefinierte Erweiterung
- Vorteil: geringer Hardware bedarf
- Anwendungs und systemspezifisch erweiterbar
RISC V Registersatz
- 32 General Purpose Register (x0…x31)
- Programm Counter nicht Bestandteil
- x0 das Zero Register
- Registersatz abhängig vom befehlssatz
ABI
- application Binary Interface
- Binärschnittstelle definiert die Interaktion zwischen Software und Hardware eines Computers
- definiert uA:
- > Verwendung der Prozessorregister
- > Richtung des Stacks
- > Format der Fliesskomma zahlen
Befehlsformat des RV32i Befehlsatz
Beinhaltet 6 verschiedene befehlsformate wobei jeder Befehl genau 32 Bit lang ist
- R-, I-, S-, B-, J-, U- Type
R Format Instruktionen
- arithmetische logische Register Register Operationen
- opcode: beschreibt den operation Code (add, sub, ld…) (7bits)
- rd: enthält Ziel Register nummer (5bits)
- rs1: registernummer des ersten Operanden (5bits)
- rs2: regusternummer des zweiten Operanden (5bits)
- func3 und func7: geben operationsspeziefische Informationen
- > func3 3 Bits (zwischen add und sub unterschieden)
- > funk7 7 Bits
Logische schiebe Operation
- immediate beschreibt um wie viele Stellen der Wert geschoben wird
- schieben nach links: frei stellen mit 0 gefüllt. Entspricht einer Multiplikation mit 2^i
- schieben nach rechts: frei stellen mit 0 gefüllt. Entspricht einer Division durch 2^i
I Format Instruktionen
- lade und arithmetische, logische Operationen mit immediate
verwendet für:
-> immediate arithmetic : rs1: Register Nummer 1 Operanden
Immediate: Konstante für den zweiten Operanden
-> ladeoperationen: rs1: basisadtessregister
Immediate: Offset zur basisadresse
S Format Instruktionen
- Instruktion zum speichern von Daten
- rs1: enthält Basis adress Register
- rs2: enthält die Daten
- Immediate: enthält Offset der Basis Adresse (auf zwei Feldern aufgeteilt)
B Format Instruktionen
- für bedingte Sprünge verwendet
- springe zur angegeben Adresse wenn Bedingung erfüllt ist
- sonst arbeite mit der nächsten Adresse weiter
-> beq rs1, rs2, L1
Springe zu L1 wenn rs1=rs2 - rs1,rs2 : Operanden für die Bedingung
- Immediate: vorzeichenbehaftetes 13 Bit Offset
- relative Sprünge: relativ zum aktuellen PC
Zieladresse= PC + Immediate
J Typ
Sprungoperationen
U Typ
Immediate Instruktion