Apa itu Bahasa Perakitan?

Kadang-kadang disebut sebagai assembly atau ASM, bahasa assembly adalah bahasa pemrograman tingkat rendah.

Program yang ditulis dalam bahasa assembly dikompilasi oleh assembler. Setiap assembler memiliki bahasa rakitan sendiri, yang dirancang untuk satu arsitektur komputer tertentu.

Bahasa mesin hanyalah serangkaian angka, yang tidak mudah dibaca manusia. Dengan menggunakan ASM, programmer dapat menulis program yang dapat dibaca manusia yang hampir sama persis dengan bahasa mesin.

Kerugiannya adalah segala sesuatu yang dilakukan komputer harus dijelaskan secara eksplisit, dalam detail yang tepat. Keuntungannya adalah bahwa programmer memiliki kontrol maksimum atas apa yang dilakukan komputer.

Mengapa ASM bahasa "tingkat rendah"?

Assembly disebut bahasa pemrograman tingkat rendah karena ada (hampir) hubungan satu-ke-satu antara apa yang diperintahkan komputer untuk dilakukan, dan apa yang dilakukan komputer. Secara umum, satu baris program perakitan berisi maksimal satu instruksi untuk komputer.

Bagaimana ASM berbeda dari bahasa "tingkat tinggi"?

Bahasa tingkat tinggi menyediakan abstraksi operasi tingkat rendah yang memungkinkan programmer untuk lebih fokus pada menggambarkan apa yang ingin mereka lakukan, dan lebih sedikit pada bagaimana hal itu harus dilakukan . Memprogram dengan cara ini lebih nyaman dan membuat program lebih mudah dibaca dengan mengorbankan kontrol level rendah.

Program yang ditulis dalam bahasa tingkat tinggi tidak akan pernah menyamai kecepatan dan efisiensi mentah dari program yang ditulis dalam perakitan. Contoh bahasa tingkat tinggi termasuk Python, Java, JavaScript, Clojure, dan Lisp.

Apa itu bahasa "tingkat menengah"?

Bahasa tingkat menengah atau tingkat rendah menyediakan beberapa abstraksi tingkat tinggi untuk membuat hidup programmer lebih mudah, sambil tetap memberikan akses ke operasi tingkat rendah. Mereka sering digunakan untuk menulis sistem operasi, sehingga mereka kadang-kadang disebut bahasa pemrograman sistem .

Program yang ditulis dalam bahasa tingkat menengah juga dapat melakukan, atau hampir juga, sebagai program yang ditulis dalam bahasa assembly. Contoh bahasa pemrograman tingkat menengah termasuk C, C ++, Ada, Nim, dan Rust.

Apakah ASM portable?

Tidak. Karena bahasa assembly terikat pada satu arsitektur komputer tertentu, mereka tidak portabel. Suatu program yang ditulis dalam satu bahasa rakitan harus sepenuhnya ditulis ulang agar dapat dijalankan pada jenis mesin lain.

Portabilitas adalah salah satu keunggulan utama bahasa tingkat tinggi. Bahasa pemrograman C sering disebut "portable assembly" karena kompiler C ada untuk hampir setiap arsitektur sistem modern. Suatu program yang ditulis dalam C mungkin memerlukan beberapa perubahan sebelum akan dikompilasi di komputer lain, tetapi bahasa intinya portabel.

Secara umum, semakin tinggi level bahasa, semakin sedikit perubahan yang harus dilakukan agar dapat berjalan di arsitektur lain. Bahasa tingkat terendah - bahasa mesin dan bahasa rakitan - tidak portabel.

Contoh: Halo, Dunia! dalam perakitan 32-bit, untuk Windows

Ini "Hello, World" ditulis untuk prosesor Intel 32-bit. Ini juga akan berjalan pada prosesor 64-bit. Kami akan mengkompilasi dan menjalankannya di Windows 10.

 global _main extern _printf bagian .text _main: push message call _printf add esp, 4 ret message: db 'Hello, World!', 10, 0 

Untuk memulai, buka Notepad. Salin dan tempel kode di atas ke file teks baru, dan simpan file tersebut sebagai hello.asm .

Untuk mengkompilasi perakitan, kami akan menggunakan NASM, the Netwide Assembler. Itu dapat diunduh di //www.nasm.us/.

 nasm -f win32 hello.asm 

Ketika Anda menjalankan perintah ini, NASM membuat file objek. File objek berisi kode mesin, tetapi tidak cukup file yang dapat dieksekusi. File objek kami disebut hello.obj .

Untuk membuat executable, kita akan menggunakan MinGW versi 32-bit (Minimal GNU untuk Windows) yang akan menyediakan kompiler gcc. Itu dapat diunduh di //www.mingw.org/.

 gcc -o hello.exe hello.obj 
 Halo 
 Halo Dunia! 

Contoh: Halo, Dunia! dalam perakitan 64-bit, untuk Linux

Ini "Hello, World" ditulis untuk prosesor Intel 64-bit. Kami akan mengkompilasi dan menjalankannya di Linux 64-bit.

 printf eksternal; fungsi C printf, disebut bagian. data; Bagian data, variabel yang diinisialisasi msg: db "Hello, world!", 0; String C berakhir dengan 0 fmt: db "% s", 10, 0; Format printf, "\ n", bagian '0' .text; Mulai bagian kode utama global; titik masuk gcc standar utama:; label program untuk entry point push rbp; mengatur stack frame, harus disejajarkan mov rdi, fmt mov rsi, msg mov rax, 0; bisa juga: xor rax, rax call printf; Panggil fungsi C printf pop rbp; mengembalikan tumpukan mov rax, 0; normal, tidak ada kesalahan, ret pengembalian nilai; kembali 

Salin dan tempel program ini ke file baru bernama hello.asm .

Kemudian, kompilasi rakitan dengan NASM, yang dapat Anda instal dengan manajer paket Anda. Misalnya, di Ubuntu atau Debian, Anda dapat menginstal NASM menggunakan apt:

 sudo apt update && sudo apt install nasm 

Jalankan perintah ini untuk membuat file objek Anda:

 nasm -f elf64 hello.asm 

File objek bernama hello.o .

Selanjutnya, gunakan gcc untuk menautkan file objek ini ke pustaka yang diperlukan di komputer Anda, dan kompilasi ke file yang dapat dieksekusi bernama hello :

 gcc hello.o -o halo 

Terakhir, jalankan file yang dapat dieksekusi:

 ./Halo 
 Halo Dunia! 

Sebagai referensi, ini adalah program yang sama, ditulis dalam C:

 #include int main () {char msg [] = "Halo dunia \ n"; printf ("% s \ n", msg); return 0; } 

  • Lihat rutinitas debugging untuk contoh kode rakitan tingkat rendah lainnya dan informasi tambahan tentang apa yang dilakukan setiap rutinitas.
  • Untuk contoh tambahan bahasa rakitan, lihat situs web Happy Codings.

2GL, Assembler, Bahasa tingkat rendah, Bahasa mesin, Istilah pemrograman