Commit 947e7c5b by Felix Paul Casser

### exercise 3 progressed

parent e00a7c6a
auf1.asm 0 → 100644
 global _start _start: ;bl eingabe mov bl, 2 ;al for multiplication mov al, bl mul al mov dl, 3 mul dl ;saving the result mov cx, ax ;al for multiplikation mov al, 4 mul bl add ax, cx sub ax, 5 mov rax, 60 mov rbx, 0 syscall
auf2.asm 0 → 100644
 section .data x DW 3 result DW 0 section .text global _start _start: ;al for multiplication mov al, [x] mul al mov dl, 3 mul dl ;saving the result mov cx, ax ;al for multiplikation mov al, 4 mov bl, [x] mul bl add ax, cx sub ax, 5 mov [result], ax mov rax, 60 mov rbx, 0 syscall
auf3.asm 0 → 100644
 section .data x DW 4 coeff DD 33, 2, 7 result DW 0 section .text global _start _start: mov ebx, coeff ;al for multiplication mov ax, [x] mul ax mov rdx, [ebx] mul dx ;saving the result mov cx, ax ;al for multiplikation mov rax, [ebx + 4] mov dx, [x] mul dx add ax, cx add ax, [ebx+8] add ax, 65 mov [result], ax mov rax, 1 mov rdi, 1 mov rsi, result mov rdx, 2 syscall mov rax, 60 mov rbx, 0 syscall
auf4.asm 0 → 100644
 section .data x DW 2 coeff DD 3, 4, -5 result DW 0 section .text global _start _start: mov rbx, coeff mov ax, [x] mov dx, [coeff] mul dx add ax, [coeff + 4] mov dx, [x] mul dx add ax, [coeff + 8] add ax, 65 mov [result], ax mov rax, 1 mov rdi, 1 mov rsi, result mov rdx, 2 syscall mov rax, 60 mov rbx, 0 syscall
auf6.asm 0 → 100644
 section .data num1 DD 1, 4 num2 DD 2, 9 res DD 0, 0 section .text global _start _start: ;Realpart of the result mov eax, [num1] mov ebx, [num2] mul ebx mov ecx, eax mov eax, [num1 + 4] mov ebx, [num2 + 4] mul ebx sub ecx, eax mov [res], ecx ;Imaginerypart of the result mov eax, [num1] mov ebx, [num2 + 4] mul ebx mov ecx, eax mov eax, [num1 + 4] mov ebx, [num2] mul ebx add eax, ecx mov [res + 4], eax mov ebx, 0 mov eax, 1 syscall
solution.txt 0 → 100644
 1. siehe auf1.asm 2. siehe auf2.asm 3. siehe auf3.asm 4. siehe auf4.asm 5. Zunächst muss eine funktion geschrieben werden um potenzen zu berechnen, übergeben werden der Funktion basis und und exponent über register - potenzen sind eine Schleife von Multiplikationen - Schleifen sind Sprünge, am ende wird ein Schleifenzähler erhöht danach wird zu beginn der Schleife zurück gesprungen, dort wird überprüft ob der Zähler größer als der exponenten ist, falls ja, beende die funktion und übergebe über ein Register den Rückgabewert. - innerhalb der Schleife wird die übergebene Basis immerwieder auf ein Register draufmultipliziert Danach muss eine die Forschleife übersetzt werden - Dies funktioniert genau so wie die Schleife für die potenz, allerdings wird hier der Schleifenzähler nicht mit dem Exponten verglichen, sonder mit der Variablen N - Im Inneren der Schleife wird die Potenzfunktion aufgerufen vorher muss x und der Schleifenzähler in die entsprechenden Register geschrieben werden. Falls Register doppelt verwendet werden, also in der aufgerufenen Funktion und im Hauptprogramm müssen diese auf dem Stack gesichert werden und nach Ende der Funktion wieder zurückkopiert werden. Danach muss noch mit den entsprechende Wert aus dem Feld a mutipliziert werden. Auf dem Wert des Feldes kann zugegriffen werden, indem i*4 gerechnet wird und auf die erste Speicherstelle des Feldes addiert wird. 6. siehe auf6.asm \ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!