MIPS Assembler

Benutzeravatar
davidvajda.de
Site Admin
Beiträge: 1520
Registriert: Di Jul 18, 2023 8:36 pm
Wohnort: D-72072, Tübingen
Kontaktdaten:

Re: MIPS Assembler

Beitrag von davidvajda.de »

Das ist gerade bei das sehe ich zufälligerweise im quelltext. , sehe ich und natürlich , . dann gibt es .
Dann sind das bei , logisch.

Dann gibt es bis , aber dann gibt es noch und Also, es gibt

Code: Alles auswählen

10 $t
. Das sind temporärere. Das kann man sich merken. für Temporär. Das reicht die zu benutzen. Na ja, der 8086er, hat ja fast auch nur 8.

Code: Alles auswählen

AX, BX, DX, CX, SP, BP, SI, DI
. Und die können sie ja fast nicht frei verwenden.

Und - bis reicht ja. Und - wenn es dann nicht passt, dann tun sie es in den Arbeitsspeicher.

Dann was auch noch wichtig ist - bis .

Das sind einfach gesicherte Variablen. Ob es das bringt, weiss ich nicht. Sind halt gesicherte Variablen.

Meinetwegen. Was heisst, das schon. also kann man

Code: Alles auswählen

$t0 bis $t9 
und

Code: Alles auswählen

$s0 bis $s7
verwenden. Das sind 18 Register

Was man nicht verwenden kann, sind die letzten 4. Dazu gehört, die muss man nicht wissen, was das ist

Code: Alles auswählen

$gp - Data Segment Pointer 
$sp - Stack Pointer 
Das ist ja, was ein Stack Pointer ist, nur man muss sich den Namen an der Stelle ja nicht merken. OK, man kann sich merken $sp ist Stack Pointer
Frame Pointer, keine Ahnung und - - Return Address. Das kann man ja nicht so einfach verwenden

Also

Code: Alles auswählen

$gp - Data Segment Pointer 
$sp - Stack Pointer 
$fp
$ra
Argumente für Funktionsaufruf, kann man sich merken
Was sonst. kann man sich merken. kann man sich merken. kann man sich merken. . Na ja, kann man sich auch merken
ist halt Argument für den Aufruf und - für Value halt der Rückgabewert. Also der Value, der Rückgabewert und $a das Argument. Kann man mit leben.

Der Rest ist egal

Dann gibt es

Code: Alles auswählen

$zero
aber da bleibt nichts mehr. Da ist nichts mehr.

Die Befehle zunächst kriege ich hin - was ich halt nie hinschreibe, ist halt move

Ja, laden und speichern. Speichern heisst, vom Register im RAM und Laden heisst, vom RAM ins Register

Und dann fehlt das MOVE vom Register ins Register

Also

Code: Alles auswählen

lb, lbu
lh, lhu
lw
ld*
la*
li*
sb
sh
sw
sd*
Dann

Code: Alles auswählen

move 

Code: Alles auswählen

and, andi
or, ori 
xor, xori

not*, abs*, neg*, rem*
dann kommt

Code: Alles auswählen

add, addi, addiu 
sub
mult, multu 
div, divu
Dann natürlich halt die Sprungbefehle

Code: Alles auswählen

jal
jalr

j, b*, jr
jal
jalr
beq, bne
beqz*, bnez*
blt*, ble*
bltz, blez*
bgt*, bge*
bgtz, bltz.
Dann gibt es eine Besonderheit, das halte ich jetzt zunächst nicht für wichtig, kann sein - wegen dem Dreiaddressformat, jetzt Pi Mal Daumen gesagt, Vergleichsbefehle. Also bei Intel macht man das mit den Bedingten Sprüngen. Einzelne Vergleiche ohne Sprung sind ja nicht so wichtig

Bei Intel, sind das ja zwei Sachen. Sie

Code: Alles auswählen

CMP Compare 
Und JE, JNE, JG, JNG, ...
Und so weiter. Sie brauchen vorher CMP. Den können sie ja auch ohne Sprung benutzen.

Dann haben wir

Code: Alles auswählen

seq, sne
sgt
sge
sle
slt
Dann natürlich, das lerne ich so nie, aber versteht sich von selbst, Shift Befehle

Code: Alles auswählen

sll, srl

Code: Alles auswählen

Shift Left Logical 
Shift Right Logical 
Dann gibt es eine arithmetische Rechtsverschiebung, keine Ahnung, was das ist eine Rotation

Das ist, weiss ich nicht, nobel eine Rotation

Code: Alles auswählen

rol und ror
Der Rest ist eigentlich, da steht fast nichts mehr

Ausser natürlich gleitkomma, aber das können wir nachher immer noch machen. Jetzt steht hier aber eine Addresse und das ist gut

http://courses.missouristate.edu/kenvol ... Intro.html

Das ist der MARS Simulator. Die schlagen MARS vor. Ich denke auch, das ist besser.

Was ich nicht weiss, da muss man halt, das muss man im Vorbei fliegen lernen. das ist natürlich das A und O

Also, die Segmente, die gibt man ja mit dem entsprechenden Label

an. Also bei TASM 8086, halt .DATA, moderne Schreibweise und .CODE und sonst heissen die halt

Code: Alles auswählen

.text
.data 
und stack natürlich. Egal.

Da muss man sich halt merken, da steht

Code: Alles auswählen

.data 
das gehört dahin. Dann die Variablen
Da muss ich das halt oft machen

Dann

Code: Alles auswählen

.byte
oder

Code: Alles auswählen

.word
oder so

Eben

Code: Alles auswählen

byte 
word
halfword wahrscheinlich 
doubleword
dann halt noch anderes. space und asciiz

Dann

Code: Alles auswählen

.text
OK. Und dann kommt,

Code: Alles auswählen

main: 
Also wir brauchen ein .main

Dann können wir anfangen. Als erstes hole ich mir .
Antworten