Sistem Tertanam - Bahasa Perakitan

Bahasa majelis dikembangkan untuk menyediakan mnemonicsatau simbol untuk instruksi kode level mesin. Program bahasa assembly terdiri dari mnemonik, sehingga harus diterjemahkan ke dalam kode mesin. Program yang bertanggung jawab untuk konversi ini dikenal sebagaiassembler. Bahasa assembly sering diistilahkan sebagai bahasa tingkat rendah karena langsung bekerja dengan struktur internal CPU. Untuk memprogram dalam bahasa assembly, seorang programmer harus mengetahui semua register dari CPU.

Bahasa pemrograman yang berbeda seperti C, C ++, Java dan berbagai bahasa lain disebut bahasa tingkat tinggi karena tidak berurusan dengan detail internal CPU. Sebaliknya, assembler digunakan untuk menerjemahkan program bahasa assembly menjadi kode mesin (terkadang disebut jugaobject code atau opcode). Demikian pula, kompilator menerjemahkan bahasa tingkat tinggi ke dalam kode mesin. Misalnya, untuk menulis program dalam bahasa C, seseorang harus menggunakan kompiler C untuk menerjemahkan program ke dalam bahasa mesin.

Struktur Bahasa Majelis

Program bahasa assembly adalah serangkaian pernyataan, yang merupakan instruksi bahasa assembly seperti ADD dan MOV, atau pernyataan yang disebut directives.

Sebuah instruction memberi tahu CPU apa yang harus dilakukan, sementara a directive (disebut juga pseudo-instructions) memberikan instruksi kepada assembler. Misalnya, instruksi ADD dan MOV adalah perintah yang dijalankan oleh CPU, sedangkan ORG dan END adalah arahan assembler. Assembler menempatkan opcode ke lokasi memori 0 ketika direktif ORG digunakan, sedangkan END menunjukkan ke akhir kode sumber. Pengajaran bahasa program terdiri dari empat bidang berikut -

[ label: ]   mnemonics  [ operands ]   [;comment ]

Tanda kurung siku ([]) menunjukkan bahwa bidang tersebut opsional.

  • Itu label fieldmemungkinkan program untuk merujuk ke baris kode berdasarkan nama. Bidang label tidak boleh melebihi jumlah karakter tertentu.

  • Itu mnemonics dan operands fieldsbersama-sama melakukan pekerjaan nyata program dan menyelesaikan tugas. Pernyataan seperti ADD A, C & MOV C, # 68 dimana ADD dan MOV adalah mnemoniknya, yang menghasilkan opcode; "A, C" dan "C, # 68" adalah operan. Kedua bidang ini bisa berisi arahan. Perintah tidak menghasilkan kode mesin dan hanya digunakan oleh assembler, sedangkan instruksi diterjemahkan ke dalam kode mesin untuk dieksekusi oleh CPU.

1.0000         ORG  0H            ;start (origin) at location 0 
2 0000 7D25    MOV  R5,#25H       ;load 25H into R5 
3.0002 7F34    MOV  R7,#34H       ;load 34H into  R7 
4.0004 7400    MOV  A,#0          ;load 0 into A 
5.0006 2D      ADD  A,R5          ;add contents of R5 to A 
6.0007 2F      ADD  A,R7          ;add contents of R7 to A
7.0008 2412    ADD  A,#12H        ;add to A value 12 H 
8.000A 80FE    HERE: SJMP HERE    ;stay in this loop 
9.000C END                        ;end of asm source file
  • Itu comment field dimulai dengan titik koma yang merupakan indikator komentar.

  • Perhatikan Label "DI SINI" dalam program tersebut. Label apapun yang mengacu pada instruksi harus diikuti oleh titik dua.

Merakit dan Menjalankan Program 8051

Disini kita akan membahas tentang bentuk dasar bahasa assembly. Langkah-langkah untuk membuat, merakit, dan menjalankan program bahasa assembly adalah sebagai berikut -

  • Pertama, kami menggunakan editor untuk mengetik program yang mirip dengan program di atas. Editor seperti program MS-DOS EDIT yang disertakan dengan semua sistem operasi Microsoft dapat digunakan untuk membuat atau mengedit program. Editor harus dapat menghasilkan file ASCII. Ekstensi "asm" untuk file sumber digunakan oleh assembler di langkah berikutnya.

  • File sumber "asm" berisi kode program yang dibuat pada Langkah 1. Ini diumpankan ke assembler 8051. Assembler kemudian mengubah instruksi bahasa assembly menjadi instruksi kode mesin dan menghasilkan.obj file (file objek) dan a .lst file(daftar file). Itu juga disebut sebagaisource file, itulah mengapa beberapa assembler mengharuskan file ini memiliki ekstensi "src". File "lst" bersifat opsional. Ini sangat berguna untuk program karena ia mencantumkan semua opcode dan alamat serta kesalahan yang terdeteksi oleh assembler.

  • Perakit membutuhkan langkah ketiga yang disebut linking. Program tautan mengambil satu atau lebih file objek dan menghasilkan file objek absolut dengan ekstensi "abs".

  • Selanjutnya, file "abs" diumpankan ke program bernama "OH" (konverter objek ke hex), yang membuat file dengan ekstensi "hex" yang siap untuk dibakar ke ROM.

Tipe data

Mikrokontroler 8051 berisi satu tipe data 8-bit, dan setiap register juga berukuran 8-bit. Programmer harus memecah data yang lebih besar dari 8-bit (00 menjadi FFH, atau 255 dalam desimal) sehingga dapat diproses oleh CPU.

DB (Tentukan Byte)

Direktif DB adalah direktif data yang paling banyak digunakan di assembler. Ini digunakan untuk mendefinisikan data 8-bit. Ini juga dapat digunakan untuk menentukan data format desimal, biner, hex, atau ASCII. Untuk desimal, "D" setelah angka desimal adalah opsional, tetapi diperlukan untuk "B" (biner) dan "Hl" (heksadesimal).

Untuk menunjukkan ASCII, cukup tempatkan karakter dalam tanda kutip ('seperti ini'). Assembler menghasilkan kode ASCII untuk angka / karakter secara otomatis. Direktif DB adalah satu-satunya direktif yang dapat digunakan untuk mendefinisikan string ASCII yang lebih besar dari dua karakter; oleh karena itu, ini harus digunakan untuk semua definisi data ASCII. Beberapa contoh DB diberikan di bawah ini -

ORG  500H 
DATA1:  DB   28                     ;DECIMAL (1C in hex) 
DATA2:  DB   00110101B              ;BINARY  (35 in hex) 
DATA3:  DB   39H                    ;HEX 
        ORG  510H 
DATA4:  DB   "2591"                 ;ASCII  NUMBERS 
        ORG  520H                         
DATA6:  DA   "MY NAME IS Michael"   ;ASCII CHARACTERS

Tanda kutip tunggal atau ganda dapat digunakan di sekitar string ASCII. DB juga digunakan untuk mengalokasikan memori dalam potongan berukuran byte.

Assembler Directive

Beberapa arahan dari 8051 adalah sebagai berikut -

  • ORG (origin)- Petunjuk asal digunakan untuk menunjukkan awal alamat. Dibutuhkan angka dalam format heksa atau desimal. Jika H diberikan setelah angka, angka tersebut diperlakukan sebagai heksa, jika tidak desimal. Assembler mengubah angka desimal menjadi heksa.

  • EQU (equate)- Digunakan untuk mendefinisikan konstanta tanpa menempati lokasi memori. EQU mengasosiasikan nilai konstanta dengan label data sehingga label tersebut muncul dalam program, nilai konstanta tersebut akan menggantikan label. Saat menjalankan instruksi "MOV R3, #COUNT", register R3 akan dimuat dengan nilai 25 (perhatikan tanda #). Keuntungan menggunakan EQU adalah programmer dapat mengubahnya sekali dan assembler akan mengubah semua kejadiannya; programmer tidak harus mencari seluruh program.

  • END directive- Ini menunjukkan akhir dari file sumber (asm). Direktif END adalah baris terakhir dari program; apa pun setelah direktif END diabaikan oleh assembler.

Label dalam Bahasa Majelis

Semua label dalam bahasa assembly harus mengikuti aturan yang diberikan di bawah ini -

  • Setiap nama label harus unik. Nama-nama yang digunakan untuk label dalam pemrograman bahasa assembly terdiri dari huruf abjad baik huruf besar maupun kecil, angka 0 sampai 9, dan karakter khusus seperti tanda tanya (?), Titik (.), Pada rate @, garis bawah (_), dan dolar ($).

  • Karakter pertama harus dalam karakter alfabet; itu tidak bisa berupa angka.

  • Kata cadangan tidak dapat digunakan sebagai label dalam program. Misalnya, kata-kata ADD dan MOV adalah kata-kata yang telah dipesan, karena mereka adalah instruksi mnemonik.