Anda di halaman 1dari 22

INSTRUKSI MIPS

agussalim
Organisasi Memori MIPS
 Dapat dipandang sebagai sebuah array single
dimensi yang besar, dengan sebuah alamat /
address
 Sebuah address memori adalah index dari
array
 Terdapat 232 bytes dengan alamat byte dari 0
sampai 232-1
 “Byte addressing” berarti bahwa indeks
menunjuk pada sebuah byte di memori.
 Bytes sudah baik, namun banyak item data
menggunakan “word” yang lebih besar
 Untuk MIPS, sebuah word adalah 32 bit atau 4
byte
 Jadi, MIPS mempunyai 230 word dengan
alamat byte di 0, 4, 8, ... , 232-4
Organisasi Register MIPS

Register 1 ($at) disimpan untuk assembler, 26-27 untuk operating system


MIPS ISA
The MIPS instruction set
architecture
 serupa dengan
arsitektur lain yang
dikembangkan sejak
1980-an
 Hampir 100 juta
prosesor MIPS dibuat
sejak 2002
 Digunakan oleh NEC,
Nintendo, Cisco, Silicon
Graphics, Sony, ...
Review of MIPS Instruction Formats
 simple instructions all 32 bits wide
 very structured, no unnecessary baggage
 only three instruction formats

R op rs rt rd shamt funct
I op rs rt 16 bit address
J op 26 bit address

Op: opcode, rs: 1st register source, rt: 2nd register


source, rd: register destination, shamt: shift amount,
funct: function code
MIPS Instruction Encoding

Examples of some Opcodes:


Instruction Format Opcode shamt funct
Add R 0 0 32
Sub R 0 0 34
Shift (by 4) R 0 4 0
Add (imm) I 8 n.a n.a
Lw (load word) I 35 n.a n.a
Sw (store word) I 43 n.a n.a
Bahasa Mesin MIPS
 Bahasa mesin adalah bahasa yang bisa dimengerti
oleh mesin
 Setiap bahasa assembly diterjemahkan ke dalam
bahasa mesin yang dapat dimengerti oleh MIPS
Instruksi Aritmetika dari MIPS
 Semua instruksi memiliki 3 operands
 Urutan instruksi adalah tetap (yang pertama adalah tujuan)
 Operand harus register - register (tidak bisa memori)
Salah: add 48($s3), $s2, 32($s3)
 Hanya terdapat 32 register, setiap register terdiri dari 32 bit
Kompilasi Menggunakan register
Compile by hand using registers:
f = (g + h) - (i + j);
Register Allocations:
f: $s0, g: $s1, h: $s2, i: $s3, j: $s4
 MIPS Instructions:
add $s0,$s1,$s2 # $s0 = g+h
add $t1,$s3,$s4 # $t1 = i+j
sub $s0,$s0,$t1 # f=(g+h)-(i+j)
Data Transfer Instruction:
Memory to Register
 Load: memindahkan data dari memory ke register
 Syntax:
1) operation name
2) register to be loaded
3) constant and register to access memory
 MIPS name, lw for load word:
 Example: lw $t0, 8($s3)

Called “offset”
Called “base register”
or “base address register”
or “base address”
Kompilasi operand pada memori
Q: Compile by hand using registers:
g = h + A[300];
g:$s1, h:$s2, $s3:starting (base) address of array A
 Since A[300] is in memory, 1st transfer from memory to (temporary)
register:
lw $t0,300($s3) # Adds 300 to $s3 to select
A[300], puts into $t0
lw $t0,1200($s3) # For byte addressable
machines 300x4
 Next add it to h and place in g
add $s1,$s2,$t0 # $s1= h+A[300]
Contoh:
 Misal A adalah array 8 word dan compiler yg
memetakan variabel g dan h dengan register $s1 dan
$s2. Misal alamat awal, alamat basis, array ada
dalam $s3 Terjemahkan program C berikut:
g = h + A[8]

Jawaban:
lw $t0, 32($s3) # Temporary reg $t0 gets A[8]
add $s1, $s2, $t0 # g = h+A[8]
Kompilasi Menggunakan Load dan
Store
 Misal variabel h diasosiasikan dengan register $s2
dan alamat dasar array A ada dalam $s3.
Bagaimanakah kode assembly MIPS untuk program
C berikut ?
A[12] = h + A[8]
Jawab:
lw $t0, 32($s3)
add $t0, $s2, $t0
sw $t0, 48($s3)
Menterjemahkan Assembly MIPS ke
Dalam Instruksi Mesin
 Contoh: Terdapat instruksi MIPS:
add $t0, $s1, $s2
Ubahlah ke dalam kombinasi bilangan desimal
kemudian bilangan binernya
Jawab:
The decimal representation : 0-17-18-8-0-32
In biner:
000000-10001-10010-01000-00000-100000
machine language
00000010001100100100000000100000
Menterjemahkan C ke Dalam Assembly
dan Bahasa Mesin MIPS
 Contoh: Terjemahkan bahasa MIPS ke dalam bahasa mesin.
Asumsi $t1 menyimpan basis array A dan $s2 sebagai h,
program C:
A[300] = h + A[300]
Jawab:
Dikompile dalam MIPS
lw $t0, 1200($t1) #temp reg $t0 gets A[300]
add $t0, $s2, $t0 #temp reg $t0 gets h+A[300]
sw $t0, 1200($t1):
MIPS assembly language
MIPS assembly language
Category Instruction Example Meaning Comments
add add $s1, $s2, $s3 $s1 = $s2 + $s3 Three operands; data in registers

Arithmetic subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 Three operands; data in registers

add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 Used to add constants
load w ord lw $s1, 100($s2) $s1 = Memory[$s2 + 100]Word from memory to register
store w ord sw $s1, 100($s2) Memory[$s2 + 100] = $s1 Word from register to memory
Data transfer load byte lb $s1, 100($s2) $s1 = Memory[$s2 + 100]Byte from memory to register
store byte sb $s1, 100($s2) Memory[$s2 + 100] = $s1 Byte from register to memory
load upper lui $s1, 100 $s1 = 100 * 2
16 Loads constant in upper 16 bits
immediate
branch on equal beq $s1, $s2, 25 if ($s1 == $s2) go to Equal test; PC-relative branch
PC + 4 + 100
branch on not equal bne $s1, $s2, 25 if ($s1 != $s2) go to Not equal test; PC-relative
PC + 4 + 100
Conditional
branch set on less than slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1; Compare less than; for beq, bne
else $s1 = 0
set less than slti $s1, $s2, 100 if ($s2 < 100) $s1 = 1; Compare less than constant
immediate else $s1 = 0
jump j 2500 go to 10000 Jump to target address
Uncondi- jump register jr $ra go to $ra For sw itch, procedure return
tional jump jump and link jal 2500 $ra = PC + 4; go to 10000 For procedure call
Instruksi untuk membuat keputusan
 Compile pernyataan IF ke dalam branch kondisional.
Berikut program C:
if (i==j) go to L1;
f = g + h;
L1 f = f – i;
Asumsi 5 buah variabel f-j sama dengan registers $s0-s4
bagaimanakah hasil compile dalam kode MIPS?
beq $s3, $s4, L1 # go to L1 if i equals j
add $s0, $s1, $s2 #f=g+h
L1: sub $s0, $s0, $s3 # f = f – i
Kompilasi pencabangan kondisional if-
then-else
 Menggunakan variabel dan register yang sama
seperti contoh sebelumnya, compile statemen
berikut:
if (i == j) f = g + h ; else f = g – h;
Jawab:
bne $s3, $s4, else # go to Else if i ≠ j ,, g j
add $s0, $s1, $s2 # f = g + h (skipped if i ≠ j)
j exit # go to Exit j g
else: sub $s0, $s1, $s2 # f = g - h
Exit:
MID TEST
Kamis, 01 Desember 2010
OPEN BOOK
TUGAS PRASYARAT MID Test
1. Ubahlah penggalan kode C berikut ini menjadi kode
MIPS dan bahasa Mesin
temp =m[4];
m[4] = n[4];
n[4] = temp;
2. Ubahlah penggalan kode C berikut ini menjadi kode
MIPS dan bahasa mesin
if(a <= 7)
b[1] = a + 7 + b[5];
else
b[1] = a – 7 + b[5];
TUGAS PRASYARAT MID Test
3. Ubahlah penggalan kode C berikut ini menjadi kode
MIPS dan bahasa mesin
j = 6;
k = 1;
while (j < 10)
{
if(j < 4)
i =j+k;
else
i = k – j;
j = j + 2;
k = k + 1;
}
TUGAS PRASYARAT MID Test
4. Ubahlah penggalan kode C berikut ini menjadi
kode MIPS dan bahasa mesin
if(x >= 3) && (y < 5)
k = x – y – 2;
else
k = x + y + 2;

Anda mungkin juga menyukai