Bahasa Assembly MCS-51

Bahasa Assembly MCS-51

Apa itu Bahasa Assembly?

Bahasa Assembly adalah merupakan bahasa dasar yang digunakan oleh mikrokontroler atau microprocessor sebelum Bahasa C dikenal. Bahasa ini mungkin memang lebih sulit dipahami dan kurang user friendly, namun bahasa ini lebih optimize sehingga dalam segi ukuran maupun kecepatan akan lebih kecil dan cepat daripada Bahasa C. Hal ini disebabkan karena instruksi-instruksi yang ada dalam Bahasa C sebenarnya adalah kumpulan instruksi-instruksi Bahasa Assembly di mana instruksi tersebut biasanya dirancang dengan fungsi yang universal sehingga seringkali banyak instruksi-instruksi assembly yang belum tentu terpakai. Instruksi-instruksi inilah yang menyebabkan ukuran dan kecepatan kinerja Bahasa C akan lebih besar dan lebih rendah daripada Bahasa Assembly.

Dalam artikel kali ini Bahasa Assembly yang akan saya bahas adalah Bahasa Assembly MCS51.

Program Sumber Assembly

Merupakan program yang ditulis oleh pembuat program berupa kumpulan baris-baris perintah dan biasanya disimpan dengan extension .ASM

Program Obyek

Merupakan file hasil utama dari proses assembly berupa kode-kode yang hanya dikenali oleh mikrokontroler/mikroprosesor dan biasanya disimpan dengan extension .HEX atau .BIN

Assembly Listing

Merupakan file hasil dari proses assembly dalam rupa campuran antara kode-kode yang hanya dikenali oleh mikrokontroler/mikroprosesor, program sumber assembly beserta alamat-alamatnya

Program Assembler

Merupakan perangkat lunak yang dibutuhkan untuk meng-assembly program sumber assembly menjadi program obyek

Program Downloader

Merupakan perangkat lunak yang dibutuhkan untuk mendownload program obyek ke dalam target memori

Program Monitor

Program yang bekerja dalam mikrokontroler dan menunggu perintah ­perintah dari PC untuk keperluan:

  • Pengambilan program obyek yang didownload oleh program downloader di PC dan menyimpan ke target memori
  • Eksekusi program obyek yang telah tersimpan di target memori
  • Edit program obyek yang telah tersimpan di target memori

Kalau pada era Arduino saat ini program ini mungkin lebih dikenal dengan program bootloader yang ada di arduino namun malah memiliki fungsi yang lebih kompleks karena adanya fungsi:

  • Edit program obyek
  • Built in function yang dapat dijalankan dengan memanggil alamat-alamat tertentu
  • Display dan edit nilai-nilai register
  • Real time debugging untuk mendebug jalannya program secara realtime

Bentuk Program Sumber Assembly

Label

Digunakan untuk memberi nama sebuah lokasi memori tertentu agar mempermudah pembuat program untuk membuat loncatan atau percabangan ke memori tersebut. Syarat pembuatan label:

  • Harus diawali dengan huruf
  • Tidak diperbolehkan adanya label yang sama dalam satu program assembly
  • Maksimal 16 karakter (hal ini merupakan batasan kemampuan dari software assembly yang saya gunakan yaitu ALDS)
  • Tidak diperbolehkan adanya karakter spasi dalam label

Contoh:

Ajmp IsiMemory

Berarti program akan melompat ke alamat yang diberi label IsiMemory dan menjalankan instruksi-instruksi yang ada di sana.

Mnemonic

Biasa disebut kode operasi atau OpCode, terdiri dari dua macam:

  • Kode operasi yang dikerjakan mikrokontroler Berupa kode-kode operasi yang sudah ditentukan oleh produsen mikrokontroler/mikroprosesor seperti: MOV, ADD, MOVX dll
  • Kode operasi yang dikerjakan oleh Program Assembler Berupa kode-kode operasi yang ditentukan oleh pembuat Program Assembler (Assembler Directive) seperti: ORG, EQU, DB dll

Operand

Merupakan pelengkap dari mnemonic, namun tidak semua mnemonic memerlukan operand.

CJNE R7,#05H,Aksi1      ;memerlukan 3 operand

MOVX @DPTR,A              ;memerlukan 2 operand

RL A                                     ;memerlukan 1 operand

NOP                                     ;tidak memerlukan operand

Operand juga dapat berupa label seperti yang tampak pada instruksi baris pertama

Komentar

Bagian ini tidak harus ada, namun untuk memperjelas jalannya program bagian ini dapat dituliskan sebagai catatancatatan
yang dianggap perlu oleh pembuat program.

Sistem Pengalamatan

  • Pengalamatan Langsung

Terdiri dari:

    • Immediate Data, proses ini terjadi pada instruksi di mana nilai operand itu sendiri adalah merupakan data yang akan dipindahkan dan selalu ditandai dengan lambang #.
    • Contoh:
      • Mov  A,#05H           ;Operand kedua yang merupakan data 05H dipindah ke A
        Mov   A,#Data         ;Operand kedua yang merupakan
        data yang sebelumnya telah dideklarasikan
        dipindah ke A
    • Pengalamatan Data, proses ini terjadi pada instruksi di mana nilai operand adalah merupakan alamat dari data yang akan diisi dipindahkan atau diolah.
    • Contoh:
      • Mov     P0,A         ; berarti isi Acc A dipindah ke alamat register P0 (muncul pada I/O Port 0)
      • Mov     A,#50h     ; Isi alamat 50H dipindah ke Acc A
      • Inc    50h              ; Isi alamat 50H ditambah 1
  • Pengalamatan Tak Langsung
    • Proses pengalamatan di mana salah satu operand adalah merupakan register berisikan alamat dari data yang akan diisi atau dipindahkan
    • Pengalamatan ini menggunakan lambang @

Contoh:

Mov   @R0,A    ;Isi Acc A dipindah ke alamat yang ditunjuk oleh R0

Movx  @DPTR,A  ;Isi Acc A dipindah ke alamat yang ditunjuk oleh DPTR

  • Pengalamatan Kode

Merupakan sebuah pengalamatan di mana operand adalah merupakan alamat dari instruksi jump dan call (ACALL, AJMP, LJMP dan LCALL)

Contoh:

Start:

 ……………….

Ljmp   Start      ;Program loncat ke alamat yang
diberi oleh label start

  • Pengalamatan Bit

Proses pengalamatan yang menunjuk ke memori internal maupun
Register Fungsi Khusus yang mempunyai kemampuan bit
addressable (dapat dialamati secara bit)
Terdapat 3 macam untuk menunjuk sebuah bit address:

    • Langsung menunjuk ke alamat bit
    • Contoh:
      • Setb   67h
    • Menggunakan Operator Titik (Dot Operator)
      • Clr.   A.7    ; Clear bit ke tujuh dari Acc A
    • Menggunakan Lambang Assembler yang telah ditentukan
      • Ditentukan secara standard
      • Contoh:
        • Clr   RI
      • Ditentukan secara bebas
      • Lambang ini harus ditentukan dahulu dengan menggunakan assembler directive pada awal program
      • Contoh:
        • Switch   bit  P1.0
        • Tunggu:
          • Jb  Switch,Tunggu     ;Lompat ke label tunggu selama logika P1.0 high

Assembler Directive

  • ORG (Origin) untuk menunjukkan lokasi memori tempat instruksi tersimpan

Contoh:

Org  2000H

Mov  DPTR,#4000H   ;Instruksi ini terletak pada alamat 2000H

  • EQU (Equate) untuk menentukan lambang (symbol)

Contoh:

Bilangan  EQU 50H    ;Lambang Bilangan adalah merupakan data 50H

  • DB (Define Byte), untuk memberi nilai tertentu pada memori program

Contoh:

Tabel:

DB   50H    ;Pada alamat yang ditunjuk oleh label tabel diberi data 50H

Tabel2:

DB  ‘Delta Electronic’   ;Pada alamat yang ditunjuk oleh label tabel2 diberi data tulisan Delta Electronic dalam bentuk ASCII

  • DW (Define Word), diikuti dengan label dan berfungsi untuk memberi nilai 2 byte yang diperoleh dari alamat tempat label ini berada pada alamat instruksi ini.

Contoh:

Org 2100H

Lokasi1:

Org 3000H

DW Lokasi1 ;Alamat 3000H dan 3001H diisi dengan data 21H dan 00H

  • DS (Define String), selalu diikuti dengan angka dan berfungsi untuk menyediakan tempat sebesar angka tersebut mulai dari alamat assembler directive ini berada. Tempat yang disediakan selalu terletak pada RAM Internal

.DATA

Contoh:

Org 50H

Memori1 Ds 1 1  ;Disediakan tempat sebesar 1 byte mulai dari alamat 50H dari RAM Internal

  • .DATA, biasanya diletakkan sebelum deklarasi assembler directive DS yang menunjukkan bahwa baris-baris di bawahnya akan meng-akses ke RAM Internal
  • .CODE, menunjukkan bahwa baris-baris di bawahnya akan berupa kode-kode operasi yang akan diisikan ke dalam Memori Eksternal atau Flash PEROM

DELTA ELECTRONIC

Paulus Andi Nalwan, ST

Translate »