kumpulan instruksi mips - iagus.files.wordpress.com · organisasi memori mips dapat dipandang...

22
INSTRUKSI MIPS agussalim

Upload: lehanh

Post on 03-Oct-2018

248 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

INSTRUKSI MIPS

agussalim

Page 2: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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

Page 3: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

Organisasi Register MIPS

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

Page 4: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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, ...

Page 5: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

Review of MIPS Instruction Formats

simple instructions all 32 bits wide very structured, no unnecessary baggage only three instruction formats

op rs rt rd shamt funct

op rs rt 16 bit address

op 26 bit address

R

I

J

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

source, rd: register destination, shamt: shift amount,

funct: function code

Page 6: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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

Page 7: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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

Page 8: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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

Page 9: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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)

Page 10: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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”

Page 11: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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]

Page 12: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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]

Page 13: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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)

Page 14: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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

Page 15: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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):

Page 16: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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

immediate

lui $s1, 100 $s1 = 100 * 216 Loads constant in upper 16 bits

branch on equal beq $s1, $s2, 25 if ($s1 == $s2) go to

PC + 4 + 100

Equal test; PC-relative branch

Conditional

branch on not equal bne $s1, $s2, 25 if ($s1 != $s2) go to

PC + 4 + 100

Not equal test; PC-relative

branch set on less than slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1;

else $s1 = 0

Compare less than; for beq, bne

set less than

immediate

slti $s1, $s2, 100 if ($s2 < 100) $s1 = 1;

else $s1 = 0

Compare less than constant

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

Page 17: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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

Page 18: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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:

Page 19: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

Kamis, 01 Desember 2010

MID TEST

OPEN BOOK

Page 20: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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];

Page 21: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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;

}

Page 22: Kumpulan Instruksi MIPS - iagus.files.wordpress.com · Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan sebuah alamat / address Sebuah

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;