mein Lehrer macht einen Crash-Kurs in der Montage mit uns, und ich habe keine Erfahrung darin. Ich soll eine einfache Funktion schreiben, die vier Variablen benötigt und (x + y) - (z + a) berechnet und dann die Antwort ausgibt. Ich weiß, dass es ein einfaches Problem ist, aber nach stundenlangen Recherchen komme ich nirgendwohin, jeder Schritt in die richtige Richtung wäre sehr hilfreich! Ich muss den Stapel verwenden, da ich mehr Dinge zum Programm hinzufügen muss, sobald ich diesen Punkt überwunden habe und viele Variablen speichern muss. Ich kompiliere mit Nasm und Gcc, in Linux. (X86 64)Push/Pop Segmentierung Fehler in einfacher Multiplikationsfunktion
(Seite Frage, meine '3' zeigt nicht im Register r10, aber ich bin in Linux so sollte dies das richtige Register sein ... irgendwelche Ideen?)
Hier wird so weit mein Code:
global main
extern printf
segment .data
mulsub_str db "(%ld * %ld) - (%ld * %ld) = %ld",10,0
data dq 1, 2, 3, 4
segment .text
main:
call multiplyandsubtract
pop r9
mov rdi, mulsub_str
mov rsi, [data]
mov rdx, [data+8]
mov r10, [data+16]
mov r8, [data+24]
mov rax, 0
call printf
ret
multiplyandsubtract:
;;multiplies first function
mov rax, [data]
mov rdi, [data+8]
mul rdi
mov rbx, rdi
push rbx
;;multiplies second function
mov rax, [data+16]
mov rsi, [data+24]
mul rsi
mov rbx, rsi
push rbx
;;subtracts function 2 from function 1
pop rsi
pop rdi
sub rdi, rsi
push rdi
ret
'x + y' ist Addition, keine Multiplikation, obwohl das für das Problem nicht relevant ist. – Barmar