Commit 947e7c5b authored by Felix Paul Casser's avatar Felix Paul Casser

exercise 3 progressed

parent e00a7c6a
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
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
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
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
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
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!
Please register or to comment