Instruksi MIPS
-
Upload
amar-maruf -
Category
Documents
-
view
216 -
download
4
description
Transcript of Instruksi MIPS
INSTRUKSI MIPS
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
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
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 target (source2), 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 name2) register to be loaded3) 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 memoriQ: 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 gadd $s1,$s2,$t0 # $s1= h+A[300]
Contoh:
Misal A adalah array 100 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, $t0sw $t0, 48($s3)
Menterjemahkan Assembly MIPS ke Dalam Instruksi Mesin
Contoh: Terdapat instruksi MIPS:add $t0, $s1, $s2Ubahlah ke dalam kombinasi bilangan desimal kemudian bilangan binernyaJawab:The decimal representation : 0-17-18-8-0-32In biner: 000000-10001-10010-01000-00000-100000machine language00000010001100100100000000100000
Menterjemahkan C ke Dalam Assemblydan 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 MIPSlw $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 Commentsadd 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 memoryload 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
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 kodeMIPS?beq $s3, $s4, L1 # go to L1 if i equals jadd $s0, $s1, $s2 # f = g + hL1: 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 jadd $s0, $s1, $s2 # f = g + h (skipped if i ≠ j)j exit # go to Exit j gelse: sub $s0, $s1, $s2 # f = g - hExit:
Kamis, 01 Desember 2010
MID TEST
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 mesinif(x >= 3) && (y < 5) k = x – y – 2; else k = x + y + 2;