Sabtu, 24 Oktober 2015

Sajarah Dan Penjelasan MIPS

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 
                   yaitu  R2000
  •  1988 : R3000 direlease berbentuk CPU yang berbasis 32 bit.
                   Mengimplementasikan hampir semua interlock di hardware
                   -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 
                   R4000
  •  1992 : MIPS Computer system berganti menjadi MIPS 
                   technologies setelah dibeli oleh SG
  •  1998 : MIPS menjadi sangat sukses setelah SGI mengubah 
                   proses MIPS technologies.
  •  1999 : MIPS membentuk 2 kelas besar untuk lisensi yaitu MIPS
                   32  (prosesor 32 bit) dan MIPS 64 (prosesor 64 bit). 
                   Bedanya terletak pada lebar jalur yang akan dilalui oleh bit-bit
                   data.


Penjelasan Mips dan Komponen

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)

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

•   Adder  : penjumlah 2 buah inputan n bit dan menghasilkan sebuah
 keluaran  bit. Di MIPS ada 2 buah adder.

•   Multiplexer : selector dari 2 buah input yang tersedia untuk di alirkan
 ke  output.

•   Sign extend : mengubah data 16 bit menjadi 32 bit dengan menambah 
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 ciriciri 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.
•        Add Immediate $t = $s + imm addi $t, $s, imm Menjumlahkan isi 
         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 
         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.
•        Substract Unsigned $d = $s ‐ $t subu $d, $s, $t Mengurangkan isi 
         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
•        Divide Unsigned $LO = $s / $t; $HI = $s % $t divu $s, $t Pembagian 
         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)
•        Move from Low $d = $LO mflo $d Mengisi sebuah register dengan 
         bilangan bulat hasil operasi div ($LO)
•        Move $s = $t move $s, $t Meng‐copy isi sebuah register ke register
         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


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.


Tidak ada komentar:

Posting Komentar