Wie sind die Registerkonvention im Assembler zu verstehen?

Guten Morgen,
ich bin Schülerstudentin und sitze seit ca 1 Woche an einer Aufgabe in Mips, die wir nun endlich fertig haben. Nun sind wir allerdings auf ein Problem gestoßen und zwar wissen wir nicht wie wir mit den Registerkonventionen umzugehen haben.

Ich zähle nun einmal die Regeln zu einer Funktion mit Funktionsaufrufen (nicht Blattfunktion auf), darunter (in dick) befinden sich meine Fragen und Kommentare.

Konventionen:

– Sichere $ra auf dem Stack!

Ist für uns klar, denn die Returnadresse geht sonst nach einem Funktionsaufruf verloren und es kommt zu einer Endlosschleife.

– Weise Variablen, die nach einem Aufruf benötigt werden, an

einen $si Register zu und sichere zuvor $si auf dem Stack.

– weise Variablen, die nach einem Aufruf nicht länger benötigt

werden, an einen $ti Register zu

Ich nehme diese zwei Punkte einmal zusammen, denn hier beginnt das böse Übel.
Wie ist das denn eigentlich gemeint ? Ich persönlich verstehe es so, dass die $si Register vor dem Aufruf in den Stack geladen werden müssen, wenn sie in der aufzurufenden Funktion auch vorhanden sind. Und durch das Speichern wird der Wert nicht überschrieben. Die Frage wäre nun, wenn ich ein Register (z.b für einen Counter) benötige, dass nicht in der aufzurufenden Funktion vorkommt, ich es auch auf den Stack speichern muss, oder ob es dann ein t Register wird, statt ein s?

Man sagt ja, dass die t-Register sind für die Haltung kurzlebiger (temporärere) Variablen bestimmt sind. Nur was ist damit genau gemeint?

– kopiere Argumente ($ai) , die nach einem Aufruf benötigt

werden, in ein $si-Register und sichere zuvor $si auf dem

Keller

Was meint man hiermit genau.

Es wäre sehr nett, wenn ihr konkret werden würdet, denn ich verstehe das meiste im Internet schon nicht.

Vielen Dank im Voraus

Luisa

Computer, Mathematik, CPU, programmieren, Assembler, Informatik, Programmiersprache, Register
Speicherzugriffsfehler in Assembler?

Hey ich habe folgenden rekursiven Fibonacci Code geschrieben. Ich erhalte beim ausführen immer einen Speicherzugriffsfehler

Pastebin-Link: https://pastebin.com/qNWcyBa5

.intel_syntax noprefix

.section .data

n: .quad 10 # define the fibonacci number that should be calculated

.section .text

.global _start

_start:

# call Fibonacci function f(n)

push [n] # parameter: fibonacci number to calculate

call f # call function

add rsp, 8 # remove parameter from stack

# print calculated Fibonacci number on stdout

#call printnumber

# exit process with exit code 0

mov rax, 1

mov rbx, 0

int 0x80

# f: Calculates a Fibonacci number

#  f(n) = {n, if n<=1; f(n-1)+f(n-2), else}.

#  Parameter: Integer n >= 0, passed on stack

#  Returns:  Fibonacci number f(n), returned in rax

.type f, @function

f:

push rbp # basepointer auf stack pushen

mov rbp, rsp # basepointer bekommt Wert des stackpointers

add rbp, 8 # 1.Parameter

mov rbx, [rbp] # rbx= 1.Paramter

cmp rbx, 0 # wenn n=0 passiert nichts, jmp zu end

je end

cmp rbx, 1 # wenn n=1 jmp zu baseone

je baseone

dec rbx # n-1

push [rbx] # push n-1

call f # call f(n-1)

dec rbx # n-2

push [rbx] # push n-2

call f # call f(n-2)

baseone: add rdi, 1 # rdi = rdi + 1

end: pop rbp # basepointer wieder vom Stack entfernen

ret

weiß auch nicht warum gf hier so viele Leerzeichen reinmacht. Naja hab das meiste kommentiert. Also wenn jemand einen Tipp hat wäre ich sehr dankbar.

Wer es kompilieren will.

as --gstabs -o Dateiname.o Dateiname.asm

ld -m elf-x86-64 -o Name Dateiname.o

./Name

Lg Tischtennisftw

programmieren, Assembler, Informatik, Fibonacci
Über "Internet" auf PC zugreifen (nicht TeamViewer usw)?

Hallo, ich wünsche euch einen wunderschönen Tag. Meine Frage wäre: Wie kann ich auf einen PC der nicht im Netzwerk ist zugreifen? Also ich sag es mal detaillierter: Ein Computer hat doch eine IP im Netzwerk aber auch außerhalb. Wenn er z.b. auf eine Website zugreift dann mit einer IP (ist klar das das nicht die vom Netzwerk ist). Aber wo würde ich diese IP sehen. Ich meine jetzt: Wenn das mein PC ist der nicht im Netzwerk ist, und ein anderer PC ist in einem Netzwerk. Wie kann ich die "Internet-IP" herausfinden wenn der PC mir gehört. Also über cmd oder ähnliches?! Wenn ich diese "herausgefunden" habe, wie kann ich dann auf diese IP zugreifen? Also das ich dann z.b. zum Anmelde Screen komme wie z.b. bei ssh nur das 1 PC nicht im Netzwerk ist aber ich die "öffentliche" Ip weiß. Wie kann ich auf diese Ip zugreifen?

PS: Ich denke mir grade so, dass man mit der Öffentlichen IP vom Router zugreift oder? Aber das müsste doch heißen, z.b. wenn ich eine "illegale" Website öffne und mein Bruder mit einem anderen PC auf z.b. Facebook zugreift. Wird dann die gleiche IP verwendet. Wenn JA wie soll man dann wissen welcher PC auf welche Website zugegriffen hat? Und wenn das die IP vom Router ist, kann man auf diese zugreifen und irgendwie dann die IP's von den verbundenen PC bekommen? (Wissenswertes)

Danke schon mal und sorry das es so viel ist

PC, Computer, Internet, Windows, Linux, Netzwerk, Assembler, Zugriff

Meistgelesene Beiträge zum Thema Assembler