Pengantar Pemrograman Assembly MCS-51

| | Tidak ada komentar
Selain CPU hanya dapat bekerja dalam biner, CPU juga dapat melakukannya dengan kecepatan yang sangat tinggi. Bagi manusia, menangani bilangan 0 dan 1 untuk memrogram komputer adalah suatu hal yang membosankan dan juga lambat. Sebuah program yang hanya terdiri dari bilangan 0 dan 1 disebut bahasa mesin. Pada komputer terdahulu, programer menulis program dalam bahasa mesin. Walaupun bilangan heksadesimal digunakan sebagai cara untuk mengefisienkan dalam mepresentasikan bilangan biner, namun proses kerja dalam kode mesin masih dianggap cukup rumit bagi manusia. Oleh karena itu, dikembangkan bahasa assembly yang berisi mnemonic untuk instruksi kode mesin, ditambah fitur-fitur lain yang membuat programer lebih cepat dan tidak rentan terhadap kesalahan saat membuat suatu program. Sekarang mnemonic digunakan secara luas dalam bidang ilmu pengetahuan, buku-buku tehnik yang merujuk pada kode dengan tujuan semuanya agar lebih mudah untuk diingat. Kode bahasa assembly diterjemahkan ke dalam bahasa mesin oleh sebuah program yang disebut assembler. Bahasa assembly juga dikenal sebagai bahasa tingkat rendah (low-level languages) karena bahasa ini yang paling berhubungan langsung dengan struktur CPU. Dalam memprogram bahasa assembly, programer diharuskan benar-benar mengenal semua register dalam CPU, ukuran dari setiap register tersebut, serta berbagai detil lainnya.

Dimasa sekarang, seseorang dapat menggunakan berbagai bahasa yang jauh lebih memudahkan, misalnya seperti BASIC, Pascal, C, C++, Java , dan masih banyak lagi. Bahasa-bahasa tersebut disebut sebagai bahasa tingkat tinggi (high-level languages) karena programer tidak perlu mengenal lebih jauh tentang isi dari struktur CPU target. Sementara assembler digunakan untuk menerjemahkan program yang berbahasa assembly ke dalam kode mesin (terkadang disebut object code atau opcode untuk operation code), bahasa tingkat tinggi diterjemahkan ke dalam kode mesin oleh program yang bernama compiler. Misalnya kita menulis program dalam bahasa C, maka kita harus menggunakan compiler C untuk menerjemahkan program tersebut ke dalam bahasa mesin. Namun untuk sekarang, kita cukup berkonsentrasi hanya pada bahasa assembly 8051 saja.

Struktur Bahasa Assembly

Program berbahasa assembly terdiri dari beberapa bagian. Setiap intsruksinya diungkapkan dalam satu baris kode. Setiap instruksi terdiri dari satu mnemonic, terkadang diikuti oleh satu atau dua operand. Operand adalah data yang ingin dimanipulasi, dan mnemonic yang memerintahkan CPU untuk melakukan sesuatu terhadap operand tersebut.

      ORG  0H      ;Mulai program di alamat 0
      MOV  R5,#25H ;Isikan 25h ke dalam R5
      MOV  R7,#34H ;Isikan 34h ke dalam R7
      MOV  A,#0    ;Isikan 0 ke dalam A
      ADD  A,R5    ;Tambahkan isi R5 ke dalam A
                   ;sehingga A = A + R5
      ADD  A,R7    ;Tambahkan isi R7 ke dalam A
                   ;sekarang A = A + R5
      ADD  A,#12H  ;Tambahkan 12h ke dalam A
                   ;sekarang A = A + 12h
HERE: SJMP HERE    ;Berputar di sini
      END          ;Akhir dari program asm

Program berbahasa assembly di atas merupakan statement atau baris yang berurutan, di mana terdiri dari instruksi assembly seperti ADD dan MOV, dan beberapa statement lain yang disebut directive. Setiap instruksi memerintahkan CPU untuk melakukan suatu hal, sedang directive (juga disebut psuedo-instruction) memberikan arahan kepada assembler. sebagai contoh, intstruksi MOV dan ADD adalah sebuah perintah bagi CPU, sedang ORG dan END adalah directive (petunjuk arahan) bagi assembler. ORG pada contoh diatas mengatakan kepada assembler untuk menempatkan opcode selanjutnya pada alamat 0 di dalam memori, sementara END adalah untuk memberitahukan assembler akhir dari program dan mengabaikan setiap text di bawah END.

Pada dasarnya setiap instruksi bahasa assembly terdiri dari empat bagian, yaitu:

[label:]   mnemonic   [operands]   [; komentar]

Tanda kurung diatas menunjukkan bahwa bagian tersebut adalah opsional dan tidak semua baris memiliki bagian tersebut. Tanda kurung tidak dimasukkan dalam kode sebenarnya. Mengenai format diatas, berikut ini adalah hal-hal yang harus diperhatikan:
  1. Label dipakai untuk memberi nama pada sebuah baris perintah agar lebih mudah menyebutnya dalam penulisan program. Dalam sebuah program, tidak boleh ada label yang sama. Label bisa ditulis apa saja asalkan diawali dengan huruf, biasanya memiliki panjang tidak lebih dari 16 digit dan diakhiri dengan tanda titik dua “:” (Periksa assembler yang anda gunakan untuk aturan lebih jelasnya).
  2. Bagian mnemonic dan operand dalam bahasa assembly merupakan bagian utama dari kode program. Statement dalam bahasa assembly misalnya adalah:
          ADD A,B
          MOV A,#67
    
    ADD dan MOV adalah mnemonic yang akan menghasilkan opcode. Sedang "A,B" dan A,#67" adalah operand dari mnemonic tersebut. Di luar kedua bagian ini, yakni mnumonic dan operand disebut sebagai instruksi-psuedo atau directive. Ingat bahwa sebuah directive tidak akan menghasilkan kode mesin (opcode), dan mereka digunakan oleh assembler saat memutuskan bagaimana caranya untuk menterjemahkan mnemonic dan operand yang ada di setelah directive tersebut ke dalam kode mesin yang benar sesuai dengan keinginan programer. Dalam program diatas, perintah ORG (origin) dan END adalah contoh dari directive (beberapa assembler menggunakan syntax .ORG dan .END). Periksa assembler anda untuk penjelasan lebih jauh.
  3. Bagian komentar merupakan catatan penulis program. Meskipun bagian ini tidak mutlak diperlukan tapi sangat membantu dalam masalah dokumentasi. Sebuah baris perintah dapat dengan mudah dimengerti maksud dan tujuannya dengan hanya membaca bagian komentarnya. hal ini sangat membantu orang lain yang membaca program anda. Pemisah bagian komentar dengan bagian sebelumnya adalah tanda spasi atau tabulator, meskipun demikian huruf pertama dari komentar harus berupa tanda titik-koma ";". Bagian komentar diabaikan oleh assembler, dengan kata lain tidak akan diterjemahkan kedalam bahasa mesin.

Sumber:
1. Mazidi, Muhammad Ali., The 8051 Microcontroller and Embedded Systems - Using Assembly and C.

Tidak ada komentar

Posting Komentar