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