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
R op rs rt rd shamt funct
I op rs rt 16 bit address
J op 26 bit address
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;