1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
(Beispiel aus der Vorlesungsfolie.)
rax, rbx, rcx, rdx, rsi, rdi, rbp, rsp, r8, r9, r10, r11, r12, r13, r14, r15
Wir haben 16 Register
schnelles Rechnen
Übergabe von Parametern
Rückgabe von Funktionswerten
Siehe hierzu die AMD-Doku, Seite 39, PDF-Seite 75.
Aufbau: operation operand_1, operand_2
Manchmal nur ein Operand, manchmal auch keiner, sehr selten auch drei
operand_x
kann je nach operation
verschiedenes sein:
rax
, rbx
, …)234
, 45
, …)[rax+8]
; kommen wir in einem späteren Tutorium noch zu)mov zieloperand, quelloperand
zieloperand = quelloperand
1 2 |
|
inc zieloperand
zieloperand = zieloperand + 1
1 2 3 |
|
dec zieloperand
zieloperand = zieloperand - 1
1 2 3 |
|
add zieloperand, quelloperand
zieloperand = zieloperand + quelloperand
1 2 3 |
|
sub zieloperand, quelloperand
zieloperand = zieloperand - quelloperand
1 2 3 |
|
Langweilige Programme
Schön wäre so etwas wie
if <Bedingung> then
<Code>
else
<Code>
oder
while <Bedingung>
<Code>
end
Geht leider nicht so einfach
Wir können innerhalb unseres Programms springen:
1 2 3 4 5 6 7 8 9 10 |
|
jmp marke
bedeutet: Setze das Programm in der Zeile mit marke:
fort.
Leider wird immer gesprungen.
Wir wollen nur bei bestimmten Bedingungen springen.
Bedingung bedeutet meistens: Wir wollen zwei Werte miteinander vergleichen.
cmp operand_1, operand_2
Rechne operand_1 - operand_2
und setze Statusregister.
ZF
wird auf 1 gesetzt, wenn das Ergebnis einer Operation 0 istEs gibt Sprungbefehle, die nur springen, wenn bestimmte Bedingungen wahr sind ⇒ bedingte Sprünge
Sie arbeiten auf Basis der Statusregister
Meist in Kombination mit einem davor ausgeführten CMP
-Befehl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|