INSTRUKSI MIPS agussalim Organisasi Memori MIPS Dapat dipandang

  • Slides: 22
Download presentation
INSTRUKSI MIPS agussalim

INSTRUKSI MIPS agussalim

Organisasi Memori MIPS Dapat dipandang sebagai sebuah array single dimensi yang besar, dengan 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

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

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

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

Review of MIPS Instruction Formats simple instructions all 32 bits wide very structured, no unnecessary baggage only three instruction formats R op I op J op rs rs rt rd shamt funct rt 16 bit address 26 bit address Op: opcode, rs: 1 st register source, rt: 2 nd register source, rd: register destination, shamt: shift amount, funct: function code

MIPS Instruction Encoding Examples of some Opcodes: Instruction Format Add R Sub R Shift

MIPS Instruction Encoding Examples of some Opcodes: Instruction Format Add R Sub R Shift (by 4) R Add (imm) I Lw (load word) I Sw (store word) I Opcode 0 0 0 8 35 43 shamt 0 0 4 n. a funct 32 34 0 n. a

Bahasa Mesin MIPS Bahasa mesin adalah bahasa yang bisa dimengerti oleh mesin Setiap bahasa

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

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($s 3), $s 2, 32($s 3) Hanya terdapat 32 register, setiap register terdiri dari 32 bit

Kompilasi Menggunakan register Compile by hand using registers: f = (g + h) -

Kompilasi Menggunakan register Compile by hand using registers: f = (g + h) - (i + j); Register Allocations: f: $s 0, g: $s 1, h: $s 2, i: $s 3, j: $s 4 MIPS Instructions: add $s 0, $s 1, $s 2 add $t 1, $s 3, $s 4 sub $s 0, $t 1 # $s 0 = g+h # $t 1 = i+j # f=(g+h)-(i+j)

Data Transfer Instruction: Memory to Register Load: memindahkan data dari memory ke register Syntax:

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: Called “offset” lw $t 0, 8($s 3) Called “base register” or “base address”

Kompilasi operand pada memori Q: Compile by hand using registers: g = h +

Kompilasi operand pada memori Q: Compile by hand using registers: g = h + A[300]; g: $s 1, h: $s 2, $s 3: starting (base) address of array A Since A[300] is in memory, 1 st transfer from memory to (temporary) register: lw $t 0, 300($s 3) # Adds 300 to $s 3 to select A[300], puts into $t 0 lw $t 0, 1200($s 3) # For byte addressable machines 300 x 4 Next add it to h and place in g add $s 1, $s 2, $t 0 # $s 1= h+A[300]

Contoh: Misal A adalah array 8 word dan compiler yg memetakan variabel g dan

Contoh: Misal A adalah array 8 word dan compiler yg memetakan variabel g dan h dengan register $s 1 dan $s 2. Misal alamat awal, alamat basis, array ada dalam $s 3 Terjemahkan program C berikut: g = h + A[8] Jawaban: lw $t 0, 32($s 3) add $s 1, $s 2, $t 0 # Temporary reg $t 0 gets A[8] # g = h+A[8]

Kompilasi Menggunakan Load dan Store Misal variabel h diasosiasikan dengan register $s 2 dan

Kompilasi Menggunakan Load dan Store Misal variabel h diasosiasikan dengan register $s 2 dan alamat dasar array A ada dalam $s 3. Bagaimanakah kode assembly MIPS untuk program C berikut ? A[12] = h + A[8] Jawab: lw $t 0, 32($s 3) add $t 0, $s 2, $t 0 sw $t 0, 48($s 3)

Menterjemahkan Assembly MIPS ke Dalam Instruksi Mesin Contoh: Terdapat instruksi MIPS: add $t 0,

Menterjemahkan Assembly MIPS ke Dalam Instruksi Mesin Contoh: Terdapat instruksi MIPS: add $t 0, $s 1, $s 2 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 000000110010010000100000

Menterjemahkan C ke Dalam Assembly dan Bahasa Mesin MIPS Contoh: Terjemahkan bahasa MIPS ke

Menterjemahkan C ke Dalam Assembly dan Bahasa Mesin MIPS Contoh: Terjemahkan bahasa MIPS ke dalam bahasa mesin. Asumsi $t 1 menyimpan basis array A dan $s 2 sebagai h, program C: A[300] = h + A[300] Jawab: Dikompile dalam MIPS lw $t 0, 1200($t 1) #temp reg $t 0 gets A[300] add $t 0, $s 2, $t 0 #temp reg $t 0 gets h+A[300] sw $t 0, 1200($t 1):

MIPS assembly language

MIPS assembly language

Instruksi untuk membuat keputusan Compile pernyataan IF ke dalam branch kondisional. Berikut program C:

Instruksi untuk membuat keputusan Compile pernyataan IF ke dalam branch kondisional. Berikut program C: if (i==j) go to L 1; f = g + h; L 1 f = f – i; Asumsi 5 buah variabel f-j sama dengan registers $s 0 -s 4 bagaimanakah hasil compile dalam kode MIPS? beq $s 3, $s 4, L 1 # go to L 1 if i equals j add $s 0, $s 1, $s 2 #f=g+h L 1: sub $s 0, $s 3 # f = f – i

Kompilasi pencabangan kondisional ifthen-else Menggunakan variabel dan register yang sama seperti contoh sebelumnya, compile

Kompilasi pencabangan kondisional ifthen-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 $s 3, $s 4, else # go to Else if i ≠ j , , g j add $s 0, $s 1, $s 2 # f = g + h (skipped if i ≠ j) j exit # go to Exit j g else: sub $s 0, $s 1, $s 2 # f = g - h Exit:

MID TEST Kamis, 01 Desember 2010 OPEN BOOK

MID TEST Kamis, 01 Desember 2010 OPEN BOOK

TUGAS PRASYARAT MID Test 1. Ubahlah penggalan kode C berikut ini menjadi kode MIPS

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

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

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;