Bagaimana Cara Komputer Mengeksekusi Kode Dan Memahami Kode Tersebut?

Bagaimana komputer Anda tahu cara menjalankan program? Bagaimana cara menerjemahkan kode dari aplikasi menjadi tindakan? Berikut cara kerjanya.

Sudah menjadi rahasia umum bahwa kode ditulis oleh pengembang dan bagaimana manusia berkomunikasi dengan komputer. Namun, pernahkah Anda berpikir tentang bagaimana perangkat lunak seperti kode berinteraksi dengan perangkat keras komputer seperti CPU (Central Processing Unit)? Jika jawabannya ya, maka Anda datang ke tempat yang tepat.

Bacaan Lainnya

Untuk memahami bagaimana kode dieksekusi di komputer, Anda harus memahami apa yang membuat komputer berdetak dan bagaimana kode itu dapat dimanipulasi. Pertama, mari kita bicara tentang ide dasar perangkat keras komputer sebelum melanjutkan ke sisi perangkat lunak.

Apa itu Biner?

Biner adalah sistem bilangan basis-2 yang digunakan prosesor dan memori untuk mengeksekusi kode. Bilangan biner hanya bisa 1 atau 0, maka namanya. Jika Anda mengelompokkan delapan angka biner (00000000), Anda mendapatkan apa yang dikenal sebagai byte, sedangkan satu angka biner (0) disebut bit.

Bagaimana Switch Sederhana Menghasilkan Sinyal Biner

Segala sesuatu yang logis tentang komputasi dengan mesin dimulai dengan sakelar sederhana. Sakelar sederhana memiliki dua konduktor dan mekanisme penghubung dan pemutus. Menghubungkan kedua konduktor memungkinkan arus mengalir, yang menghasilkan sinyal ke ujung konduktor lainnya. Di sisi lain, jika konduktor terputus, arus tidak akan mengalir, artinya tidak ada sinyal yang dihasilkan.

Kredit Gambar: 991joseph/ Wikimedia Commons

Karena sakelar hanya dapat hidup atau mati pada suatu instans, sakelar tersebut menyediakan mekanisme yang ideal untuk membuat sinyal tinggi dan rendah yang digunakan untuk menghasilkan sinyal gelombang persegi.

Saat Anda menjentikkan sakelar, itu menghasilkan sinyal atau satu bit data. Sebuah foto biasa yang diambil dari smartphone akan menjadi sekitar lima Megabyte data, sama dengan 40.000.000 bit. Itu berarti Anda harus menjentikkan sakelar puluhan juta kali hanya untuk menghasilkan data yang cukup untuk satu foto yang diambil dari ponsel cerdas Anda.

Dengan keterbatasan mekanis sakelar, para insinyur membutuhkan sesuatu yang tidak memiliki bagian yang bergerak dan memberikan kecepatan perpindahan yang lebih cepat.

Transistor Digunakan sebagai Saklar

Kredit Gambar Transistor: Evan-Amos/ Wikimedia dan Kredit Gambar Gelombang Persegi: Sponk/ Wikimedia

Berkat penemuan doping (memanipulasi konduktivitas listrik semikonduktor seperti silikon), para insinyur dapat membuat sakelar yang dikendalikan secara elektrik yang dikenal sebagai transistor. Penemuan baru ini memungkinkan kecepatan pemrosesan yang lebih cepat yang membutuhkan sedikit tegangan untuk daya, yang pada akhirnya memungkinkan untuk menumpuk lebih dari satu miliar transistor ini pada satu CPU modern.

Apa itu CPU Architecture?

Transistor-transistor tersebut kemudian secara cerdik diatur untuk membuat gerbang logika, half-adder, adder, flip flop, multiplexer, register, dan berbagai komponen yang membuat CPU berfungsi. Cara komponen-komponen ini ditumpuk menentukan apa yang dikenal sebagai arsitektur CPU.

Arsitektur CPU juga menentukan ISA (Instruction Set Architecture) prosesor. ISA menyimpan daftar instruksi bawaan yang dapat dieksekusi oleh CPU secara asli. Instruksi ini kemudian secara berurutan dicampur bersama melalui bahasa pemrograman untuk membuat apa yang dikenal sebagai program. Biasanya, ratusan instruksi sudah tersedia di CPU, termasuk penambahan, pengurangan, pemindahan, penyimpanan, dan pemuatan.

Berikut adalah contoh set instruksi:

Setiap instruksi dalam set instruksi memiliki alamat binernya sendiri yang dikenal sebagai opcode. Opcode akan menjadi beberapa bit biner pertama yang memberitahu operasi mana dari set instruksi yang akan digunakan.

Sintaks-instruksi-rakitan

Mengikuti opcode adalah operan. Operand berisi nilai dan alamat dimana opcode akan digunakan.

Diagram menunjukkan instruksi 8-bit. Jika CPU memiliki arsitektur 64-bit, maka instruksi dapat menjangkau hingga 64 bit dengan lebar instruksi, menjadikannya prosesor yang lebih mumpuni.

Assembler

Sekarang setelah Anda memahami sinyal biner, Anda dapat mempelajari tentang bagaimana komputer Anda menginterpretasikan sinyal tersebut. Bagaimana kode mesin ditafsirkan tergantung pada jenis logika yang digunakan pada assembler (program tingkat rendah yang digunakan untuk memecahkan kode dan merakit kode ke biner yang tepat).

Misalnya, jika assembler kami menggunakan standar ASCII (American Standard Code for Information Interchange), assembler kami akan mengambil kode mesin yang diberikan dan menafsirkannya sama seperti dari ASCII pada tabel di bawah ini.

00101001SEBUAH00101111G00110101M00111011S01000001kamu
00101010B00110000H00110110n00111100T01000010Z
00101011C00110001Saya00110111000111101kamu
00101100D00110010J00111000P00111110V
00101101E00110011K00111001Q00111111W
00101110F00110100L00111010R0100000x

Karena assembler kami menggunakan ASCII (versi 8-bit), setiap delapan bilangan biner dalam biner diinterpretasikan sebagai satu karakter. Assembler akan mengambil byte ini dan menafsirkannya sesuai dengan standar yang diberikan. Misalnya, 01000001 01101001 01010100 akan diterjemahkan ke dalam kata “bit”.

Memahami Bahasa Assembly

Assembly Language adalah bahasa pemrograman tingkat rendah yang dapat dibaca manusia yang secara langsung memanipulasi opcode dan operan arsitektur CPU.

Berikut adalah contoh kode perakitan sederhana menggunakan set instruksi yang ditunjukkan sebelumnya:

1. LODA #5 
2. LODB #7
3. ADD R3
4. STRE M12

Blok kode ini disimpan dalam RAM sampai CPU mengambil setiap baris kode satu per satu.

Siklus Pengambilan, Dekode, dan Eksekusi CPU

CPU mengeksekusi kode melalui siklus yang dikenal sebagai Fetch, Decode, dan Execute. Urutan ini menunjukkan bagaimana CPU memproses setiap baris kode.

Fetch: Penghitung instruksi di dalam CPU mengambil satu baris instruksi dari RAM untuk memberi tahu CPU instruksi apa yang harus dieksekusi selanjutnya.

Decode: Assembler akan memecahkan kode blok kode yang dapat dibaca manusia dan merakitnya sebagai binari yang diformat dengan benar untuk dipahami komputer.

1. 00010101 
2. 00100111
3. 00110011
4. 01011100

Execute: CPU kemudian mengeksekusi binari dengan menerapkan instruksi yang ditunjukkan oleh opcode ke operan yang disediakan.

Komputer akan menjalankannya sebagai berikut:

  1. Muat register pertama dengan 5
  2. Muat register kedua dengan 7
  3. 5 + 7 = 12, simpan 12 ke register ketiga
  4. Simpan nilai register ketiga ke alamat RAM M12

Komputer telah berhasil menambahkan dua angka bersama-sama dan menyimpan nilainya di alamat RAM yang ditentukan.

Besar! Sekarang Anda tahu bagaimana komputer mengeksekusi kode. Namun, itu tidak berhenti di situ.

Melangkah Lebih Jauh

Dengan perangkat keras yang tepat, assembler, dan bahasa assembly, orang dapat mengeksekusi kode dengan mudah. Namun, karena program dan perangkat keras komputer menjadi lebih kompleks, insinyur dan pemrogram harus memikirkan cara untuk membuat pemrograman tidak terlalu membosankan dan memastikan kompatibilitas dengan berbagai jenis arsitektur CPU. Demikianlah terciptanya compiler dan interpreter.

Apa itu Compiler dan Interpreter?

Compiler dan interpreter adalah program translasi yang mengambil kode sumber (program yang dibuat dari bahasa pemrograman tingkat tinggi) dan menerjemahkannya ke bahasa assembly, yang kemudian akan didekode oleh assembler ke biner.

Seorang juru bahasa akan mengambil satu baris kode dan segera menjalankannya. Ini biasanya digunakan pada terminal seperti terminal Linux Bash Shell dan terminal Windows PowerShell. Bagus untuk melakukan tugas satu kali sederhana.

Kredit Gambar: Rlistmedia/ Wikimedia Common

Sebaliknya, kompiler akan mengambil beberapa baris kode dan mengompilasinya untuk membuat program. Contoh program ini adalah Microsoft Word, Photoshop, Google Chrome, Safari, dan Steam.

Dengan pembuatan kompiler dan juru bahasa, bahasa pemrograman tingkat tinggi dibuat.

Bahasa Pemrograman Tingkat Tinggi

Bahasa pemrograman tingkat tinggi adalah bahasa apa pun setelah kode perakitan. Beberapa bahasa yang mungkin Anda kenal adalah C, Python, Java, dan Swift. Bahasa pemrograman ini membuat pemrograman lebih mudah dibaca manusia dan lebih sederhana daripada bahasa rakitan.

Berikut adalah perbandingan berdampingan untuk menggambarkan betapa sulitnya memprogram dalam perakitan daripada dengan bahasa pemrograman tingkat tinggi seperti Python:

Kedua kode akan mencetak “Hello World.”

Dengan bahasa pemrograman ini, pengembang dapat memprogram game, situs web, aplikasi, dan driver, dengan waktu yang wajar.

Komputer Dapat Mengeksekusi Semua Macam Kode

Komputer adalah perangkat yang hanya dapat membaca biner. Biner ini diproduksi oleh lebih dari satu miliar transistor berukuran mikroskopis yang dikemas di dalam CPU. Pengaturan transistor menentukan ISA (Instruction Set Architecture) CPU, yang menyediakan ratusan instruksi yang dapat segera dijalankan oleh CPU setelah opcode-nya dipanggil melalui kode. Pengembang mencampur dan mencocokkan instruksi ini secara berurutan, yang membuat seluruh program seperti mesin game, browser web, aplikasi, dan driver.

CPU mengeksekusi kode melalui urutan yang dikenal sebagai siklus pengambilan, dekode, eksekusi. Setelah sepotong kode dimuat ke dalam RAM, CPU akan mengambil isinya satu per satu, mendekode isinya menjadi biner melalui assembler, dan kemudian mengeksekusi kode tersebut.

Karena assembler hanya dapat menerjemahkan kode yang dibuat secara eksplisit untuk arsitektur CPU, compiler dan interpreter dibangun di atas assembler (seperti adaptor) untuk bekerja pada berbagai jenis arsitektur CPU. Seorang juru bahasa akan mengambil satu perintah dan segera menjalankannya. Sebaliknya, kompiler akan mengambil semua perintah Anda dan mengompilasinya menjadi program yang dapat digunakan kembali.

Bahasa pemrograman tingkat tinggi seperti Python, C, dan Java telah dibuat untuk membuat pemrograman lebih mudah, lebih cepat, dan nyaman. Sebagian besar pemrogram tidak lagi harus membuat kode dalam bahasa rakitan, karena bahasa pemrograman tingkat tinggi mereka yang mudah digunakan dapat diterjemahkan ke rakitan melalui kompiler.

Mudah-mudahan, Anda sekarang memiliki pemahaman yang lebih baik tentang dasar-dasar komputer dan bagaimana mereka mengeksekusi kode.

Pos terkait