Instruksi Mikroprosesor Bahkan mikroprosesor sangat sederhana ditunjukkan pada contoh sebelumnya akan memiliki cukup besar set instruksi yang dapat melakukan. Kumpulan instruksi diimplementasikan sebagai pola bit, yang masing-masing memiliki arti yang berbeda ketika dimasukkan ke dalam instruksi register. Manusia tidak terlalu baik mengingat pola bit, jadi satu set kata pendek yang ditetapkan untuk mewakili pola bit yang berbeda. Koleksi kata-kata ini disebut bahasa assembly prosesor. Assembler dapat menerjemahkan kata-kata ke dalam pola bit sangat mudah, dan kemudian output assembler yang ditempatkan dalam memori untuk mikroprosesor untuk mengeksekusi. Here's the set instruksi bahasa assembly bahwa perancang mungkin menciptakan untuk mikroprosesor sederhana pada contoh kita:
* LOADA mem - Muat mendaftar A dari alamat memori
* LOADB mem - Muat mendaftarkan B dari alamat memori
* CONB con - Muat sebuah nilai konstan ke register B
* SAVEB mem - Simpan register B ke alamat memori
* SAVEC mem - Simpan register C ke alamat memori
* ADD - Tambahkan A dan B dan simpan hasilnya di C
* SUB - Kurangi A dan B dan simpan hasilnya di C
* Mul - Kalikan A dan B dan simpan hasilnya di C
* DIV - Bagi A dan B dan simpan hasilnya di C
* COM - Bandingkan A dan B dan simpan hasilnya dalam pengujian
* JUMP addr - Langsung ke alamat
* JEQ addr - Langsung, jika sama, untuk alamat
* JNEQ addr - Langsung, jika tidak sama, untuk alamat
* JG addr - Langsung, jika lebih besar dari, untuk alamat
* JGE addr - Langsung, jika lebih besar dari atau sama, untuk menangani
* JL addr - Langsung, jika kurang dari, untuk alamat
* JLE addr - Langsung, jika kurang dari atau sama, untuk menangani
* STOP - Stop eksekusi
Jika Anda telah membaca Cara C Programming Works, maka Anda tahu bahwa sederhana ini potongan kode C akan menghitung faktorial dari 5 (di mana faktorial 5 = 5! = 5 * 4 * 3 * 2 * 1 = 120):a = 1; f = 1; while (a <= 5) ( f = f * a; a = a + 1; ) Pada akhir pelaksanaan program, variabel f berisi faktorial dari 5. Assembly Language AC compiler menerjemahkan kode C ini ke dalam bahasa assembly. Dengan asumsi bahwa alamat RAM 128 dimulai di dalam prosesor ini, dan ROM (yang berisi program bahasa assembly) dimulai pada alamat 0, kemudian untuk kita mikroprosesor sederhana bahasa perakitan akan terlihat seperti ini: / / Asumsikan alamat yang ada di 128 / / Asumsikan F adalah pada alamat 129 0 CONB 1 / / a = 1; 1 SAVEB 128 2 CONB 1 / / f = 1; 3 SAVEB 129 4 LOADA 128 / / if a> 5, melompat ke 17 5 CONB 5 6 COM 7 JG 17 8 LOADA 129 / / f = f * a; 9 LOADB 128 10 mul 11 SAVEC 129 12 LOADA 128 / / a = a +1; 13 CONB 1 14 ADD 15 SAVEC 128 16 JUMP 4 / / loop kembali ke jika 17 STOP ROM Jadi sekarang pertanyaannya adalah, "Bagaimana semua petunjuk ini terlihat dalam ROM?" Masing-masing instruksi bahasa assembly harus diwakili oleh bilangan biner. Demi kesederhanaan, mari kita asumsikan masing-masing instruksi bahasa assembly diberikan nomor unik, seperti ini:
* LOADA - 1
* LOADB - 2
* CONB - 3
* SAVEB - 4
* SAVEC mem - 5
* ADD - 6
* SUB - 7
* Mul - 8
* DIV - 9
* COM - 10
* JUMP addr - 11
* JEQ addr - 12
* JNEQ addr - 13
* JG addr - 14
* JGE addr - 15
* JL addr - 16
* JLE addr - 17
* STOP - 18
Angka-angka tersebut dikenal sebagai opcodes. Dalam ROM, program kecil kami akan terlihat seperti ini: / / Asumsikan alamat yang ada di 128 / / Asumsikan F adalah pada alamat 129 Addr opcode / nilai 0 3 / / CONB 1 1 1 2 4 / / SAVEB 128 3 128 4 3 / / CONB 1 5 1 6 4 / / SAVEB 129 7 129 8 1 / / LOADA 128 9 128 10 3 / / CONB 5 11 5 12 10 / / COM 13 14 / / JG 17 14 31 15 1 / / LOADA 129 16 129 17 2 / / LOADB 128 18 128 19 8 / / mul 20 5 / / SAVEC 129 21 129 22 1 / / LOADA 128 23 128 24 3 / / CONB 1 25 1 26 6 / / ADD 27 5 / / SAVEC 128 28 128 29 11 / / JUMP 4 30 8 31 18 / / STOP Anda dapat melihat bahwa tujuh baris kode C menjadi 18 baris bahasa assembly, dan yang menjadi 32 bytes dalam ROM. Decoding Decoder instruksi kebutuhan untuk mengubah masing-masing opcodes menjadi serangkaian sinyal yang mendorong berbagai komponen di dalam mikroprosesor. Mari kita ambil instruksi ADD sebagai contoh dan melihat apa yang perlu dilakukan: 1. Selama siklus jam pertama, kita perlu me-load instruksi. Oleh karena itu perlu dekoder instruksi:
* Mengaktifkan buffer tri-negara untuk program counter
* Mengaktifkan baris RD
* Mengaktifkan data dalam buffer tri-state
* Gerendel instruksi ke register instruksi
2. Selama siklus jam kedua, maka instruksi ADD diterjemahkan. Yang perlu dilakukan sangat sedikit:
* Mengatur pengoperasian ALU penambahan
* Latch output dari ALU ke register C
0 comments:
Post a Comment