Anda di halaman 1dari 17

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:

Anda mungkin juga menyukai