Sejarah Mips
Sejarah
pada Mips berawal dari John L hennesey yang berasal dari stanford yang kemudian
beralih ke Mips technology system .
Mips
yang artinya Million Instruction per second atau juga dikenal without
Interlocked Pipline Stages, Pipelines itu berarti paralel, Ngomong ngomong apa
sih Mips itu? mips itu mempelajari prosesor dengan intruksi intruksinya
nah ini sejarahnya :
- 1985 : MIPS computer system mereleaase design pertamanya
- 1988 : R3000 direlease berbentuk CPU yang berbasis 32 bit.
-nya dan mensuply full multiple dan dividing instruction.
- 1990 awal : melisensi produknya ke 3 vendor
- 1990 : MIPS menjadi power house dalam embedded processor.
- 1991 : MIPS me-release mikroprosesor 64 bit dengan nama
- 1992 : MIPS Computer system berganti menjadi MIPS
- 1998 : MIPS menjadi sangat sukses setelah SGI mengubah
- 1999 : MIPS membentuk 2 kelas besar untuk lisensi yaitu MIPS
Bedanya terletak pada lebar jalur yang akan dilalui oleh bit-bit
data.
data.
MIPS itu salah satu jenis processor. Nah MIPS ini, processor yang paling mudah untuk dipahami dibanding dengan INTEL atau yang lainnya. Soalnya MIPS dirancang sama John L Hennesy pada 1981 yang pas itu dibuatnya di Stanford University, jadi komponen-komponennya masi dasar gitu dan mudah dipahami untuk pembelajaran di kuliah. MIPS sendiri punya kepanjangan : Microprocessor without Interlocked Pipeline Stages.
Versi dasar dari MIPS adalah versi R2000 yang merupakan MIPS yang pertama kali di-release. Dibagi menjadi 2 jenis, yaitu MIPS satu siklus dan MIPS 2 siklus.
Komponen utama
• Control Unit Merupakan bagian pengendali yang berfungsi
mengendalikan bagian-bagian MIPS yang lain (aktivitas prosesor). Instruksi
tediri dari 2 bagian yaitu input dan operan. Instruksi di MIPS panjangnya 32
bit. Namun yang masuk ke dalam control unit hanya 6 bit, yaitu bit ke 26-31.
Kemudian mengeluarkan output 9 bit kendali komponen yang akan menjadi input
bagian-bagian MIPS yang lain. Bit kendali yang dihasilkan :
• RegDst (Register destination) : jadi inputan ke mux untuk selector
data mana yang akan ditulis ke register
• Branch : menangani pencabangan
(di set 1 ketika terjadi pencabangan)
(di set 1 ketika terjadi pencabangan)
• MemRead (Memory Read :
di set 1 untuk membaca data dari memory, 0 jika tidak
• MemToReg (Memory To Register) :
inputan buat mux untuk selector apakah data disimpan dalam memory dikirim ke
register
• ALU Op (ALU operation)
• MemWrite (Memory write) :
di set 1 untuk menyimpan data ke memory, 0 jika tidak
• ALU src (ALU source)
• RegWrite (Register Write)
Masing-masing
1 bit kecuali ALU Op 2 bit.
• Program Counter (PC) : Menghitung alamat instruksi berikutnya
yang akan di eksekusi. Yang disimpan dalam PC adalah alamat memory. Alamat
instruksi sama dengan alamat memory. Sedangkan alamat sediri tidak sama dengan
instruksi. Masukkan dan keluaran dari PC sama yaitu sepanjang 32 bit (satu
instruksi 32 bit). Daya tampung 1 alamat memory pada MIPS sepanjang 8 bit.
Alamat memory sendiri merentang dari 000..00 sampai 111..11 sepanjang 32 bit.
Jika tidak ada instruksi pencabangan maka nilai di dalam PC ditambah 4 setiap
selesai melakukkan instruksi. Karena panjang instruksi 32 bit sedangkan daya tampung
setiap alamat memory hanya 8 bit.
• Memory Instruksi : Menyimpan Instruksi yang akan di eksekusi.
Inputnya alamat yang tadi disimpan dalam PC sebanyak 32 bit. Keluarannya
instruksi sepanjang 32 bit juga.
• Memory data : Menyimpan data hasil pemrosesan ALU. Masukkannya berupa alamat yang akan
dipakai untuk menyimpan data (32 bit) dan data yang akan disimpan (32 bit).
Keluarannya data 32 bit. Ada 2 macam memory data : memory read untuk membaca
data dan memory write untuk menyimpan data, yang pemakaiannya diatur oleh
control unit.
• Register :Menyimpan data yang akan diproses oleh ALU dan
menyimpan data hasil perhitungan. Setiap register mempunyai nama, nomor, dan
fungsinya masing-masing. Banyaknya 32 buah dengan masing-masing panjangnya 32
bit. Diakses berdasarkan nomornya. Namun pada pemrograman, akses berdasarkan
nama registernya.
• ALU (arithmetic and Logical unit) : Mengolah dua buah data
masukkan. Bisa penjumlahan pengurangan atau pembandingan. Masukkan berupa input
1 sepanjang 32 bit dan input 2 sepanjang 32 bit. Keluaran berupa hasil
pengolahan dan zero flag. Zero flag di set 1 ketika hasil keluaran bernilai 0.
Di set 0 jika sebaliknya.
Komponen pendukung
• Shifter : penggeser bit, 2 kali ke kiri (shift left 2) atau
mengalikan
dengan 4.
dengan 4.
• Adder : penjumlah 2 buah inputan n bit dan menghasilkan
sebuah
keluaran bit. Di MIPS ada 2 buah adder.
keluaran bit. Di MIPS ada 2 buah adder.
• Multiplexer : selector dari 2 buah input yang tersedia untuk
di alirkan
ke output.
ke output.
• Sign extend : mengubah data 16 bit menjadi 32 bit dengan
menambah
0 sebanyak 16 bit di awal.
0 sebanyak 16 bit di awal.
MIPS DAN BAHASA ASSEMBLY
Berdasarkan
perancangan perangkat instruksinya, ada 2 jenis arsitektur prosesor yang menonjol
saat ini, yaitu arsitektur RISC (Reduce Instruction Set Computer) dan CISC
(Complex Instruction Set Computer). Prosesor RISC memiliki instruksi‐instruksi
yang lebih sederhana dan lebih cepat untuk dieksekusi dibandingkan prosesor
CISC.
Prosesor RISC memiliki ciri‐ciri khusus, yaitu:
• Prosesor RISC
mengeksekusi instruksi pada setiap satu siklus detak (Robinson, 1987 : 144 ; Johnson, 1987 : 153)
• Instruksi pada prosesor
RISC memiliki format tetap, sehingga rangkaian pengontrol instruksi menjadi
lebih sederhana
• Instruksi yang
berhubungan dengan memori hanya instruksi isi (load) dan instruksi simpan
(store), instruksi lain dilakukan dalam register internal prosesor
• Prosesor RISC
memerlukan waktu kompilasi yang lebih lama daripada prosesor CISC.
MIPS
(Microprocessor without Interlocked Pipeline Stages) merupakan salah satu
contoh prosesor yang dibangung dengan arsitektur RISC. Desain prosesor MIPS
saat ini banyak digunakan pada beberapa embedded system (seperti the Series2
TiVo, Windows CE devices, Cisco routers, residential gateways, Foneras, Avaya)
dan video games console (seperti Nintendo 64 and Sony PlayStation, PlayStation
2, PlayStation Portable)
Bahasa
Assembly merupakan bahasa pemrograman tingkat rendah (Low Level Programming Language)
yang kita gunakan untuk memberikan instruksi‐instruksi kepada prosesor MIPS.
Untuk mensimulasikan pemrograman pada MIPS dengan bahasa Assembly, kita dapat
menggunakan beberapa tools, salah satunya ialah PCSpim. Dengan PCSpim, kita dapat
meng‐compile, menjalankan, dan melihat hasil dari kode‐kode program kita. Namun,
karena Assembly adalah bahasa tingkat rendah yang instruksinya terkait erat
dengan bahasa mesin, maka penggunaan resource‐nya pun sangat terbatas.
Tidak
seperti halnya pada bahasa pemrograman tingkat tinggi, jumlah operan pada
instruksi‐instruksi di bahasa Assembly MIPS sangatlah terbatas sesuai jumlah
register yang mana digunakan sebagai tempat penyimpanan data.
INSTRUKSI PADA MIPS
Secara
umum, instruksi pada MIPS dibagi menjadi 4 tipe, yaitu instruksi tipe
Arithmetic Operation, Logical Operation, Data Transfer, dan Control, yang akan
dijelaskan sebagai berikut.
Ø Instruksi
tipe Arithmetic Operation
Instruksi tipe ini adalah
instruksi untuk operasi‐operasi aritmatika, seperti penjumlahan, pengurangan,
pembagian, perkalian, dan variasinya.
Instruksi Operasi Sintaks dan Contoh
Deskripsi
• Add $d = $s + $t add $d, $s, $t= Menjumlahkan isi dari dua
buah
register dan menyimpan hasilnya ke register lain.
register dan menyimpan hasilnya ke register lain.
• Add Immediate $t = $s + imm addi $t, $s, imm Menjumlahkan isi
sebuah Register dengan sebuah signed number [imm] dan menyimpan
hasilnya ke register lain
sebuah Register dengan sebuah signed number [imm] dan menyimpan
hasilnya ke register lain
• Add ImmUnsigned $t = $s + imm addiu $t, $s,= imm Menjumlahkan
isi sebuah register dengan sebuah unsigned number [imm] dan
isi sebuah register dengan sebuah unsigned number [imm] dan
menyimpan hasilnya ke register lain
• Substract $d = $s ‐ $t sub $d, $s, $t Mengurangkan isi dari
dua
buah register dan menyimpan hasilnya ke register lain.
buah register dan menyimpan hasilnya ke register lain.
• Substract Unsigned $d = $s ‐ $t subu $d, $s, $t Mengurangkan
isi
dari dua buah register (tanpa memperhatikan tanda) dan menyimpan
hasilnya ke register lain.
dari dua buah register (tanpa memperhatikan tanda) dan menyimpan
hasilnya ke register lain.
• Divide $LO = $s / $t; $HI = $s % $t div $s, $t Pembagian 2
buah
register, menyimpan hasil bulatnya di $LO dan sisanya di $HI
register, menyimpan hasil bulatnya di $LO dan sisanya di $HI
• Divide Unsigned $LO = $s / $t; $HI = $s % $t divu $s, $t
Pembagian
2 buah register, menyimpan hasil bulatnya di $LO dan sisanya di $HI
2 buah register, menyimpan hasil bulatnya di $LO dan sisanya di $HI
• Move from High $d = $HI mfhi $d Mengisi sebuah register
dengan
bilangan sisa pembagian atau operasi modulo ($HI)
bilangan sisa pembagian atau operasi modulo ($HI)
• Move from Low $d = $LO mflo $d Mengisi sebuah register dengan
bilangan bulat hasil operasi div ($LO)
bilangan bulat hasil operasi div ($LO)
• Move $s = $t move $s, $t Meng‐copy isi sebuah register ke
register
lain
lain
• Multiply $LO = $s * $t mult $s, $t Mengalikan 2 buah register
dan
menyimpan hasilnya ke $LO
• Multiply Unsigned $LO = $s * $t multu $s, $t Mengalikan 2
buah
register dan menyimpan hasilnya ke $LO
register dan menyimpan hasilnya ke $LO
Instruksi tipe
Logical Operation
Instruksi
tipe ini meliputi operasi‐operasi Boolean.
- And $1 = $2 & $3 and $1,$2,$3 Operasi AND dari 2 buah register
- or $1 = $2 | $3 or $1,$2,$3 Operasi OR dari 2 buah register
- xor $1 = $2 XOR $3 xor $1,$2,$3 Operasi XOR dari 2 buah register
- nor $1 = ~($2 | $3) nor $1,$2,$3 Operasi NOR dari 2 buah register
- and immediate $1 = $2 & 10 andi $1,$2,10 Operasi AND antara sebuah register dengan angka
- or immediate $1 = $2 | 10 ori $1,$2,10 Operasi OR antara sebuah register dengan angka
- xor immediate $1 = ~$2 &~10 xori $1, $2,10 Operasi XOR antara sebuah register dengan angka st
- shift left logical $1 = $2 << 10 sll $1,$2,10 Geser ke kiri sebanyak nilai konstan yang diberikan
- shift right logical $1 = $2 >> 10 srl $1,$2,10 Geser ke kanan sebanyak nilai konstan yang diberikan
- shift right arithmetic $1 = $2 >> 10 sra $1,$2,10 Geser ke kanan sebanyak nilai konstan yang diberikan (sign extended)
- shift left logical $1 = $2 << $3 sllv $1,$2,$3 Geser ke kiri sebanyak nilai pada register
- shift right logical $1 = $2 >> $3 srlv $1,$2,$3 Geser ke kanan sebanyak nilai pada register
- shift right arithmetic $1 = $2 >> $3 srav $1,$2,$3 Geser ke kanan sebanyak nilaipada register (sign extended)
Instruksi tipe Data Transfer
Instruksi tipe ini
merupakan instruksi yang melibatkan pengambilan atau penyimpanan dari atau ke
memori register.
- Store Byte MEM[$s + offset] = (0xff & $t) sb $t, offset($s) Least significant byte dari $t disimpan ke alamat yang ditentukan (offset($s))
- Store Word MEM[$s + offset] = $t sw $t, offset($s) Isi dari $t disimpan ke alamat yang ditentukan
- Load Immediate $s = imm li $s, imm Mengisi register $s dengan sebuah signed number [imm]
- Load Byte $t = MEM[$s + offset] lb $t, offset($s) Me‐load sebuah byte ke sebuah register dari alamat yang ditentukan (offset($s))
- Load Upper Immediate $t = (imm << 16) lui $t, imm Sebuah angka [imm] digeser sebanyak 16 bit ke kiri dan disimpan ke dalam register
- Load Word $t = MEM[$s + offset] lw $t, offset($s) Me‐load suatu nilai ke sebuah register dari alamat yang ditentukan (offset($s))
Instruksi tipe Control
- BEQ if $s = $t; advance_pc (offset << 2)) beq $s, $t, offset Jika $s dan $t sama, maka menuju ke alamat yang dituju
- BNE if $s != $t; advance_pc (offset << 2)) bne $s, $t, offset Jika $s dan $t tidak sama, maka menuju ke alamat yang dituju
- BGEZ if $s >= 0; advance_pc (offset << 2)) bgez $s, offset Menuju ke alamat yang dituju jika $s lebih besar atau sama dengan dari 0
- BGEZAL if $s >= 0; $31 = PC + 8 (or nPC + 4); advance_pc (offset << 2)); bgezal $s, offset Menuju ke alamat yang dituju jika $s lebih besar atau sama dengan dari 0 dan menyimpan alamat tersebut ke $31
- BGTZ if $s > 0; advance_pc (offset << 2)) bgtz $s, offset Menuju ke alamat yang dituju jika $s lebih besar dari 0
- BLEZ if $s <= 0; advance_pc (offset << 2)) blez $s, offset Menuju ke alamat yang dituju jika $s lebih kecil atau sama dengan dari 0
- BLTZ if $s < 0; advance_pc (offset << 2)) bltz $s, offset Menuju ke alamat yang dituju jika $s lebih kecil dari 0
- BLTZAL if $s < 0; $31 = PC + 8 (or nPC + 4); advance_pc (offset << 2)); bltzal $s, offset Menuju ke alamat yang dituju jika $s lebih kecil atau sama dengan dari 0 dan menyimpan alamat tersebut ke $31
- J PC = nPC j target Melompat ke alamat target
- JAL $31 = PC + 8 (or nPC + 4) jal target Melompat ke alamat target dan menyimpan alamat tersebut ke $31
- JR PC = nPC; nPC = $s jr $s Melompat ke alamat yang merupakan isi dari register $s
- SLT if $s < $t; $d = 1; else $d = 0; slt $d, $s, $t Jika $s kurang dari $t, $d diset menjadi 1, dan 0 jika selainnya
- SLTI if $s < imm; $t = 1; else $t = 0; slti $t, $s, imm Jika $s kurang dari [imm], $t diset menjadi 1, dan 0 jika selainnya
- SLTIU if $s < imm; $t = 1; else $t = 0; sltiu $t, $s, imm Jika $s kurang dari unsigned [imm], $t diset menjadi 1, dan 0 jika selainnya
- SLTU if $s < $t; $d = 1; else $d = 0; sltu $d, $s, $t Jika $s kurang dari $t, $d diset menjadi 1, dan 0 jika selainnya.