Daftar Isi:

Kode dan Uji Komputer dalam Bahasa Mesin: 6 Langkah
Kode dan Uji Komputer dalam Bahasa Mesin: 6 Langkah

Video: Kode dan Uji Komputer dalam Bahasa Mesin: 6 Langkah

Video: Kode dan Uji Komputer dalam Bahasa Mesin: 6 Langkah
Video: Tips Memilih Bahasa Pemrograman untuk Pemula 2024, November
Anonim
Image
Image

Dalam Instruksi ini, saya akan menunjukkan kepada Anda cara membuat kode dan menguji program komputer dalam bahasa mesin. Bahasa mesin adalah bahasa asli komputer. Karena terdiri dari string 1s dan 0s, tidak mudah dipahami oleh manusia. Untuk mengatasinya, kami membuat kode program terlebih dahulu dalam bahasa tingkat tinggi seperti C++ atau Java kemudian menggunakan program komputer khusus untuk menerjemahkannya ke dalam komputer 1s dan 0s yang dimengerti. Belajar coding dalam bahasa tingkat tinggi tentu bukan hal yang sulit, tetapi pengenalan singkat tentang bahasa mesin dapat memberikan wawasan berharga tentang cara kerja komputer dan meningkatkan apresiasi terhadap teknologi yang sangat penting ini.

Untuk membuat kode dan menguji program bahasa mesin, kita memerlukan akses ke komputer tanpa embel-embel yang bahasa mesinnya mudah dipahami. Komputer pribadi terlalu rumit untuk dipertimbangkan. Solusinya adalah dengan menggunakan Logisim, sebuah simulator logika, yang berjalan di komputer pribadi. Dengan Logisim kita dapat mensimulasikan komputer yang sesuai dengan kebutuhan kita. Video di atas memberi Anda gambaran tentang apa yang dapat kami capai dengan Logisim.

Untuk desain komputer, saya mengadaptasi salah satu dari e-book Kindle saya, Build Your Own Computer - From Scratch. Saya mulai dengan komputer BYOC yang dijelaskan di sana dan memangkasnya menjadi berbagai BYOC-I dasar (I untuk Instructable) yang akan kita gunakan dalam Instructable ini.

Bahasa mesin BYOC-I sederhana dan mudah dimengerti. Anda tidak memerlukan pengetahuan khusus tentang komputer atau pemrograman. Yang dibutuhkan hanyalah pikiran yang ingin tahu dan keinginan untuk belajar

Bacaan lebih lanjut

Anda mungkin bertanya-tanya mengapa kami menggunakan "mesin" untuk menggambarkan komputer ketika itu bukan perangkat mekanis. Alasannya bersejarah; perangkat komputasi pertama adalah mekanis yang terdiri dari roda gigi dan roda. Lirik Allan Sherman, "Itu semua roda gigi akan klik-klak …" hanya dari satu atau dua abad. Baca lebih lanjut tentang komputasi awal di sini.

Langkah 1: Daftar Bagian

Hirarki dan Kode Bahasa Mesin
Hirarki dan Kode Bahasa Mesin

Daftar bagiannya pendek. Hanya dua item ini yang diperlukan, keduanya dapat diunduh gratis:

  1. "Logisim-win-2.7.1.exe" - Logisim adalah simulator logika yang populer dan mudah digunakan. Unduh file executable Logisim dari sini lalu buat jalan pintas di tempat yang nyaman seperti desktop Anda. Klik dua kali ikon Logisim untuk meluncurkannya. Catatan: Logisim menggunakan Java Runtime Package yang terletak di sini. Anda mungkin diminta untuk mengunduhnya.
  2. BYOC-I-Full.cir" - Unduh file sirkuit Logisim di bawah ini.

Luncurkan Logisim lalu klik "File-Open" dan muat file BYOC-I-Full.cir. Gambar di atas menunjukkan lingkungan kerja Logisim. BYOC-I diwakili oleh blok subsirkuit. Terhubung secara eksternal adalah dua input, Reset dan Run, dan tampilan heksadesimal untuk register dan memori program BYOC-I.

Memori program BYOC-I telah dimuat sebelumnya dengan program sederhana yang menghitung dari 1 hingga 5 dalam register A. Untuk menjalankan (Menjalankan) program, ikuti langkah-langkah berikut.

Langkah 1 - Klik pada Alat Poke. Kursor harus berubah menjadi "jari" yang menusuk. Langkah 2 - Poke input Reset dua kali, sekali mengubahnya menjadi "1" dan sekali lagi untuk mengubahnya kembali ke "0". Ini me-reset BYOC-I untuk memulai program di alamat 0. Langkah 3 - Poke input Run sekali untuk mengubahnya menjadi "1". Register A harus menunjukkan hitungan yang berubah dari 1 ke 5 kemudian berulang. Langkah 4 - Jika program tidak dijalankan, tekan control-K dan program harus dimulai.

Jika Anda ingin menjelajahi kemampuan Logisim, klik tautan Bantuan di Bilah Menu. Dari sana, Anda dapat menjelajahi "Tutorial", "Panduan Pengguna", dan "Referensi Perpustakaan" Logisim. Sebuah pengenalan video yang sangat baik ditemukan di sini.

Langkah 2: Hirarki dan Kode Bahasa Mesin

Hirarki dan Kode Bahasa Mesin
Hirarki dan Kode Bahasa Mesin

Komputer BYOC-I melakukan tugas berdasarkan program yang ditulis dalam bahasa mesin. Program BYOC-I, pada gilirannya, terdiri dari instruksi yang dieksekusi dalam urutan yang terdefinisi dengan baik. Setiap instruksi dibuat dari kode panjang tetap yang mewakili berbagai komponen operasional BYOC-I. Terakhir, kode-kode ini terdiri dari string 1 dan 0 yang merupakan bahasa mesin yang dieksekusi oleh BYOC-I.

Sebagai penjelasan, kita akan mulai dengan kode dan melanjutkan ke tingkat program. Kemudian kita akan membuat kode program sederhana, memuatnya ke dalam memori BYOC-I, dan menjalankannya.

Kode terdiri dari sejumlah biner (1 dan 0) digit atau bit, singkatnya. Misalnya, tabel di bawah ini menunjukkan semua kode yang mungkin (16 seluruhnya) untuk kode dengan lebar 4 bit. Ditampilkan di samping kode adalah heksadesimal (basis 16) dan setara desimal. Heksadesimal digunakan dalam mengacu pada nilai biner karena lebih kompak daripada biner dan lebih mudah dikonversi dari biner daripada desimal. Awalan "0x" memberi tahu Anda bahwa angka yang mengikuti adalah heksadesimal atau singkatnya "hex".

Biner - Heksadesimal - Desimal0000 0x0000 00001 0x0001 10010 0x0002 20011 0x0003 30100 0x0004 40101 0x0005 50111 0x0007 71000 0x0008 81001 0x0009 91010 0x000A 101011 0x000B 111100 0x000C 121101 0x000D 131110 0x000D 131110

Lebar kode menentukan berapa banyak item yang dapat diwakili. Sebagaimana dicatat, kode lebar 4-bit di atas dapat mewakili hingga 16 item (0 hingga 15); yaitu, 2 kali 2 diambil empat kali atau pangkat 2 ke 4 sama dengan 16. Secara umum, jumlah item yang dapat diwakili adalah 2 pangkat ke-n. Berikut adalah daftar singkat kapasitas kode n-bit.

n - Jumlah Item1 22 43 84 165 326 647 1288 256

Lebar kode komputer BYOC-I dipilih untuk mengakomodasi jumlah item yang akan diwakili oleh kode. Misalnya, ada empat Jenis Instruksi, jadi kode lebar 2-bit cocok. Berikut adalah kode BYOC-I dengan penjelasan singkat masing-masing.

Kode Jenis Instruksi (tt) Ada empat jenis instruksi: (1) MVI - Memindahkan nilai konstanta 8-bit langsung ke dalam register memori. Register memori adalah perangkat yang menyimpan data yang akan digunakan untuk perhitungan, (2) MOV - Memindahkan data dari satu register ke register lain, (3) RRC - Melakukan perhitungan register-to-register, dan (4) JMP - Jump ke instruksi yang berbeda alih-alih melanjutkan pada instruksi berikutnya. Kode Jenis Instruksi BYOC-I yang diadopsi adalah sebagai berikut:

00 MVI01 MOV10 RRC11 JMP

Kode Register (dd dan ss) BYOC-I memiliki empat register 8-bit yang mampu menyimpan nilai dari 0 hingga 255. Kode 2-bit cukup untuk menunjuk empat register:

00 F register01 E register10 D register11 A register

Kode Perhitungan (ccc) BYOC-I mendukung empat operasi aritmatika/logika. Untuk memungkinkan perluasan di masa mendatang ke delapan perhitungan, kode 3-bit digunakan:

000 ADD, tambahkan dua nilai 8-bit di register yang ditunjuk dan simpan hasilnya di salah satu register 001 SUB, kurangi dua nilai 8-bit di register yang ditunjuk dan simpan hasilnya di salah satu register 010 - 011 Dicadangkan untuk penggunaan mendatang100 DAN, secara logis DAN dua nilai 8-bit dalam register yang ditunjuk dan menyimpan hasilnya di salah satu register101 ATAU, secara logis ATAU dua nilai 8-bit dalam register yang ditunjuk dan menyimpan hasilnya di salah satu register110 hingga 111, Dicadangkan untuk penggunaan di masa mendatang

Kode Jump (j) Kode 1-bit yang menunjukkan apakah lompatan tidak bersyarat (j = 1) atau dikondisikan pada hasil perhitungan yang tidak nol (j = 0).

Data/Kode Alamat (v…v)/(a…a) Data 8-bit dapat dimasukkan dalam instruksi tertentu yang mewakili nilai dari 00000000 hingga 11111111 atau 0 hingga 255 desimal. Data ini memiliki lebar 8-bit untuk penyimpanan dalam register 8-bit BYOC-I. Dengan aritmatika desimal, kami tidak menunjukkan angka nol di depan. Dengan aritmatika komputer, kami menunjukkan angka nol di depan tetapi tidak mempengaruhi nilainya. 00000101 secara numerik sama dengan 101 atau 5 desimal.

Referensi yang Disarankan

Notasi Biner - https://learn.sparkfun.com/tutorials/binaryHexadecimal Notation -

Bacaan lebih lanjut

Gagasan menggunakan kode untuk mendorong proses sudah ada sejak lama. Salah satu contoh yang menarik adalah Jacquard Loom. Alat tenun otomatis dikendalikan oleh rantai kartu kayu di mana lubang dibor mewakili kode untuk benang berwarna berbeda untuk ditenun. Saya melihat yang pertama di Skotlandia di mana ia digunakan untuk membuat tartan warna-warni. Baca lebih lanjut tentang Jacquard Looms di sini.

Langkah 3: Anatomi Instruksi BYOC-I

Anatomi Instruksi BYOC-I
Anatomi Instruksi BYOC-I

Mengingat kode BYOC-I, kami naik ke tingkat berikutnya, instruksi. Untuk membuat instruksi untuk BYOC-I, kami menempatkan kode bersama-sama dalam urutan tertentu dan di lokasi tertentu dalam instruksi. Tidak semua kode muncul di semua instruksi tetapi, ketika mereka melakukannya, mereka menempati lokasi tertentu.

Jenis instruksi MVI membutuhkan bit paling banyak, 12 semuanya. Dengan membuat kata instruksi sepanjang 12 bit, kami mengakomodasi semua instruksi. Bit yang tidak digunakan (disebut "tidak peduli") diberi nilai 0. Berikut adalah Set Instruksi BYOC-I.

  1. Move Immediate (MVI) - 00 dd vvvvvvvvFungsi: Memindahkan nilai data 8-bit V = vvvvvvvv ke register tujuan dd. Setelah dieksekusi, register dd akan memiliki nilai vvvvvvvv. Singkatan: MVI R, V di mana R adalah A, D, E, atau F. Contoh: 00 10 00000101 - MVI D, 5 - Pindahkan nilai 5 ke register D.
  2. Pindahkan Register to Register (MOV) - 01 dd ss 000000Fungsi: Memindahkan data dari register sumber ss ke register tujuan dd. Setelah dieksekusi, kedua register memiliki nilai yang sama dengan register sumber. Singkatan: MOV Rd, Rs dimana Rd adalah register tujuan A, D, E, atau F dan Rs adalah register sumber A, D, E, atau F. Contoh: 01 11 01 000000 - MOV A, E - Pindahkan nilainya di register E ke register A.
  3. Register to Register Calculation (RRC) - 10 dd ss ccc 000Fungsi: Melakukan perhitungan yang ditentukan ccc menggunakan register sumber ss dan register tujuan dd kemudian menyimpan hasilnya di register tujuan. Singkatan: ADD Rd, Rs (ccc=000 Rd + Rs disimpan di Jl); SUB Rd, Rs (ccc=001 Rd - Rs disimpan di Rd); AND Rd, Rs (ccc=100 Rd AND Rs disimpan di Rd); OR Rd, Rs (ccc=101 Rd OR Rs disimpan di Rd). Contoh: 10 00 11 001 000 - SUB F, A - Kurangi nilai dalam register A dari register F dengan hasil di register F.
  4. Lompat ke Instruksi Berbeda (JMP) - 11 j 0 aaaaaaaaFungsi: Mengubah eksekusi ke instruksi lain yang terletak di alamat aaaa aaaa(a) Tanpa syarat (j=1) -11 1 0 aaaaaaaa Singkatan: JMP L di mana L adalah alamat aaaa aaaaContoh: 11 1 0 00001000 - JMP 8 - Ubah eksekusi ke alamat 8.(b) Conditionally (j=0) ketika perhitungan sebelumnya menghasilkan hasil yang tidak nol - 11 0 0 aaaaaaaa Singkatan: JNZ L dimana L adalah alamat aaaa aaaa. Contoh: 11 0 0 00000100 JNZ 4 Jika perhitungan terakhir menghasilkan nilai bukan nol, ubah eksekusi ke alamat 4.

Bit kata instruksi diberi nomor dari kiri (most significant bit MSB) ke kanan (least significant bit LSB) dari 11 sampai 0. Urutan tetap dan lokasi kode adalah sebagai berikut:

Bit - Kode11-10 Tipe Instruksi9-8 Register Tujuan7-6 Register Sumber5-3 Perhitungan: 000 - tambah; 001 - kurangi; 100 - logis DAN; 101 - logika OR7-0 Nilai konstan v…v dan a…a (0 hingga 255)

Set instruksi diringkas dalam gambar di atas. Perhatikan tampilan kode yang terstruktur dan teratur di setiap instruksi. Hasilnya adalah desain BYOC-I yang lebih sederhana dan membuat instruksi lebih mudah dipahami manusia.

Langkah 4: Mengkodekan Instruksi Komputer

Mengkodekan Instruksi Komputer
Mengkodekan Instruksi Komputer

Sebelum pindah ke tingkat program, mari kita buat beberapa contoh instruksi menggunakan Set Instruksi BYOC-I di atas.

1. Pindahkan nilai 1 ke register A. Register BYOC-I dapat menyimpan nilai dari 0 hingga 255. Dalam hal ini, register A akan memiliki nilai 1 (00000001 biner) setelah eksekusi instruksi.

Singkatan: MVI A, 1Kode Diperlukan: Ketik MVI - 00; Daftar Tujuan A - 11; Nilai - 00000001Kata Instruksi: 00 11 00000001

2. Pindahkan isi register A ke register D. Setelah dieksekusi, kedua register akan memiliki nilai aslinya di register A.

Singkatan: MOV D, A (Ingat, tujuan adalah pertama dan sumber kedua dalam daftar)Kode yang Diperlukan: Ketik MOV - 01; Daftar Tujuan D - 10; Sumber Daftar A - 11Kata Instruksi: 01 10 11 000000

3. Tambahkan isi register D ke register A dan simpan di register A. Setelah dieksekusi, nilai register A akan menjadi jumlah nilai asli register A dan register D.

Singkatan: ADD A, D (Hasil disimpan di register tujuan) Kode yang Diperlukan: Ketik RRC - 10; Daftar Tujuan A - 11; Sumber Daftar D - 10; Perhitungan Tambah - 000Kata Instruksi: 10 11 10 000 000 (ccc adalah 000 pertama - tambah)

4. Langsung pada not nol ke alamat 3. Jika hasil perhitungan terakhir tidak nol, eksekusi akan berubah ke instruksi pada alamat yang diberikan. Jika nol, eksekusi dilanjutkan pada instruksi berikut.

Singkatan: JNZ 3Kode yang Diperlukan: Ketik JMP - 11; Jenis Lompat - 0; Alamat - 00000003Kata Instruksi: 11 0 0 00000003 (Jenis lompat adalah yang pertama 0)

5. Lompat tanpa syarat ke alamat 0. Setelah eksekusi, eksekusi berubah menjadi instruksi pada alamat yang diberikan.

Singkatan: JMP 0Kode Diperlukan: Ketik JMP - 11; Jenis Lompat - 1; Alamat - 00000000Kata Instruksi; 11 1 0 00000000

Meskipun pengkodean mesin agak membosankan, Anda dapat melihat bahwa itu tidak terlalu sulit. Jika Anda benar-benar membuat pengkodean mesin, Anda akan menggunakan program komputer yang disebut assembler untuk menerjemahkan dari singkatan (yang disebut kode perakitan) ke kode mesin.

Langkah 5: Anatomi Program Komputer

Anatomi Program Komputer
Anatomi Program Komputer

Program komputer adalah daftar instruksi yang dijalankan komputer mulai dari awal daftar terus ke bawah daftar sampai akhir. Instruksi seperti JNZ dan JMP dapat mengubah instruksi mana yang dieksekusi selanjutnya. Setiap instruksi dalam daftar menempati satu alamat dalam memori komputer mulai dari 0. Memori BYOC-I dapat menampung daftar 256 instruksi, lebih dari cukup untuk tujuan kita.

Program komputer dirancang untuk melakukan tugas tertentu. Untuk program kami, kami akan memilih tugas sederhana, menghitung dari 1 hingga 5. Jelas, tidak ada instruksi "hitungan", jadi langkah pertama adalah memecah tugas menjadi langkah-langkah yang dapat ditangani oleh BYOC-I dengan sangat set instruksi terbatas.

Langkah 1 Pindahkan 1 ke register AStep 2 Pindahkan register A ke register DStep 3 Tambahkan register D ke register A dan simpan hasilnya di register AStep 4 Pindahkan 5 ke register EStep 5 Kurangi register A dari register E dan simpan hasilnya di register EStep 6 Jika hasil pengurangan tidak nol, kembali ke Langkah 4 dan lanjutkan menghitung Langkah 7 Jika hasil pengurangan nol, kembali dan mulai dari awal

Langkah selanjutnya adalah menerjemahkan langkah-langkah ini ke dalam instruksi BYOC-I. Program BYOC-I dimulai dari alamat 0 dan nomor secara berurutan. Alamat target lompat ditambahkan terakhir setelah semua instruksi tersedia..

Alamat:Instruksi - Singkatan;Deskripsi0:00 11 00000001 - MVI A, 1;Pindahkan 1 ke register A1:01 10 11 000000 - MOV D, A;Pindahkan register A ke register D2:10 11 10 000 000 - ADD A, D;Tambahkan register D ke register A dan simpan hasilnya di register A3:00 01 00 00000101 - MVI E, 5;Pindahkan 5 register E4:10 01 11 001 000 - SUB E, A;Kurangi register A dari register E dan simpan hasil di register E5:11 0 0 00000010 - JNZ 2;Jika hasil pengurangan tidak nol, kembali ke alamat 3 dan lanjutkan menghitung6:11 1 0 00000000 - JMP 0;Jika hasil pengurangan nol, kembali dan mulai dari awal

Sebelum mentransfer program ke memori, kode instruksi biner harus diubah ke heksadesimal untuk digunakan dengan Logisim Hex Editor. Pertama, bagi instruksi menjadi tiga kelompok masing-masing 4 bit. Kemudian terjemahkan grup ke dalam heksadesimal menggunakan tabel di Langkah 2. Hanya tiga digit heksadesimal terakhir (yang dicetak tebal di bawah) yang akan digunakan.

Alamat - Biner Instruksi - Pemisahan Biner Instruksi - Instruksi (Hex)0 001100000001 0011 0000 0001 - 0x03011 011011000000 0110 1100 0000 - 0x06C02 101110000000 1011 1000 0000 - 0x0B803 000100000101 0001 0000 0101 - 0x01054 100111001000 1001100 00000 11000001001 1100 1000 - 000001001 - 100 00000 111000000010 1110 0000 0000 - 0x0E00

Saatnya untuk mentransfer program ke memori BYOC-I untuk pengujian.

Langkah 6: Mentransfer Program ke Memori dan Pengujian

Mentransfer Program ke Memori dan Pengujian
Mentransfer Program ke Memori dan Pengujian
Mentransfer Program ke Memori dan Pengujian
Mentransfer Program ke Memori dan Pengujian

Melihat sirkuit "utama" Logisim, blok BYOC-I yang ditampilkan adalah simbol untuk sirkuit komputer yang sebenarnya berlabel "BYOC-I" di Explorer Pane. Untuk memasukkan program ke dalam memori BYOC-I:

  1. Klik kanan blok BYOC-I (disebut "subcircuit") dan pilih (arahkan kursor ke atas dan klik kiri) "View BYOC-I".
  2. Sirkuit BYOC-I akan muncul di Area Kerja. Klik kanan pada simbol "Program Memory" dan pilih "Edit Contents..".
  3. Menggunakan Logisim Hex Editor, masukkan kode heksadesimal (hanya dicetak tebal) seperti yang ditunjukkan di atas.

Anda sekarang siap untuk menjalankan program. Kembali ke sirkuit utama dengan mengklik dua kali "BYOC-I" di Explorer Pane. Input Jalankan dan Atur Ulang harus "0" untuk memulai. Menggunakan Poke Tool, pertama ubah Reset ke "1" lalu kembali ke "0". Ini membuat alamat awal 0x0000 dan mempersiapkan sirkuit BYOC-I untuk dieksekusi. Sekarang masukkan input Run ke "1" dan program akan dijalankan. (Catatan: Anda harus mengetuk Control-K sekali untuk memulai jam Logisim. Ini adalah fitur yang memungkinkan Anda menghentikan jam Logisim dan menelusuri program dengan mengetuk Control-T berulang kali. Coba kapan-kapan!)

Jam Logisim dapat diatur untuk berbagai frekuensi. Saat diunduh, ini adalah 8 Hz (8 siklus per detik). Cara komputer BYOC-I dirancang, setiap instruksi membutuhkan empat siklus clock untuk diselesaikan. Jadi, untuk menghitung kecepatan BYOC-I, bagi frekuensi clock dengan 4. Pada 8 Hz, kecepatannya adalah 2 instruksi per detik. Anda dapat mengubah jam dengan mengklik "Simulasikan" pada bilah alat dan pilih "Frekuensi Centang". Rentang yang mungkin adalah 0,25 Hz hingga 4100 Hz. Kecepatan lambat pada 8 Hz dipilih sehingga Anda dapat melihat hitungan di register A.

Kecepatan maksimum simulasi BYOC-I (~1000 instruksi per detik) sangat lambat dibandingkan dengan komputer modern. Versi perangkat keras komputer BYOC yang dijelaskan dalam buku saya mengeksekusi lebih dari 12 juta instruksi per detik!

Saya harap Instructable ini telah mengungkap pemrograman bahasa mesin dan memberi Anda wawasan tentang cara kerja komputer pada tingkat paling dasar. Untuk mendapatkan pemahaman Anda, coba kodekan dua program di bawah ini.

  1. Tulis program yang dimulai dari 5 dan menghitung mundur hingga 0. (ANS. Count5to0.txt di bawah)
  2. Mulai dari 2, hitung dengan 3 sampai jumlahnya melebihi 7. Anda bisa melakukan sedikit aritmatika mental, periksa 8 untuk mengetahui bahwa itu akan mendarat di sana kemudian restart. Tulis program Anda dengan cara yang lebih umum yang benar-benar menguji apakah hitungan "melebihi" angka tertentu. Petunjuk: Jelajahi apa yang terjadi ketika pengurangan menghasilkan nilai negatif, misalnya 8 - 9= -1. Kemudian bereksperimen dengan logika AND untuk menguji apakah MSB dalam angka 8-bit adalah "1". (ANS. ExceedsCount.txt)

Dapatkah Anda memikirkan masalah lain yang menantang untuk komputer BYOC-I? Mengingat keterbatasannya, apa lagi yang bisa dilakukannya? Bagikan pengalaman Anda dengan saya di [email protected]. Jika Anda tertarik dengan pengkodean mikroprosesor, kunjungi situs web saya www.whippleway.com. Di sana saya membawa pengkodean mesin ke prosesor modern seperti seri ATMEL Mega yang digunakan di Arduino.

Direkomendasikan: