Instruksi dalam MIPS Instruksi Instruksi disimpan dalam memori

  • Slides: 29
Download presentation
Instruksi dalam MIPS

Instruksi dalam MIPS

Instruksi Ø Instruksi disimpan dalam memori pada alamat awal Ø Data disimpan di memori

Instruksi Ø Instruksi disimpan dalam memori pada alamat awal Ø Data disimpan di memori pada alamat akhir Ø Bagaimana mengeksekusi instruksi ? Ø Pada umumnya terdapat tiga tahap: v Fetch: Pengambilan v Decode: Penerjemahan v Execute: Eksekusi Ø Pada beberapa prosesor tahapannya bisa lebih dari 3 tahap 27042008 #1

Fetch (1) Ø Tujuan: untuk mengambil instruksi dari memori instruksi ke register Ø Instruksi

Fetch (1) Ø Tujuan: untuk mengambil instruksi dari memori instruksi ke register Ø Instruksi memiliki lebar 32 bit Ø Setiap 8 bit menggunakan 1 alamat memori, sehingga satu instruksi menempati 4 alamat Ø Karena satu instruksi disimpan dalam 4 alamat maka PC akan ditambah nilainya dengan 4 setiap kali selesai mengambil instruksi 27042008 #2

Fetch (2) COA/Endro Ariyanto/ 27042008 #3

Fetch (2) COA/Endro Ariyanto/ 27042008 #3

Fetch (3) Ø Misal instruksi add $t 2, $s 2, $t 1 v Bahasa

Fetch (3) Ø Misal instruksi add $t 2, $s 2, $t 1 v Bahasa mesin: 00000010 01001001 01010000 00100000 Ø Disimpan dalam memori: v v Address 0 1 2 3 00000010 01001001 01010000 00100000 Ø Fetch: v Instruction Register 0000001001010100000 v PC PC+4 # untuk mengambil instruksi berikutnya 27042008 #4

Decode (1) Ø Tujuan: untuk menterjemahkan kode operasi (instruction[31 -26]) dan menghasilkan 9 bit

Decode (1) Ø Tujuan: untuk menterjemahkan kode operasi (instruction[31 -26]) dan menghasilkan 9 bit kontrol (microinstruction) Ø Opcode: 6 bits awal instruksi yang terdapat dalam register instruksi Ø Unit kendali mendefinisikan tipe instruksi dan membuat 9 bit kendali 27042008 #5

Decode (2) Ø Dalam unit kendali terdapat ROM yang berguna untuk menterjemahkan instruksi Ø

Decode (2) Ø Dalam unit kendali terdapat ROM yang berguna untuk menterjemahkan instruksi Ø Kode operasi sebagai input akan diproses sehingga dikeluarkan satu kombinasi jalur kendali 9 bit Ø Nilai yang keluar dari unit kendali disebut mikroinstruksi Ø Mikroinstruksi mengendalikan operasi pada datapath 27042008 #6

Execute Ø Tujuan: mengeksekusi instruksi Ø Instruksi dibagi menjadi tiga kelas: v R-type v

Execute Ø Tujuan: mengeksekusi instruksi Ø Instruksi dibagi menjadi tiga kelas: v R-type v Load/Store-type v Branch-type Ø Tipe R adalah tipe aritmetik Ø Tipe Load/Store melakukan pengaksesan memori baik menyimpan maupun membaca Ø Tipe Branch digunakan untuk instruksi lompatan dan pencabangan Ø Setting jalur kendali tergantung field opcode pada instruksi: 27042008 #7

Instruksi Tipe-R (1) Ø 0: opcode (6 bit = 000000) Ø rs: register source

Instruksi Tipe-R (1) Ø 0: opcode (6 bit = 000000) Ø rs: register source (5 bit) = Read register 1 = nomor register yang digunakan untuk menaruh operand pertama Ø rt: register target (5 bit) = Read register 2 = nomor register yang digunakan untuk menaruh operand kedua Ø rd: register destination (5 bit) = Write register = nomor register yang digunakan untuk menaruh hasil dari ALU Ø shamt: tidak digunakan (5 bit = 00000) Ø funct: jenis fungsi yang akan dilakukan oleh ALU (6 bit) = and, or, add, substract, dan set on less than COA/Endro Ariyanto/ 27042008 #8

Instruksi Tipe-R (2) Ø Pada instruksi tipe R kode operasinya sama yaitu 000000 Ø

Instruksi Tipe-R (2) Ø Pada instruksi tipe R kode operasinya sama yaitu 000000 Ø Pembeda satu instruksi dengan instruksi yang lain adalah pada 6 bit bagian bawah (LSB) sebagai fungsi operasi aritmetik Ø Untuk melakukan operasi ALU sesuai dengan instruksi digunakan control ALU dengan input 6 bit terbawah dari instruksi COA/Endro Ariyanto/ 27042008 #9

Instruksi Tipe-R (3) COA/Endro Ariyanto/ 27042008 #10

Instruksi Tipe-R (3) COA/Endro Ariyanto/ 27042008 #10

Instruksi Tipe-R (4) Ø Terdapat beberapa komponen yang terlibat pada pengeksekusian tipe aritmatik: v

Instruksi Tipe-R (4) Ø Terdapat beberapa komponen yang terlibat pada pengeksekusian tipe aritmatik: v Register v ALU v Mux v ALU control Ø Keempat komponen tersebut beroperasi saling bebas 27042008 #11

Instruksi Tipe-R (5) Ø Contoh operasi R-Type: add $s 3, $s 1, $s 2

Instruksi Tipe-R (5) Ø Contoh operasi R-Type: add $s 3, $s 1, $s 2 1. Ambil instruksi dari memori instruksi pada alamat yang terdapat di dalam. PC 2. Unit kendali menentukan setting baris kendali 3. Baca isi dua register yaitu $s 1 (Read register 1) dan $s 2 (Read register 2) dari register 4. ALU mengoperasikan data yang dibaca dari register menggunakan kode fungsi (yaitu bit 5 – 0 atau field funct dari instruksi) untuk menghasilkan fungsi ALU 5. Hasil dari ALU dituliskan ke dalam register menggunakan bit 15 -11 dari instruksi untuk memilih register tujuan $s 3 (Write register) 6. Update isi PC dengan menambah 4 COA/Endro Ariyanto/ 27042008 #12

Instruksi Tipe-R (6) Ø Nilai tiga bit jalur kendali ALU Ø Input kendali ALU

Instruksi Tipe-R (6) Ø Nilai tiga bit jalur kendali ALU Ø Input kendali ALU berasal dari 6 bit terbawah instruksi Ø Kendali ALU dikendalikan oleh ALUOp 27042008 #13

Instruksi Tipe-R (7) Ø Kendali operasi pada ALU ditentukan oleh ALUOp dan field fungsi

Instruksi Tipe-R (7) Ø Kendali operasi pada ALU ditentukan oleh ALUOp dan field fungsi Ø Bagaimana bit kendali ALU diset tergantung dari bit kendali ALUOp dan fungsi yang berbeda untuk instruksi tipe-R 27042008 #14

Instruksi Tipe-R (8) Ø Tabel kebenaran untuk tiga bit kendali ALU Ø Pada saat

Instruksi Tipe-R (8) Ø Tabel kebenaran untuk tiga bit kendali ALU Ø Pada saat ALUOp bernilai 00 atau X 1 maka field fungsi tidak digunakan Ø Pada saat ALUOp bernilai 1 X field fungsi digunakan untuk menentukan operasi yang akan dilakukan oleh ALU 27042008 #15

Instruksi Tipe Load atau Store Ø 35 or 43: opcode (6 bit) v 35

Instruksi Tipe Load atau Store Ø 35 or 43: opcode (6 bit) v 35 = load = 100011 v 43 = store = 101011 Ø rs: register source (5 bit) v Operasi Load: rs = Read register 1 = nomor register yang menyimpan alamat dasar (base) dari data yang akan dibaca v Operasi Store: rs = Read register 1 = nomor register yang menyimpan alamat dasar (base) dari memori dimana data akan disimpan Ø rt: register target (5 bit) v Operasi Load: rt = Write register = nomor register yang akan digunakan untuk menampung data yang dibaca v Operasi Store: rt = Read register 2 = nomor register yang menampung data yang akan ditulis ke memori Ø address: offset alamat memori (16 bit) Ø Contoh instruksi: v Lw rt, address lw $t 1, offset($t 2) v Sw rt, address sw $t 1, offset($t 2) § Alamat fisik = alamat dasar (base) + offset = isi $t 2 + offset COA/Endro Ariyanto/ 27042008 #16

Instruksi Tipe Load (1) COA/Endro Ariyanto/ 27042008 #17

Instruksi Tipe Load (1) COA/Endro Ariyanto/ 27042008 #17

Instruksi Tipe Load (2) Contoh operasi tipe Load: lw $t 1, offset($t 2) 1.

Instruksi Tipe Load (2) Contoh operasi tipe Load: lw $t 1, offset($t 2) 1. Ambil instruksi dari memori instruksi pada alamat yang terdapat di dalam. PC 2. Baca nilai register $t 2 (Read register 1) dari register file. Nilai register $t 2 merupakan alamat dasar (base) dari data yang akan dibaca 3. Nilai offset diubah menjadi 32 bit oleh sign-extend 4. ALU menghitung alamat data yang akan dibaca dengan cara menjumlahkan nilai yang dibaca dari register file dan sign-extended 5. Hasil penjumlahan digunakan sebagai alamat untuk membaca data dari memori data 6. Data dari memori dituliskan ke dalam register file. Register tujuan ditunjukkan oleh bit instruksi 20 -16 atau $t 1 (Write register) 7. Update isi PC dengan menambah 4 COA/Endro Ariyanto/ 27042008 #18

Instruksi Tipe Store (1) COA/Endro Ariyanto/ 27042008 #19

Instruksi Tipe Store (1) COA/Endro Ariyanto/ 27042008 #19

Instruksi Tipe Store (2) Contoh operasi tipe Store: sw $t 1, offset($t 2) 1.

Instruksi Tipe Store (2) Contoh operasi tipe Store: sw $t 1, offset($t 2) 1. Ambil instruksi dari memori instruksi pada alamat yang terdapat di dalam. PC 2. Baca nilai register $t 2 (Read register 1) dari register file. Nilai register $t 2 merupakan alamat dasar (base) dari memori yang akan digunakan untuk menyimpan data 3. Nilai offset diubah menjadi 32 bit oleh sign-extend 4. ALU menjumlahkan nilai yang dibaca dari register file dan sign-extended 5. Hasil penjumlahan digunakan sebagai alamat memori yang akan digunakan untuk menaruh data 6. Data dari register (Data read 2) dituliskan ke dalam memori 7. Update isi PC dengan menambah 4 COA/Endro Ariyanto/ 27042008 #20

Instruksi Tipe Branch (1) Ø 4: opcode (6 bit = 000100) Ø rs: register

Instruksi Tipe Branch (1) Ø 4: opcode (6 bit = 000100) Ø rs: register source (5 bit) = Read register 1 = nomor register yang menyimpan operand pertama yang akan dibandingkan Ø rt: register target (5 bit) = Read register 2 = nomor register yang menyimpan operand kedua yang akan dibandingkan Ø address: offset alamat memori (16 bit) Ø Contoh instruksi: v Beq rs, rt, label beq $t 1, $t 2, offset COA/Endro Ariyanto/ 27042008 #21

Instruksi Tipe Branch (2) COA/Endro Ariyanto/ 27042008 #22

Instruksi Tipe Branch (2) COA/Endro Ariyanto/ 27042008 #22

Instruksi Tipe Branch (3) Contoh operasi tipe Branch: beq $t 1, $t 2, offset

Instruksi Tipe Branch (3) Contoh operasi tipe Branch: beq $t 1, $t 2, offset 1. 2. 3. 4. 5. 6. 7. Ambil instruksi dari memori instruksi pada alamat yang terdapat di dalam. PC Baca isi register $t 1 dan $t 2 (Read register 1 dan Read register 2) dari register file ALU melakukan pengurangan isi register $t 1 dengan isi register $t 2. Zero flag di-set 1 jika hasilnya nol Nilai offset diubah menjadi 32 bit oleh sign-extend Nilai sign-extended digeser ke kiri 2 bit kemudian ditambahkan dengan PC+4 untuk memperoleh alamat tujuan pencabangan Zero flag pada ALU akan menentukan terjadi pencabangan atau tidak (menentukan nilai PC selanjutnya) Update isi PC dengan menambah 4 Ø Jika terjadi pencabangan: PC = Shift_Left_2_bit (sign-extended) + (PC+ 4) Jika tidak terjadi pencabangan: PC = PC+ 4 COA/Endro Ariyanto/ 27042008 #23

Fungsi Kendali Ø Fungsi kendali untuk implementasi satu siklus ditunjukkan pada tabel kebenaran di

Fungsi Kendali Ø Fungsi kendali untuk implementasi satu siklus ditunjukkan pada tabel kebenaran di bawah ini =0 = 35 = 43 =4 27042008 #24

Instruksi Jump (1) 2: opcode (6 bit = 000010) address: alamat untuk jump (26

Instruksi Jump (1) 2: opcode (6 bit = 000010) address: alamat untuk jump (26 bit) = alamat immediate Instruksi Jump mirip dengan branch, tetapi tidak ada syarat Diperlukan tambahan sebuah multiplexer dengan sinyal kendali jump dan sebuah shift left 2 Ø Alamat jump sepanjang 32 bit merupakan konkat/gabungan dari: Ø Ø v v PC+4 (31 -28): 4 bit Immediate address jump: 26 bit Bit 00: 2 bit Concat (shift_left_2(instruction(25 -0)) , (PC+4 (31 -28))) Ø Contoh instruksi: v j target j EXIT atau j 2500 # go to offset 10000 27042008 #25

Instruksi Jump (2) COA/Endro Ariyanto/ 27042008 #26

Instruksi Jump (2) COA/Endro Ariyanto/ 27042008 #26

Instruksi Jump (3) Contoh operasi instruksi Jump: j 2500 1. Geser kiri sebanyak 2

Instruksi Jump (3) Contoh operasi instruksi Jump: j 2500 1. Geser kiri sebanyak 2 bit (dikalikan dengan 4) pada deretan bit alamat yang dituju sehingga menjadi 28 bit. 2500 (desimal) = 1001 1100 0100 menjadi 10 0111 0000 = 10. 000 (desimal) 2. Ambil 4 bit dari kiri hasil penjumlahan PC dengan 4 3. Gabungkan (concate) bit-bit pada nomor 1 dengan nomor 2 di atas 4. Update nilai PC dengan hasil penggabungan bit di atas COA/Endro Ariyanto/ 27042008 #27

Referensi Ø Hennessy, John L. dan Patterson, David A. 1998, “Computer Organization and Design:

Referensi Ø Hennessy, John L. dan Patterson, David A. 1998, “Computer Organization and Design: The Hardware/Software Interface”. 2 nd edition. Morgan Kaufmann publisher Inc. San Fransisco. USA Ø http: //chortle. ccsu. edu/Assembly. Tutorial/ Chapter-01/ 27042008 #28