You are on page 1of 14

INSTRUCCIONS MIPS I MACROS MARS

Enters

INSTRUCCIONS MIPS

Aritmtico-lgiques

Comparaci

Memria

Moviment de dades

Instruccions de salt
relatiu al PC

addiu
addu
and
andi
div
divu
mult
multu
nor
or
ori
sll
sllv
sra
srav
srl
srlv
subu
xor
xori
slt
sltu
slti
sltiu

rt,
rd,
rd,
rt,
rs,
rs,
rs,
rs,
rd,
rd,
rt,
rd,
rd,
rd,
rd,
rd,
rd,
rd,
rd,
rt,
rd,
rd,
rt,
rt,

rs,
rs,
rs,
rs,
rt
rt
rt
rt
rs,
rs,
rs,
rt,
rt,
rt,
rt,
rt,
rt,
rs,
rs,
rs,
rs,
rs,
rs,
rs,

lb
lbu
lh
lhu
lw
sb
sh
sw
lui
mfhi
mflo
mfc0
mtc0
beq
bne

rt,
rt,
rt,
rt,
rt,
rt,
rt,
rt,
rt,
rd
rd
rt,
rd,
rs,
rs,

off16(rs)
off16(rs)
off16(rs)
off16(rs)
off16(rs)
off16(rs)
off16(rs)
off16(rs)
imm16

MACROS MARS
b
bge
bgeu
bgt
bgtu
ble
bleu
blt
bltu
la
li
move

etiq
rsrc1,
rsrc1,
rsrc1,
rsrc1,
rsrc1,
rsrc1,
rsrc1,
rsrc1,
rdest,
rdest,
rdest,

rsrc2,
rsrc2,
rsrc2,
rsrc2,
rsrc2,
rsrc2,
rsrc2,
rsrc2,
adr
imm
rsrc

etiq
etiq
etiq
etiq
etiq
etiq
etiq
etiq

rt
rt
imm16
imm5
rs
imm5
rs
imm5
rs
rt
rt
imm16
rt
rt
imm16
imm16

rd
rt
rt, etiq
rt, etiq

j
etiq
jal
etiq
jr
rs
eret
Tractament dexcepcions syscall
Instruccions de salt
absolut

imm16
rt
rt
imm16

Coma flotant
add.d
add.s
div.d
div.s
mul.d
mul.s
sub.d
sub.s

fd,
fd,
fd,
fd,
fd,
fd,
fd,
fd,

fs,
fs,
fs,
fs,
fs,
fs,
fs,
fs,

ft
ft
ft
ft
ft
ft
ft
ft

c.eq.d
c.eq.s
c.le.d
c.le.s
c.lt.d
c.lt.s
lwc1
swc1

fs,
fs,
fs,
fs,
fs,
fs,
ft,
ft,

ft
ft
ft
ft
ft
ft
off16(rs)
off16(rs)

mfc1
mov.s
mtc1

rt, fs
fd, fs
rd, fs

bc1f
bc1t

etiq
etiq

INSTRUCCIONS MIPS
A continuaci es detallen les instruccions MIPS ordenades alfabticament. Abans es
descriuen els elements que sutilitzen en la seva sintaxi.
rt, rs, rd:

Especifiquen un registre de propsit general. En el format de la instrucci es representen en 5 bits, que es denoten com ttttt,
sssss i ddddd, respectivament.

imm16:

Especifica una expressi que avalua a una constant entera de 16 bits


en Ca2. En el format de la instrucci aquest camp es denota amb 16
is.

imm5:

Especifica una expressi que avalua a una constant natural de 5


bits. En el format de la instrucci aquest camp es denota amb 5 is.

ft, fs, fd:

Especifiquen un registre de coma flotant. En el format de la instrucci es representen en 5 bits, que es denoten com ttttt, sssss i
ddddd, respectivament.

off16:

Especifica una expressi que avalua a una constant entera de 16 bits


en Ca2. En el format de la instrucci aquest camp es denota amb 16
os.

etiq:

Especifica una etiqueta del programa. Quan sutilitza en una instrucci de salt relatiu al PC, en el format de la instrucci no sespecifica ladrea absoluta detiq, sin que es codifica en 16 bits el
desplaament que hi ha en nombre dinstruccions des de la segent
instrucci fins a etiq. Aquest camp es denota amb 16 os. Daltra
banda, quan sutilitza en una instrucci de salt absolut, en el format
de la instrucci sespecifiquen 26 bits, que corresponen als bits
<27:2> de ladrea detiq. Els 4 bits de ms pes de ladrea on hi
ha la instrucci de salt i la del dest del salt han de coincidir. Els dos
bits de menys pes del dest del salt sn 0s i no sespecifiquen. En el
format de la instrucci aquest camp es denota amb 26 ts.

addiu
addiu:

Add Immediate
0010 01ss ssst tttt iiii iiii iiii iiii

rt = rs + SignExt(imm16)
La instrucci addiu realitza la suma aritmtica entera dun registre i de lextensi de signe duna
constant de 16 bits representada en Ca2. Existeix una instrucci anloga (addi) que realitza la
mateixa tasca, per amb la diferncia que genera una excepci si es produeix sobreeiximent en la
suma denters. La instrucci addi no la utilitzarem mai.
addiu rt, rs, imm16

addu
addu:

Add
0000 00ss ssst tttt dddd d000 0010 0001

rd, rs, rt
rd = rs + rt
La instrucci addu realitza la suma aritmtica entera de dos registres. Existeix una instrucci
anloga (add) que realitza la mateixa tasca, per amb la diferncia que genera una excepci si es
produeix sobreeiximent en la suma denters. La instrucci add no la utilitzarem mai.
addu

add.d

Floating-Point Addition Double

add.d:

0100 0110 001t tttt ssss sddd dd00 0000

fd = fs + ft
La instrucci add.d realitza la suma en coma flotant de doble precisi de dos registres de coma
flotant.
add.d fd, fs, ft

add.s

Floating-Point Addition Single

add.s:

0100 0110 000t tttt ssss sddd dd00 0000

fd = fs + ft
La instrucci add.s realitza la suma en coma flotant de simple precisi de dos registres de coma
flotant.
add.s fd, fs, ft

and

AND

and:

0000 00ss ssst tttt dddd d000 0010 0100

rd, rs, rt
rd = rs AND rt
La instrucci and realitza el producte lgic per cada un dels dos bits que ocupen la mateixa posici als registres fonts.
and

andi

AND Immediate

andi:

0011 00ss ssst tttt iiii iiii iiii iiii

rt = rs AND ZeroExt(imm16)
La instrucci and realitza el producte lgic per cada un dels dos bits que ocupen la mateixa posici al registre font i a lextensi de zeros duna constant de 16 bits representada en Ca2.
andi rt, rs, imm16

bc1f

Branch Coprocessor 1 False

bc1f:

0100 0101 0000 0000 oooo oooo oooo oooo

$pc = etiq si cc = 0
La instrucci bc1f salta a etiq si el codi de condici de coma flotant cc s 0.
bc1f etiq

bc1t

Branch Coprocessor 1 True

bc1t:

0100 0101 0000 0001 oooo oooo oooo oooo

$pc = etiq si cc = 1
La instrucci bc1t salta a etiq si el codi de condici de coma flotant cc s 1.
bc1t etiq

beq
beq:

Branch On Equal
0001 00ss ssst tttt oooo oooo oooo oooo

rs, rt, etiq


$pc = etiq si rs = rt
La instrucci beq salta a etiq si rs s igual a rt.
beq

bne
bne:
bne

Branch On Not Equal


0001 01ss ssst tttt oooo oooo oooo oooo
rs, rt, etiq

$pc = etiq si rs <> rt

bne

Branch On Not Equal

La instrucci bne salta a etiq si rs s diferent de rt.

c.eq.d

Compare Equal Double

c.eq.d:

0100 0110 001t tttt ssss s000 0011 0010

cc=1 si fs = ft; altrament cc=0


La instrucci c.eq.d activa el codi de condici cc si els registres de coma flotant de doble precisi fs i ft sn iguals; altrament el codi de condici es posa a 0.
c.eq.d fs, ft

c.eq.s

Compare Equal Single

c.eq.s:

0100 0110 000t tttt ssss s000 0011 0010

cc=1 si fs = ft; altrament cc=0


La instrucci c.eq.s activa el codi de condici cc si els registres de coma flotant de simple
precisi precisi fs i ft sn iguals; altrament el codi de condici es posa a 0.
c.eq.s fs, ft

c.le.d

Compare Less Than Equal Double

c.le.d:

0100 0110 001t tttt ssss s000 0011 1110

cc=1 si fs <= ft; altrament cc=0


La instrucci c.le.d activa el codi de condici cc si el registre de coma flotant fs s ms petit
o igual (en doble precisi) que ft; altrament el codi de condici es posa a 0.
c.le.d fs, ft

c.le.s

Compare Less Than Equal Single

c.le.s:

0100 0110 000t tttt ssss s000 0011 1110

cc=1 si fs <= ft; altrament cc=0


La instrucci c.le.s activa el codi de condici cc si el registre de coma flotant fs s ms petit
o igual (en simple precisi) que ft; altrament el codi de condici es posa a 0.
c.le.s fs, ft

c.lt.d

Compare Less Than Double

c.lt.d:

0100 0110 001t tttt ssss s000 0011 1100

cc=1 si fs < ft; altrament cc=0


La instrucci c.lt.d activa el codi de condici cc si el registre de coma flotant fs s ms petit
(en doble precisi) que ft; altrament el codi de condici es posa a 0.
c.lt.d fs, ft

c.lt.s

Compare Less Than Single

c.lt.s:

0100 0110 000t tttt ssss s000 0011 1100

cc=1 si fs < ft; altrament cc=0


La instrucci c.lt.s activa el codi de condici cc si el registre de coma flotant fs s ms petit
(en simple precisi) que ft; altrament el codi de condici es posa a 0.
c.lt.s fs, ft

div

Divide

div:
div

0000 00ss ssst tttt 0000 0000 0001 1010


rs, rt

lo = rs / rt; hi = rs % rt

div

Divide

La instrucci div calcula el quocient i el residu de la divisi entera entre dos registres. El quocient semmagatzema al registre lo i el residu al registre hi. El signe del residu coincideix amb el
signe del dividend. No es genera excepci per sobreeiximent del quocient. En cas de divisi per 0
el resultat resta indefinit.

divu

Unsigned Divide

divu:

0000 00ss ssst tttt 0000 0000 0001 1011

lo = rs / rt; hi = rs % rt
La instrucci divu calcula el quocient i el residu de la divisi natural entre dos registres. El quocient semmagatzema al registre lo i el residu al registre hi. En cas de divisi per 0 el resultat
resta indefinit.
divu

rs, rt

div.d

Floating-Point Divide Double

div.d:

0100 0110 001t tttt ssss sddd dd00 0011

fd = fs + ft
La instrucci div.d calcula el quocient de la divisi de dos registres de coma flotant en doble
precisi.
div.d fd, fs, ft

div.s

Floating-Point Divide Single

div.s:

0100 0110 000t tttt ssss sddd dd00 0011

fd = fs + ft
La instrucci div.s calcula el quocient de la divisi de dos registres de coma flotant en simple
precisi.
div.s fd, fs, ft

eret

Exception Return

eret:

0100 0010 0000 0000 0000 0000 0001 1000

llegiu descripci
La instrucci eret activa el bit EXL del Status Register del coprocessador 0 i retorna a la
instrucci apuntada pel registre EPC del coprocessador 0.
eret

Jump

j:

0000 10tt tttt tttt tttt tttt tttt tttt

$pc = etiq
La instrucci j salta incondicionalment a etiq.
j

etiq

jal

Jump And Link

jal:

0000 11tt tttt tttt tttt tttt tttt tttt

$ra = $pc+4; $pc = etiq


La instrucci jal salva ladrea de la segent instrucci a $ra i salta incondicionalment a
etiq.
jal

etiq

jr

Jump Register

jr:

0000 00ss sss0 0000 0000 0000 0000 1000

$pc = rs
La instrucci jr salta incondicionalment a ladrea especificada pel registre rs.
jr

rs

lb
lb:

Load Byte
1000 00ss ssst tttt oooo oooo oooo oooo

rt, off16(rs)
rt = SignExt(Mbyte[rs+SignExt(off16)])
La instrucci lb llegeix un byte de memria a ladrea indicada per la suma del registre rs i
lextensi de signe doff16. La dada es guarda al registre dest fent extensi de signe.
lb

lbu
lbu:

Load Unsigned Byte


1001 00ss ssst tttt oooo oooo oooo oooo

rt = ZeroExt(Mbyte[rs+SignExt(off16)])
La instrucci lbu llegeix un byte de memria a ladrea indicada per la suma del registre rs i
lextensi de signe doff16. La dada es guarda al registre dest fent extensi de zeros.
lbu

rt, off16(rs)

lh
lh:

Load Half
1000 01ss ssst tttt oooo oooo oooo oooo

rt = SignExt(Mhalf[rs+SignExt(off16)])
La instrucci lh llegeix un half (16 bits) de memria a ladrea indicada per la suma del registre
rs i lextensi de signe doff16. La dada es guarda al registre dest fent extensi de signe.
lh

rt, off16(rs)

lhu
lhu:

Load Unsigned Half


1001 01ss ssst tttt oooo oooo oooo oooo

rt = ZeroExt(Mhalf[rs+SignExt(off16)])
La instrucci lhu llegeix un half (16 bits) de memria a ladrea indicada per la suma del registre rs i lextensi de signe doff16. La dada es guarda al registre dest fent extensi de zeros.
lhu

rt, off16(rs)

lui
lui:

Load Upper Immediate


0011 1100 000t tttt iiii iiii iiii iiii

rt31:16 = imm16
rt15:0 = 0
La instrucci lui carrega la constant de 16 bits imm16 a la meitat alta del registre dest. Tamb
posa a 0 la meitat baixa del registre dest.
lui

rt, imm16

lw
lw:

Load Word
1000 11ss ssst tttt oooo oooo oooo oooo

rt, off16(rs)
rt = Mword[rs+SignExt(off16)]
La instrucci lw llegeix una paraula (32 bits) de memria a ladrea indicada per la suma del
registre rs i lextensi de signe doff16.
lw

lwc1
lwc1:

Load Word Coprocessor 1


1100 01ss ssst tttt oooo oooo oooo oooo

ft = Mword[rs+SignExt(off16)]
La instrucci lwc1 llegeix una paraula (32 bits) de memria a ladrea indicada per la suma del
registre rs i lextensi de signe doff16. La dada es guarda al registre de coma flotant ft.
lwc1 ft, off16(rs)

mfhi
mfhi:

Move From Hi
0000 0000 0000 0000 dddd d000 0001 0000

rd = $hi
La instrucci mfhi copia el registre $hi al registre dest.
mfhi rd

mflo
mflo:

Move From Lo
0000 0000 0000 0000 dddd d000 0001 0010

rd = $lo
La instrucci mflo copia el registre $lo al registre dest.
mflo rd

mfc0
mfc0:

Move From Coprocessor 0


0100 0000 000t tttt dddd d000 0000 0000

rt = rd (c0)
La instrucci mfc0 copia el registre rd, pertanyent al coprocessador 0, cap al registre de propsit
general rt.
mfc0 rt, rd

mfc1
mfc1:

Move From Coprocessor 1


0100 0100 000t tttt ssss s000 0000 0000

rt = fs
La instrucci mfc1 copia el registre fs, pertanyent al coprocessador 1, cap al registre de propsit
general rt.
mfc1 rt, fs

mov.s
mov.s:

Move Floating-Point Single


0100 0110 0000 0000 ssss sddd dd00 0110

fd = fs
La instrucci mov.s copia el registre de coma flotant en simple precisi fs a fd.
mov.s fd, fs

mtc0
mtc0:

Move To Coprocesor 0
0100 0001 000t tttt dddd d000 0000 0000

rd (c0) = rt
La instrucci mtc0 copia el registre de propsit general rt cap al registre rd, pertanyent al coprocessador 0.
mtc0 rt, rd

mtc1
mtc1:

Move To Coprocessor 1
0100 0101 000t tttt ssss s000 0000 0000

mtc1

Move To Coprocessor 1

fs = rt
La instrucci mtc1 copia el registre de propsit general rt cap al registre fs, pertanyent al coprocessador 1.
mtc1 rt, fs

mult

Multiply

mult:

0000 00ss ssst tttt 0000 0000 0001 1000

lo = low(rs*rt); hi = high(rs*rt)
La instrucci mult calcula el producte enter de dos registres. Els 32 bits de menys pes semmagatzemen al registre lo i els 32 bits de ms pes al registre hi.
mult

rs, rt

multu

Unsigned Multiply

multu:

0000 00ss ssst tttt 0000 0000 0001 1001

lo = low(rs*rt); hi = high(rs*rt)
La instrucci mult calcula el producte natural de dos registres. Els 32 bits de menys pes semmagatzemen al registre lo i els 32 bits de ms pes al registre hi.
multu rs, rt

mul.d

Floating-Point Multiply Double

mul.d:

0100 0110 001t tttt ssss sddd dd00 0010

fd = fs * ft
La instrucci mul.d calcula el producte en coma flotant de doble precisi de dos registres de
coma flotant.
mul.d fd, fs, ft

mul.s

Floating-Point Multiply Single

mul.s:

0100 0110 000t tttt ssss sddd dd00 0010

fd = fs * ft
La instrucci mul.s calcula el producte en coma flotant de simple precisi de dos registres de
coma flotant.
mul.s fd, fs, ft

nor
nor:

NOR
0000 00ss ssst tttt dddd d000 0010 0111

rd = rs NOR rt
La instrucci nor realitza la complementaci de la suma lgica per cada un dels dos bits que
ocupen la mateixa posici als registres fonts.
nor

rd, rs, rt

or
or:

OR
0000 00ss ssst tttt dddd d000 0010 0101

rd, rs, rt
rd = rs OR rt
La instrucci or realitza la suma lgica per cada un dels dos bits que ocupen la mateixa posici
als registres fonts.
or

ori
ori:

OR Immediate
0011 01ss ssst tttt iiii iiii iiii iiii

ori

OR Immediate

rt, rs, imm16


rt = rs OR ZeroExt(imm16)
La instrucci ori realitza la suma lgica per cada un dels dos bits que ocupen la mateixa posici
al registre font i a lextensi de zeros de la constant de 16 bits, que s un operand de la instrucci.
ori

sb
sb:

Store Byte
1010 00ss ssst tttt oooo oooo oooo oooo

Mbyte[rs+SignExt(off16)] = rt
La instrucci sb escriu el byte de menys pes del registre rt a memria a ladrea indicada per la
suma del registre rs i lextensi de signe doff16.
sb

rt, off16(rs)

sh
sh:

Store Half
1010 01ss ssst tttt oooo oooo oooo oooo

Mhalf[rs+SignExt(off16)] = rt
La instrucci sh escriu la meitat baixa (16 bits) del registre rt a memria a ladrea indicada per
la suma del registre rs i lextensi de signe doff16.
sh

rt, off16(rs)

sll
sll:

Shift Left Logical


0000 00ss ssst tttt dddd diii ii00 0000

rd, rt, imm5


rd = rt << imm5
La instrucci sll realitza un desplaament de bits a lesquerra del registre rt. El nombre de bits a
desplaar sindica amb la constant imm5.
sll

sllv
sllv:

Shift Left Logical Variable


0000 00ss ssst tttt dddd d000 0000 0100

rd = rt << rs
La instrucci sll realitza un desplaament de bits a lesquerra del registre rt. El nombre de bits a
desplaar ve indicat pels 5 bits de menys pes del registre rs.
sllv rd, rt, rs

slt
slt:

Set Less Than


0000 00ss ssst tttt dddd d000 0010 1010

rd = 1 si rs < rt; rd = 0 si rs >= rt


La instrucci slt posa a 1 el registre dest si rs < rt (comparaci denters); altrament, el registre dest es posa a 0.
slt

rd, rs, rt

sltu
sltu:

Set Less Than Unsigned


0000 00ss ssst tttt dddd d000 0010 1011

rd = 1 si rs < rt; rd = 0 si rs >= rt


La instrucci sltu posa a 1 el registre dest si rs < rt (comparaci de naturals); altrament, el
registre dest es posa a 0.
sltu rd, rs, rt

slti
slti:

Set Less Than Immediate


0010 10ss ssst tttt iiii iiii iiii iiii

slti

Set Less Than Immediate

rt = 1 si rs < SignExt(imm16); rd = 0 si rs >= SignExt(imm16)


La instrucci slti posa a 1 el registre dest si rs < SignExt(imm16) (comparaci denters); altrament, el registre dest es posa a 0.
slti rt, rs, imm16

sltiu

Set Less Than Immediate Unsigned

sltiu:

0010 10ss ssst tttt iiii iiii iiii iiii

rt = 1 si rs < SignExt(imm16); rd = 0 si rs >= SignExt(imm16)


La instrucci sltiu posa a 1 el registre dest si rs < SignExt(imm16) (comparaci de naturals);
altrament, el registre dest es posa a 0.
sltiu rt, rs, imm16

sra
sra:

Shift Right Arithmetic


0000 00ss ssst tttt dddd diii ii00 0011

rd, rt, imm5


rd = rt >> imm5
La instrucci sra realitza un desplaament aritmtic (amb extensi de signe) de bits a la dreta
del registre rt. El nombre de bits a desplaar sindica amb la constant imm5.
sra

srav
srav:

Shift Right Arithmetic Variable


0000 00ss ssst tttt dddd d000 0000 0111

rd = rt >> rs
La instrucci srav realitza un desplaament aritmtic (amb extensi de signe) de bits a la dreta
del registre rt. El nombre de bits a desplaar ve indicat pels 5 bits de menys pes del registre rs.
srav rd, rt, rs

srl
srl:

Shift Right Logical


0000 00ss ssst tttt dddd diii ii00 0010

rd = rt >>> imm5
La instrucci srl realitza un desplaament lgic (amb extensi de zeros) de bits a la dreta del
registre rt. El nombre de bits a desplaar sindica amb la constant imm5.
srl

rd, rt, imm5

srlv
srlv:

Shift Right Logical Variable


0000 00ss ssst tttt dddd d000 0000 0110

rd = rt >>> rs
La instrucci srlv realitza un desplaament lgic (amb extensi de zeros) de bits a la dreta del
registre rt. El nombre de bits a desplaar ve indicat pels 5 bits de menys pes del registre rs.
srlv rd, rt, rs

subu
subu:

Subtract
0000 00ss ssst tttt dddd d000 0010 0011

rd, rs, rt
rd = rs - rt
La instrucci subu realitza la resta entera de dos registres. Existeix una instrucci anloga (sub)
que realitza la mateixa tasca, per amb la diferncia que genera una excepci si es produeix
sobreeiximent en la resta denters. La instrucci sub no la utilitzarem mai
subu

10

sub.d

Floating-Point Subtract Double

sub.d:

0100 0110 001t tttt ssss sddd dd00 0001

fd = fs - ft
La instrucci sub.d calcula la resta en coma flotant de doble precisi de dos registres de coma
flotant.
sub.d fd, fs, ft

sub.s

Floating-Point Subtract Single

sub.s:

0100 0110 000t tttt ssss sddd dd00 0001

fd = fs - ft
La instrucci sub.s calcula la resta en coma flotant de simple precisi de dos registres de coma
flotant.
sub.s fd, fs, ft

sw

Store Word

sw:

1010 11ss ssst tttt oooo oooo oooo oooo

Mword[rs+SignExt(off16)] = rt
La instrucci sw escriu el registre rt a memria a ladrea indicada per la suma del registre rs i
lextensi de signe doff16.
sw

rt, off16(rs)

swc1

Store Word Coprocessor 1

swc1:

1100 01ss ssst tttt oooo oooo oooo oooo

Mword[rs+SignExt(off16)] = ft
La instrucci swc1 escriu el registre de coma flotant ft a memria a ladrea indicada per la
suma del registre rs i lextensi de signe doff16.
swc1 ft, off16(rs)

syscall
syscall:

System Call
0000 0000 0000 0000 0000 0000 0000 1100

llegiu descripci
La instrucci syscall crida al sistema operatiu generant una excepci. El registre $v0 ha de
contenir el parmetre de la crida al sistema operatiu.
syscall

xor
xor:

XOR
0000 00ss ssst tttt dddd d000 0010 0110

rd = rs XOR rt
La instrucci xor realitza la suma exclusiva per cada un dels dos bits que ocupen la mateixa
posici als registres fonts.
xor

rd, rs, rt

xori
xori:

XOR Immediate
0011 01ss ssst tttt iiii iiii iiii iiii

rt = rs XOR ZeroExt(imm16)
La instrucci xori realitza la suma exclusiva per cada un dels dos bits que ocupen la mateixa
posici al registre font i a lextensi de zeros de la constant de 16 bits imm16.
xori rt, rs, imm16

11

MACROS MARS
A continuaci es descriuen les macros MARS ordenades alfabticament. Abans es
detallen els elements que sutilitzen en la seva sintaxi.
rsrc1, rsrc2, rdest: Especifiquen un registre de propsit general.
imm:

Especifica una expressi que avalua a una constant entera.

adr:

Especifica una expressi que avalua a una constant natural.

b
b etiq

Branch

$pc = etiq

beq $zero, $zero, etiq

$pc = etiq si
rsrc1 >= rscr2

slt $at, rsrc1, rsrc2


beq $at, $zero, etiq

bge
bge rsrc1, rsrc2, etiq

Branch On Greater Or Equal

bgeu
bgeu rsrc1, rsrc2, etiq

Branch On Greater Or Equal Unsigned

$pc = etiq si
rsrc1 >= rscr2

sltu $at, rsrc1, rsrc2


beq $at, $zero, etiq

$pc = etiq si
rsrc1 > rscr2

slt $at, rsrc2, rsrc1


bne $at, $zero, etiq

$pc = etiq si
rsrc1 > rscr2

sltu $at, rsrc2, rsrc1


bne $at, $zero, etiq

$pc = etiq si
rsrc1 <= rscr2

slt $at, rsrc2, rsrc1


beq $at, $zero, etiq

bgt
bgt rsrc1, rsrc2, etiq

Branch On Greater

bgtu
bgtu rsrc1, rsrc2, etiq

Branch On Greater Unsigned

ble
ble rsrc1, rsrc2, etiq

Branch On Lesser Or Equal

bleu
bleu rsrc1, rsrc2, etiq

Branch On Lesser or Equal Unsigned

$pc = etiq si
rsrc1 <= rscr2

sltu $at, rsrc2, rsrc1


beq $at, $zero, etiq

$pc = etiq si
rsrc1 < rscr2

slt $at, rsrc1, rsrc2


bne $at, $zero, etiq

$pc = etiq si
rsrc1 < rscr2

sltu $at, rsrc1, rsrc2


bne $at, $zero, etiq

blt
blt rsrc1, rsrc2, etiq

Blanch On Lesser

bltu
bltu rsrc1, rsrc2, etiq

Branch On Lesser Unsigned

12

la

Load Address

la

rdest, adr

rdest = adr

li

lui $at, hi(adr)


ori rdest, $at, lo(adr)

li

Load Immediate
rdest, imm

rdest = imm

si imm = imm16 ->


addiu rdest, $szero, imm16
--si imm = imm32 ->
lui $at, hi(imm32)
ori rdest, $at, lo(imm32)

move
move

Move
rdest, rsrc

rdest = rsrc

13

addu rdest, $zero, rsrc

14

You might also like