Apa itu kode native?
Native code (Kode native) adalah data biner yang dikompilasi untuk dijalankan pada prosesor, seperti prosesor Intel x86-class. Kode ini ditulis dalam format 1 dan 0 yang harus sesuai dengan instruction set architecture (ISA) prosesor. Kode native memberikan instruksi ke prosesor tentang tugas yang harus dilakukan. Semua instruksi harus diberikan ke prosesor dalam bentuk kode native karena itulah satu-satunya bahasa yang bisa dipahami. Kode native juga dikenal sebagai machine code atau machine language.
Setiap CPU memiliki ISA yang menentukan kemampuan prosesor. ISA tertanam dalam mikroarsitektur CPU dan berfungsi sebagai antarmuka antara perangkat keras dan perangkat lunak komputer. ISA mendefinisikan serangkaian perintah yang bisa dijalankan oleh CPU. Kode mesin harus dikompilasi atau dirakit secara khusus untuk arsitektur dan ISA prosesor. Dua jenis ISA yang paling umum adalah complex instruction set computer (CISC) dan reduced instruction set computer (RISC).
Beberapa komputer memiliki emulator yang memungkinkan menjalankan program dengan kode mesin yang tidak dibuat untuk arsitektur spesifik. Dalam kasus ini, komputer akan meniru prosesor target asli dengan menjalankan program dalam mode emulasi pada prosesor baru. Namun, saat menggunakan emulasi, program biasanya berjalan lebih lambat dibandingkan jika dijalankan secara native pada prosesor aslinya. Alternatifnya, program dapat ditulis ulang dan dikompilasi ulang agar bisa berjalan secara native di prosesor baru.
Bagaimana kode native dihasilkan?
Proses pembuatan kode mesin bervariasi tergantung pada lingkungan dan jenis perangkat lunaknya. Biasanya, proses ini dimulai dengan bahasa pemrograman tingkat tinggi seperti C, C++, C#, Visual Basic (VB), Java, Python, Swift, Go, PHP, dan lainnya. Kode sumber yang dibuat dalam bahasa ini dikonversi menjadi kode mesin, baik secara langsung atau melalui beberapa langkah perantara.
Salah satu cara adalah dengan menggunakan compiler untuk mengubah kode sumber menjadi kode assembly, lalu menggunakan assembler untuk menghasilkan kode mesin. Kode mesin ini kemudian dimasukkan ke dalam linker untuk menghasilkan file eksekusi yang berisi kode mesin. Diagram di bawah ini memberikan gambaran proses konversi kode sumber.
Metode lain untuk menghasilkan kode mesin?
Bukan hanya cara di atas yang bisa digunakan untuk menghasilkan kode mesin. Misalnya, .NET Framework menggunakan compiler khusus untuk mengonversi kode sumber ke Intermediate Language (IL), yang kemudian diproses oleh Common Language Runtime (CLR).
CLR memiliki compiler just-in-time (JIT) yang mengubah kode IL menjadi kode mesin untuk platform target. CLR dan JIT compiler membantu meningkatkan performa aplikasi dan menawarkan berbagai manfaat lain, seperti dukungan untuk atribut kustom, penanganan eksepsi terstruktur, dan threading eksplisit untuk aplikasi multithreaded.
Java memiliki pendekatan serupa dengan bahasa di .NET. Dari kode sumber Java, compiler menghasilkan bytecode, yang kemudian dijalankan oleh Java Virtual Machine (JVM) di sistem target. JVM adalah bagian dari Java Runtime Environment (JRE) yang menginterpretasikan bytecode dan mengubahnya menjadi kode mesin spesifik untuk arsitektur prosesor target. JVM juga memiliki JIT compiler untuk mempercepat eksekusi kode.
Tidak semua perangkat lunak dimulai dengan bahasa pemrograman tingkat tinggi. Beberapa dibuat langsung dengan bahasa assembly, yang merupakan bahasa tingkat rendah. Seperti bahasa tingkat tinggi, bahasa assembly ditulis dalam teks biasa yang dapat dibaca manusia.
Kata-kata pendek deskriptif, yang disebut mnemonik, digunakan untuk mewakili setiap instruksi. Misalnya, dalam bahasa assembly x86, add berarti tambah, sub berarti kurangi, dan inc berarti tambah satu. Assembler digunakan untuk mengubah bahasa assembly menjadi kode mesin.