Bahasa Assembly

Bahasa rakitan adalah bahasa pemrograman yang dapat digunakan untuk secara langsung memberi tahu komputer apa yang harus dilakukan. Bahasa rakitan hampir persis seperti kode mesin yang dapat dimengerti oleh komputer, kecuali bahwa bahasa rakitan menggunakan kata-kata sebagai pengganti angka. Komputer tidak dapat benar-benar memahami program assembly secara langsung. Namun, komputer dapat dengan mudah mengubah program ke dalam kode mesin dengan mengganti kata-kata dari program dengan angka-angka yang mereka gunakan. Program yang melakukan itu disebut assembler.

Program yang ditulis dalam bahasa assembly biasanya terbuat dari instruksi, yang merupakan tugas-tugas kecil yang dilakukan komputer saat menjalankan program. Disebut instruksi karena programmer menggunakannya untuk menginstruksikan komputer apa yang harus dilakukan. Bagian komputer yang mengikuti instruksi adalah prosesor.

Bahasa rakitan komputer adalah bahasa tingkat rendah, yang berarti bahwa bahasa ini hanya dapat digunakan untuk melakukan tugas-tugas sederhana yang dapat dimengerti komputer secara langsung. Untuk melakukan tugas yang lebih kompleks, seseorang harus memberi tahu komputer setiap tugas sederhana yang merupakan bagian dari tugas kompleks. Misalnya, komputer tidak mengerti bagaimana mencetak kalimat di layarnya. Sebaliknya, sebuah program yang ditulis dalam assembly harus memberitahukan bagaimana melakukan semua langkah kecil yang terlibat dalam pencetakan kalimat.

Program assembly seperti itu akan terdiri dari banyak, banyak instruksi, yang bersama-sama melakukan sesuatu yang tampaknya sangat sederhana dan mendasar bagi manusia. Hal ini menyulitkan manusia untuk membaca program assembly. Sebaliknya, bahasa pemrograman tingkat tinggi mungkin memiliki instruksi tunggal seperti PRINT "Hello, world!" yang akan memerintahkan komputer untuk melakukan semua tugas kecil untuk Anda.

Pengembangan Bahasa Assembly

Ketika para ilmuwan komputer pertama kali membuat mesin yang dapat diprogram, mereka memprogramnya secara langsung dalam kode mesin, yang merupakan serangkaian angka yang menginstruksikan komputer apa yang harus dilakukan. Menulis bahasa mesin sangat sulit dilakukan dan membutuhkan waktu yang lama, sehingga akhirnya dibuatlah bahasa assembly. Bahasa rakitan lebih mudah dibaca oleh manusia dan dapat ditulis lebih cepat, tetapi masih jauh lebih sulit bagi manusia untuk digunakan daripada bahasa pemrograman tingkat tinggi yang mencoba meniru bahasa manusia.

Pemrograman dalam kode mesin

Untuk memprogram dalam kode mesin, programmer perlu mengetahui seperti apa setiap instruksi dalam biner (atau heksadesimal). Meskipun mudah bagi komputer untuk mengetahui dengan cepat apa arti kode mesin, namun sulit bagi seorang programmer. Setiap instruksi dapat memiliki beberapa bentuk, yang semuanya hanya terlihat seperti sekumpulan angka bagi manusia. Kesalahan apa pun yang dilakukan seseorang saat menulis kode mesin hanya akan diketahui ketika komputer melakukan hal yang salah. Mencari tahu kesalahannya sulit karena kebanyakan orang tidak dapat mengetahui apa arti kode mesin dengan melihatnya. Contoh seperti apa kode mesin itu terlihat:

05 2A 00

Kode mesin heksadesimal ini memberitahu prosesor komputer x86 untuk menambahkan 42 ke akumulator. Sangat sulit bagi seseorang untuk membaca dan memahaminya bahkan jika orang tersebut mengetahui kode mesin.

Menggunakan Bahasa Assembly sebagai gantinya

Dengan bahasa assembly, setiap instruksi dapat ditulis sebagai kata pendek, yang disebut mnemonic, diikuti oleh hal-hal lain seperti angka atau kata-kata pendek lainnya. Mnemonik digunakan agar programmer tidak perlu mengingat angka yang tepat dalam kode mesin yang diperlukan untuk memberi tahu komputer untuk melakukan sesuatu. Contoh mnemonik dalam bahasa assembly termasuk add, yang menambahkan data, dan mov, yang memindahkan data dari satu tempat ke tempat lain. Karena 'mnemonic' adalah kata yang tidak umum, frasa jenis instruksi atau hanya instruksi kadang-kadang digunakan sebagai gantinya, seringkali salah. Kata-kata dan angka-angka setelah kata pertama memberikan lebih banyak informasi tentang apa yang harus dilakukan. Misalnya, hal-hal yang mengikuti add mungkin adalah dua hal apa yang harus ditambahkan bersama dan hal-hal yang mengikuti mov mengatakan apa yang harus dipindahkan dan di mana harus meletakkannya.

Misalnya, kode mesin di bagian sebelumnya (05 2A 00) dapat ditulis dalam assembly sebagai:

 tambahkan ax,42

Bahasa assembly juga memungkinkan programmer untuk menulis data aktual yang digunakan program dengan cara yang lebih mudah. Kebanyakan bahasa assembly memiliki dukungan untuk membuat angka dan teks dengan mudah. Dalam kode mesin, setiap jenis angka yang berbeda seperti positif, negatif atau desimal, harus secara manual dikonversi ke dalam biner dan teks harus didefinisikan satu huruf pada satu waktu, sebagai angka.

Bahasa assembly menyediakan apa yang disebut abstraksi kode mesin. Ketika menggunakan assembly, programmer tidak perlu mengetahui detail dari apa arti angka-angka pada komputer, assembler yang akan mengetahuinya. Bahasa assembly sebenarnya masih memungkinkan programmer menggunakan semua fitur prosesor yang mereka bisa dengan kode mesin. Dalam hal ini, bahasa rakitan memiliki sifat yang sangat baik dan langka: ia memiliki kemampuan yang sama untuk mengekspresikan hal-hal seperti hal yang diabstraksikannya (kode mesin) sementara menjadi jauh lebih mudah digunakan. Karena itu, kode mesin hampir tidak pernah digunakan sebagai bahasa pemrograman.

Pembongkaran dan Debugging

Ketika program selesai dibuat, program tersebut telah diubah menjadi kode mesin sehingga prosesor benar-benar dapat menjalankannya. Namun, kadang-kadang, jika program memiliki bug (kesalahan) di dalamnya, programmer ingin dapat mengetahui apa yang dilakukan oleh setiap bagian dari kode mesin. Disassembler adalah program yang membantu programmer melakukan hal itu dengan mengubah kode mesin program kembali ke dalam bahasa assembly, yang lebih mudah dimengerti. Disassembler, yang mengubah kode mesin menjadi bahasa assembly, melakukan kebalikan dari assembler, yang mengubah bahasa assembly menjadi kode mesin.

Organisasi Komputer

Pemahaman tentang bagaimana komputer diorganisasikan, bagaimana komputer tampaknya bekerja pada tingkat yang sangat rendah, diperlukan untuk memahami bagaimana program bahasa assembly bekerja. Pada tingkat yang paling sederhana, komputer memiliki tiga bagian utama:

  1. memori utama atau RAM yang menampung data dan instruksi,
  2. prosesor, yang memproses data dengan menjalankan instruksi, dan
  3. input dan output (kadang-kadang disingkat I/O), yang memungkinkan komputer berkomunikasi dengan dunia luar dan menyimpan data di luar memori utama sehingga bisa mendapatkan data kembali nanti.

Memori Utama

Pada kebanyakan komputer, memori dibagi menjadi byte. Setiap byte berisi 8 bit. Setiap byte dalam memori juga memiliki alamat yang merupakan angka yang menyatakan di mana byte tersebut berada dalam memori. Byte pertama dalam memori memiliki alamat 0, byte berikutnya memiliki alamat 1, dan seterusnya. Membagi memori ke dalam byte membuatnya dapat dialamati byte karena setiap byte mendapatkan alamat yang unik. Alamat memori byte tidak bisa digunakan untuk merujuk ke satu bit dari sebuah byte. Byte adalah bagian terkecil dari memori yang bisa dialamati.

Meskipun alamat merujuk ke byte tertentu dalam memori, prosesor memungkinkan penggunaan beberapa byte memori secara berurutan. Penggunaan yang paling umum dari fitur ini adalah menggunakan 2 atau 4 byte berturut-turut untuk mewakili sebuah angka, biasanya bilangan bulat. Byte tunggal kadang-kadang juga digunakan untuk merepresentasikan bilangan bulat, tetapi karena panjangnya hanya 8 bit, byte ini hanya dapat menampung 28 atau 256 kemungkinan nilai yang berbeda. Menggunakan 2 atau 4 byte dalam satu baris meningkatkan jumlah kemungkinan nilai yang berbeda menjadi 216 , 65536 atau 232 , 4294967296, masing-masing.

Ketika sebuah program menggunakan byte atau sejumlah byte dalam satu baris untuk mewakili sesuatu seperti huruf, angka, atau apa pun, byte tersebut disebut objek karena mereka semua adalah bagian dari hal yang sama. Meskipun objek semuanya disimpan dalam byte memori yang identik, mereka diperlakukan seolah-olah mereka memiliki 'tipe', yang mengatakan bagaimana byte harus dipahami: baik sebagai bilangan bulat atau karakter atau beberapa jenis lainnya (seperti nilai non-integer). Kode mesin juga dapat dianggap sebagai tipe yang diinterpretasikan sebagai instruksi. Pengertian tipe sangat, sangat penting karena mendefinisikan hal-hal apa saja yang bisa dan tidak bisa dilakukan pada objek dan bagaimana menginterpretasikan byte dari objek tersebut. Sebagai contoh, tidak sah untuk menyimpan bilangan negatif dalam objek bilangan positif dan tidak sah untuk menyimpan pecahan dalam bilangan bulat.

Alamat yang menunjuk ke (adalah alamat dari) objek multi-byte adalah alamat ke byte pertama dari objek tersebut - byte yang memiliki alamat terendah. Sebagai tambahan, satu hal penting yang perlu diperhatikan adalah bahwa Anda tidak dapat mengetahui tipe objek - atau bahkan ukurannya - dari alamatnya. Bahkan, Anda bahkan tidak dapat mengetahui tipe objek dengan melihatnya. Sebuah program bahasa assembly perlu melacak alamat memori mana yang menyimpan objek mana, dan seberapa besar objek-objek tersebut. Sebuah program yang melakukan hal tersebut adalah tipe yang aman karena hanya melakukan hal-hal pada objek yang aman untuk dilakukan pada tipe mereka. Program yang tidak melakukannya mungkin tidak akan bekerja dengan baik. Perhatikan bahwa sebagian besar program tidak benar-benar secara eksplisit menyimpan apa tipe dari sebuah obyek, mereka hanya mengakses obyek secara konsisten - obyek yang sama selalu diperlakukan sebagai tipe yang sama.

Prosesor

Prosesor menjalankan (mengeksekusi) instruksi-instruksi, yang disimpan sebagai kode mesin dalam memori utama. Selain dapat mengakses memori untuk penyimpanan, sebagian besar prosesor memiliki beberapa ruang kecil, cepat, dan berukuran tetap untuk menyimpan objek yang sedang dikerjakan. Ruang-ruang ini disebut register. Prosesor biasanya mengeksekusi tiga jenis instruksi, meskipun beberapa instruksi dapat berupa kombinasi dari jenis-jenis ini. Di bawah ini adalah beberapa contoh dari setiap tipe dalam bahasa assembly x86.

Instruksi yang membaca atau menulis memori

Instruksi bahasa assembly x86 berikut ini membaca (load) objek 2-byte dari byte di alamat 4096 (0x1000 dalam heksadesimal) ke dalam register 16-bit yang disebut 'ax':

        mov ax, [1000h]

Dalam bahasa assembly ini, tanda kurung siku di sekitar angka (atau nama register) berarti bahwa angka tersebut harus digunakan sebagai alamat ke data yang harus digunakan. Penggunaan alamat untuk menunjuk ke data disebut indirection. Dalam contoh berikut ini, tanpa tanda kurung siku, register lain, bx, sebenarnya mendapatkan nilai 20 yang dimuat ke dalamnya.

        mov bx, 20

Karena tidak ada indireksi yang digunakan, nilai aktual itu sendiri dimasukkan ke dalam register.

Jika operan (hal-hal yang muncul setelah mnemonic), muncul dalam urutan terbalik, instruksi yang memuat sesuatu dari memori, malah menuliskannya ke memori:

        mov [1000h], ax

Di sini, memori pada alamat 1000h mendapatkan nilai ax. Jika contoh ini dieksekusi tepat setelah contoh sebelumnya, 2 byte pada 1000h dan 1001h akan menjadi integer 2 byte dengan nilai 20.

Instruksi yang melakukan operasi matematika atau logika

Beberapa instruksi melakukan hal-hal seperti pengurangan atau operasi logika seperti tidak:

Contoh kode mesin di awal artikel ini akan menjadi seperti ini dalam bahasa assembly:

        tambahkan kapak, 42

Di sini, 42 dan ax ditambahkan bersama dan hasilnya disimpan kembali di ax. Dalam x86 assembly juga memungkinkan untuk menggabungkan akses memori dan operasi matematika seperti ini:

        tambahkan ax, [1000h]

Instruksi ini menambahkan nilai dari bilangan bulat 2 byte yang disimpan pada 1000h ke ax dan menyimpan jawabannya di ax.

        atau ax, bx

Instruksi ini menghitung atau isi dari register ax dan bx dan menyimpan hasilnya kembali ke ax.

Instruksi yang memutuskan apa instruksi berikutnya yang akan dilakukan

Biasanya, instruksi dieksekusi sesuai urutan kemunculannya di memori, yang merupakan urutan yang diketik dalam kode assembly. Prosesor hanya mengeksekusinya satu demi satu. Namun, agar prosesor dapat melakukan hal-hal yang rumit, mereka perlu mengeksekusi instruksi yang berbeda berdasarkan data yang diberikan. Kemampuan prosesor untuk mengeksekusi instruksi yang berbeda tergantung pada hasil sesuatu disebut percabangan. Instruksi yang memutuskan instruksi berikutnya disebut instruksi percabangan.

Dalam contoh ini, misalkan seseorang ingin menghitung jumlah cat yang mereka perlukan untuk mengecat persegi dengan panjang sisi tertentu. Namun, karena skala ekonomi, toko cat tidak akan menjualnya kurang dari jumlah cat yang dibutuhkan untuk mengecat persegi 100 x 100.

Untuk mengetahui jumlah cat yang mereka perlukan berdasarkan panjang persegi yang ingin mereka cat, mereka membuat serangkaian langkah ini:

  • kurangi 100 dari panjang sisinya
  • jika jawabannya kurang dari nol, atur panjang sisinya menjadi 100
  • kalikan panjang sisi dengan dirinya sendiri

Algoritma tersebut dapat dinyatakan dalam kode berikut dimana ax adalah panjang sisinya.

        mov bx, ax     sub bx, 100    jge lanjutkan mov ax, 100 lanjutkan:         mul ax

Contoh ini memperkenalkan beberapa hal baru, tetapi dua instruksi pertama sudah tidak asing lagi. Mereka menyalin nilai ax ke dalam bx dan kemudian mengurangi 100 dari bx.

Salah satu hal baru dalam contoh ini disebut label, sebuah konsep yang ditemukan dalam bahasa assembly pada umumnya. Label dapat berupa apa saja yang diinginkan programmer (kecuali jika itu adalah nama instruksi, yang akan membingungkan assembler). Dalam contoh ini, labelnya adalah 'continue'. Ini diinterpretasikan oleh assembler sebagai alamat dari sebuah instruksi. Dalam kasus ini, ini adalah alamat dari mult ax.

Konsep baru lainnya adalah flag. Pada prosesor x86, banyak instruksi yang menetapkan 'flag' dalam prosesor yang dapat digunakan oleh instruksi berikutnya untuk memutuskan apa yang harus dilakukan. Dalam hal ini, jika bx kurang dari 100, sub akan menetapkan flag yang mengatakan bahwa hasilnya kurang dari nol.

Instruksi berikutnya adalah jge yang merupakan kependekan dari 'Jump if Greater than or Equal to'. Ini adalah instruksi cabang. Jika flag dalam prosesor menentukan bahwa hasilnya lebih besar dari atau sama dengan nol, alih-alih hanya pergi ke instruksi berikutnya, prosesor akan melompat ke instruksi pada label continue, yaitu mul ax.

Contoh ini berfungsi dengan baik, tetapi ini bukan yang akan ditulis oleh kebanyakan programmer. Instruksi pengurangan mengatur flag dengan benar, tetapi juga mengubah nilai yang dioperasikannya, yang mengharuskan ax untuk disalin ke dalam bx. Sebagian besar bahasa assembly mengizinkan instruksi perbandingan yang tidak mengubah argumen apa pun yang dilewatkan, tetapi masih mengatur flag dengan benar dan x86 assembly tidak terkecuali.

        cmp ax, 100    jge lanjutkan mov ax, 100 lanjutkan:         mul ax

Sekarang, alih-alih mengurangi 100 dari ax, melihat apakah angka itu kurang dari nol, dan menetapkannya kembali ke ax, ax dibiarkan tidak berubah. Bendera-bendera masih ditetapkan dengan cara yang sama, dan lompatan masih diambil dalam situasi yang sama.

Masukan dan Keluaran

Meskipun input dan output adalah bagian mendasar dari komputasi, tidak ada satu cara untuk melakukannya dalam bahasa assembly. Hal ini karena cara kerja I/O tergantung pada pengaturan komputer dan sistem operasi yang dijalankan, bukan hanya jenis prosesor yang dimilikinya. Pada bagian contoh, contoh Hello World menggunakan panggilan sistem operasi MS-DOS dan contoh setelahnya menggunakan panggilan BIOS.

Adalah mungkin untuk melakukan I/O dalam bahasa assembly. Memang, bahasa assembly secara umum dapat mengekspresikan apa saja yang mampu dilakukan oleh komputer. Akan tetapi, walaupun ada instruksi untuk menambah dan mencabang dalam bahasa assembly yang akan selalu melakukan hal yang sama, tidak ada instruksi dalam bahasa assembly yang selalu melakukan I/O.

Hal penting yang perlu diperhatikan adalah, bahwa cara kerja I/O bukanlah bagian dari bahasa assembly apa pun, karena ini bukan bagian dari cara kerja prosesor.

Bahasa Perakitan dan Portabilitas

Meskipun bahasa rakitan tidak secara langsung dijalankan oleh prosesor - kode mesin, namun masih banyak yang harus dilakukan. Setiap keluarga prosesor mendukung fitur, instruksi, aturan yang berbeda untuk apa yang dapat dilakukan instruksi, dan aturan untuk kombinasi instruksi apa yang diizinkan di mana. Karena itu, berbagai jenis prosesor masih membutuhkan bahasa assembly yang berbeda.

Karena setiap versi bahasa assembly terikat pada keluarga prosesor, maka bahasa assembly tidak memiliki sesuatu yang disebut portabilitas. Sesuatu yang memiliki portabilitas atau portabel dapat dengan mudah ditransfer dari satu jenis komputer ke komputer lain. Sementara jenis bahasa pemrograman lainnya portabel, bahasa rakitan, secara umum, tidak.

Bahasa Assembly dan Bahasa Tingkat Tinggi

Meskipun bahasa assembly memungkinkan cara mudah untuk menggunakan semua fitur prosesor, namun bahasa ini tidak digunakan untuk proyek perangkat lunak modern karena beberapa alasan:

  • Dibutuhkan banyak usaha untuk mengekspresikan program sederhana dalam assembly.
  • Meskipun tidak serawan kesalahan seperti kode mesin, bahasa rakitan masih menawarkan perlindungan yang sangat sedikit terhadap kesalahan. Hampir semua bahasa assembly tidak menerapkan keamanan tipe.
  • Bahasa Assembly tidak mempromosikan praktik pemrograman yang baik seperti modularitas.
  • Walaupun setiap instruksi bahasa assembly mudah dimengerti, sulit untuk mengetahui apa maksud dari programmer yang menulisnya. Pada kenyataannya, bahasa rakitan dari sebuah program sangat sulit dimengerti sehingga perusahaan tidak khawatir tentang orang yang membongkar (mendapatkan bahasa rakitan dari) program mereka.

Sebagai akibat dari kelemahan ini, bahasa tingkat tinggi seperti Pascal, C, dan C++ digunakan untuk sebagian besar proyek. Bahasa-bahasa ini memungkinkan programmer untuk mengekspresikan ide-ide mereka secara lebih langsung daripada harus khawatir tentang memberi tahu prosesor apa yang harus dilakukan setiap langkah. Disebut tingkat tinggi karena ide-ide yang dapat diekspresikan oleh programmer dalam jumlah kode yang sama lebih rumit.

Programmer yang menulis kode dalam bahasa tingkat tinggi yang dikompilasi menggunakan program yang disebut kompiler untuk mengubah kode mereka ke dalam bahasa assembly. Kompiler jauh lebih sulit untuk ditulis daripada assembler. Juga, bahasa tingkat tinggi tidak selalu memungkinkan programmer untuk menggunakan semua fitur prosesor. Ini karena bahasa tingkat tinggi dirancang untuk mendukung semua keluarga prosesor. Tidak seperti bahasa assembly, yang hanya mendukung satu jenis prosesor, bahasa tingkat tinggi bersifat portabel.

Meskipun compiler lebih rumit daripada assembler, puluhan tahun membuat dan meneliti compiler telah membuatnya sangat bagus. Sekarang, tidak banyak alasan untuk menggunakan bahasa assembly lagi untuk sebagian besar proyek, karena compiler biasanya dapat mengetahui cara mengekspresikan program dalam bahasa assembly sebaik atau lebih baik daripada programmer.

Contoh Program

Program Hello World yang ditulis dalam x86 Assembly:

adosseg .model small .stack 100h .data hello_message db 'Hello, World! ',0dh,0ah,'$' .code main proc mov ax,@data mov ds,ax mov ah,9 mov dx,offset hello_message int 21h mov ax,4C00h int 21h main endp end main

Sebuah fungsi yang mencetak angka ke layar menggunakan interupsi BIOS yang ditulis dalam NASM x86 assembly. Kode modular dapat ditulis dalam assembly, tetapi membutuhkan usaha ekstra. Perhatikan bahwa apapun yang muncul setelah titik koma pada sebuah baris adalah sebuah komentar dan diabaikan oleh assembler. Menaruh komentar dalam kode bahasa assembly sangat penting karena program bahasa assembly yang besar sangat sulit untuk dimengerti.

; void printn(int number, int base); printn: dorong  bp      mov     bp, sp dorong  ax         dorong bx      dorong  cx      dorong  dx      dorong  si      mov     si, 0   mov        ax, [bp + 4]   ; nomor        mov     cx, [bp + 6]   ; gloop dasar: inc     si               ; panjang string       mov     dx, 0          ; nol dx       div     cx               ; membagi dengan basis         cmp     dx, 10         ; apakah itu ge 10?         jge     num     tambahkan      dx, '0'        ; tambahkan nol ke dx jmp     anum num:    tambahkan      dx, ('A'- 10)  ; nilai hex, tambahkan 'A' ke dx - 10. anum:        dorong  dx             ; letakkan dx ke stack.        cmp     ax, 0          ; haruskah kita lanjutkan?       jne     gloop  mov     bx, 7h         ; untuk interupsi tloop:  pop     ax             ; dapatkan nilainya    mov     ah, 0eh        ; untuk interupsi      int     10h            ; menulis karakter     dec     si             ; singkirkan karakter    jnz     tloop  pop            si      pop     dx      pop     cx         pop     bx      pop     ax      pop     bp      ret     4

Pertanyaan dan Jawaban

T: Apa yang dimaksud dengan bahasa rakitan?


J: Bahasa rakitan adalah bahasa pemrograman yang dapat digunakan untuk secara langsung memberi tahu komputer apa yang harus dilakukan. Bahasa ini hampir persis seperti kode mesin yang dapat dimengerti oleh komputer, kecuali bahwa bahasa ini menggunakan kata-kata sebagai pengganti angka.

T: Bagaimana komputer memahami program assembly?


J: Komputer tidak dapat benar-benar memahami program assembly secara langsung, tetapi komputer dapat dengan mudah mengubah program ke dalam kode mesin dengan mengganti kata-kata dari program dengan angka-angka yang mereka gunakan. Proses ini dilakukan dengan menggunakan assembler.

T: Apa yang dimaksud dengan instruksi dalam bahasa rakitan?


J: Instruksi dalam bahasa rakitan adalah tugas-tugas kecil yang dilakukan komputer saat menjalankan program. Disebut instruksi karena instruksi tersebut menginstruksikan komputer apa yang harus dilakukan. Bagian komputer yang bertanggung jawab untuk mengikuti instruksi ini disebut prosesor.

T: Bahasa pemrograman jenis apa yang dimaksud dengan assembly?


J: Bahasa assembly adalah bahasa pemrograman tingkat rendah, yang berarti bahwa bahasa ini hanya dapat digunakan untuk melakukan tugas-tugas sederhana yang dapat dimengerti komputer secara langsung. Untuk melakukan tugas-tugas yang lebih kompleks, seseorang harus memecah setiap tugas menjadi komponen-komponen individualnya dan memberikan instruksi untuk setiap komponen secara terpisah.

T: Apa bedanya dengan bahasa tingkat tinggi?


J: Bahasa tingkat tinggi mungkin memiliki perintah tunggal seperti PRINT "Hello, world!" yang akan memerintahkan komputer untuk melakukan semua tugas-tugas kecil secara otomatis tanpa perlu menentukannya satu per satu seperti yang Anda perlukan dengan program assembly. Hal ini membuat bahasa tingkat tinggi lebih mudah dibaca dan dimengerti oleh manusia daripada program assembly yang terdiri dari banyak instruksi individual.

T: Mengapa sulit bagi manusia untuk membaca program assembly?


J: Karena banyak instruksi individu harus ditentukan untuk tugas yang kompleks seperti mencetak sesuatu di layar atau melakukan perhitungan pada kumpulan data - hal-hal yang tampaknya sangat mendasar dan sederhana ketika diungkapkan dalam bahasa alami manusia - jadi mungkin ada banyak baris kode yang membentuk satu instruksi yang menyulitkan manusia yang tidak tahu bagaimana komputer bekerja secara internal pada tingkat yang rendah untuk mengikuti dan menafsirkan apa yang terjadi di dalamnya.

AlegsaOnline.com - 2020 / 2023 - License CC3