NPM/Kelas : 113040241/C
Assembler adalah sebuah program komputer untuk menerjemahkan Bahasa Assembly -- intinya, sebuah representasi menmonic dari bahasa mesin — menjadi kode objek. Sebuah assembler silang(lihat kompilator silang) memproduksi kode untuk satu jenis prosesor, tetapi dapat dijalankan di prosesor lain.
Selain menterjemahkan instruksi assembly mnemonic menjadi opcode, assembler juga menyediakan kemampuan untuk menggunakan nama simbolik untuk lokasi memori (menghindari penghitungan rumit dan pembaruan alamat secara manual ketika sebuah program diubah sedikit), dan fasilitas makro untuk melakukan penggantian textual — biasanya digunakan untuk menggantikan suatu urutan instruksi yang pendek untuk dijalankan perbaris dan bukan dalam sebuah subrutin.
Assembler jauh lebih mudah ditulis daripada kompilator untuk bahasa tingkat-tinggi, dan telah tersedia sejak 1950-an. Assembler modern, terutama untuk arsitektur berdasarkan RISC, seperti arsitektur MIPS, Sun SPARC, dan HP PA-RISC, mengoptimalkan penjadwalan instruksi untuk menggunakan pipeline CPU secara efisien. Bahasa pemrograman generasi kedua adalah bahasa assembly. Bahasa rakitan (bahasa Inggris: assembly language) adalah bahasa pemrograman komputer tingkat rendah. Bahasa assembly merupakan notasi untuk bahasa mesin yang dapat dibaca oleh manusia dan berbeda-beda tergantung dari arsitektur komputer yang digunakan.
Berbeda dengan bahasa pemrograman tingkat tinggi, bahasa assembly atau rakitan biasanya memiliki hubungan 1-1 dengan instruksi bahasa mesin. Misalnya, tiap julukan (mnemonic) yang ditulis di program dengan bahasa rakitan akan diterjemahkan menjadi tepat satu kode operasi yang dapat dimengerti langsung oleh komputer. Pada bahasa tingkat tinggi, satu perintah dapat diterjemahkan menjadi beberapa kode operasi dalam bahasa mesin. Proses pengubahan bahasa rakitan ke bahasa mesin dilakukan oleh assembler, dan proses balikannya dilakukan oleh disassembler.
Setiap arsitektur komputer memiliki bahasa mesin yang berbeda-beda sehingga bahasa rakitannya pun berbeda-beda.(dna)
Pemrograman AT89S51 bahasa Assembly
Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang pertama adalah bahasa pemrograman tingkat tinggi (high level language) dan jenis yang kedua adalah bahasa pemrograman tingkat rendah (low level language).
Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia yaitu bagaimana agar pernyataan-pernyataan yang ada dalam program mudah ditulis dan dimengerti oleh manusia. Sedangkan bahasa tingkat rendah lebih berorientasi ke mesin, yaitu bagaimana agar komputer dapat langsung mengintepretasikan pernyataan-pernyataan program.
Kelebihan Bahasa Assembly:
1. Ketika di-compile lebih kecil ukuran
2. Lebih efisien/hemat memori
3. Lebih cepat dieksekusi
Kesulitan Bahasa Assembly:
1. Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi
2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak
3. Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis
BAHASA ASSEMBLY MCS-51
Dalam program bahasa assembly terdapat 2 jenis yang kita tulis dalam program yaitu:
1. Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program)
2. Instruksi (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler)
Klik disini untuk melihat daftar Assembly Directive dan Instruksi MCS-51.
PENGGUNAAN SOFTWARE
Software untuk membantu memprogram mikrokontroler MCS-51 sudah banyak tersedia. Untuk mempermudah maka dapat dipilih software yang merupakan Integrated Development Environment (IDE) yaitu software yang merupakan editor sekaligus compiler. Bahkan juga ada yang sekaligus debugger dan simulator. Salah satunya yang digunakan pada training di PRASIMAX adalah Read51.
Daftar Assembly Directive
Assembly Directive Keterangan
EQU Pendefinisian konstanta
DB Pendefinisian data dengan ukuran satuan 1 byte
DW Pendefinisian data dengan ukuran satuan 1 word
DBIT Pendefinisian data dengan ukuran satuan 1 bit
DS Pemesanan tempat penyimpanan data di RAM
ORG Inisialisasi alamat mulai program
END Penanda akhir program
CSEG Penanda penempatan di code segment
XSEG Penanda penempatan di external data segment
DSEG Penanda penempatan di internal direct data segment
ISEG Penanda penempatan di internal indirect data segment
BSEG Penanda penempatan di bit data segment
CODE Penanda mulai pendefinisian program
XDATA Pendefinisian external data
DATA Pendefinisian internal direct data
IDATA Pendefinisian internal indirect data
BIT Pendefinisian data bit
#INCLUDE Mengikutsertakan file program lain
Daftar Instruksi
Instruksi Keterangan Singkatan
ACALL Absolute Call
ADD Add
ADDC Add with Carry
AJMP Absolute Jump
ANL AND Logic
CJNE Compare and Jump if Not Equal
CLR Clear
CPL Complement
DA Decimal Adjust
DEC Decrement
DIV Divide
DJNZ Decrement and Jump if Not Zero
INC Increment
JB Jump if Bit Set
JBC Jump if Bit Set and Clear Bit
JC Jump if Carry Set
JMP Jump to Address
JNB Jump if Not Bit Set
JNC Jump if Carry Not Set
JNZ Jump if Accumulator Not Zero
JZ Jump if Accumulator Zero
LCALL Long Call
LJMP Long Jump
MOV Move from Memory
MOVC Move from Code Memory
MOVX Move from Extended Memory
MUL Multiply
NOP No Operation
ORL OR Logic
POP Pop Value From Stack
PUSH Push Value Onto Stack
RET Return From Subroutine
RETI Return From Interrupt
RL Rotate Left
RLC Rotate Left through Carry
RR Rotate Right
RRC Rotate Right through Carry
SETB Set Bit
SJMP Short Jump
Untuk membandingkan bahasa mesin dan bahasa assembly, kita dapat melihatnya dari tiga karakteristik berikut :Setiap arsitektur komputer memiliki bahasa mesin yang berbeda-beda sehingga bahasa rakitannya pun berbeda-beda.(dna)
Pemrograman AT89S51 bahasa Assembly
Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang pertama adalah bahasa pemrograman tingkat tinggi (high level language) dan jenis yang kedua adalah bahasa pemrograman tingkat rendah (low level language).
Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia yaitu bagaimana agar pernyataan-pernyataan yang ada dalam program mudah ditulis dan dimengerti oleh manusia. Sedangkan bahasa tingkat rendah lebih berorientasi ke mesin, yaitu bagaimana agar komputer dapat langsung mengintepretasikan pernyataan-pernyataan program.
Kelebihan Bahasa Assembly:
1. Ketika di-compile lebih kecil ukuran
2. Lebih efisien/hemat memori
3. Lebih cepat dieksekusi
Kesulitan Bahasa Assembly:
1. Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi
2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak
3. Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis
BAHASA ASSEMBLY MCS-51
Dalam program bahasa assembly terdapat 2 jenis yang kita tulis dalam program yaitu:
1. Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program)
2. Instruksi (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler)
Klik disini untuk melihat daftar Assembly Directive dan Instruksi MCS-51.
PENGGUNAAN SOFTWARE
Software untuk membantu memprogram mikrokontroler MCS-51 sudah banyak tersedia. Untuk mempermudah maka dapat dipilih software yang merupakan Integrated Development Environment (IDE) yaitu software yang merupakan editor sekaligus compiler. Bahkan juga ada yang sekaligus debugger dan simulator. Salah satunya yang digunakan pada training di PRASIMAX adalah Read51.
Daftar Assembly Directive
Assembly Directive Keterangan
EQU Pendefinisian konstanta
DB Pendefinisian data dengan ukuran satuan 1 byte
DW Pendefinisian data dengan ukuran satuan 1 word
DBIT Pendefinisian data dengan ukuran satuan 1 bit
DS Pemesanan tempat penyimpanan data di RAM
ORG Inisialisasi alamat mulai program
END Penanda akhir program
CSEG Penanda penempatan di code segment
XSEG Penanda penempatan di external data segment
DSEG Penanda penempatan di internal direct data segment
ISEG Penanda penempatan di internal indirect data segment
BSEG Penanda penempatan di bit data segment
CODE Penanda mulai pendefinisian program
XDATA Pendefinisian external data
DATA Pendefinisian internal direct data
IDATA Pendefinisian internal indirect data
BIT Pendefinisian data bit
#INCLUDE Mengikutsertakan file program lain
Daftar Instruksi
Instruksi Keterangan Singkatan
ACALL Absolute Call
ADD Add
ADDC Add with Carry
AJMP Absolute Jump
ANL AND Logic
CJNE Compare and Jump if Not Equal
CLR Clear
CPL Complement
DA Decimal Adjust
DEC Decrement
DIV Divide
DJNZ Decrement and Jump if Not Zero
INC Increment
JB Jump if Bit Set
JBC Jump if Bit Set and Clear Bit
JC Jump if Carry Set
JMP Jump to Address
JNB Jump if Not Bit Set
JNC Jump if Carry Not Set
JNZ Jump if Accumulator Not Zero
JZ Jump if Accumulator Zero
LCALL Long Call
LJMP Long Jump
MOV Move from Memory
MOVC Move from Code Memory
MOVX Move from Extended Memory
MUL Multiply
NOP No Operation
ORL OR Logic
POP Pop Value From Stack
PUSH Push Value Onto Stack
RET Return From Subroutine
RETI Return From Interrupt
RL Rotate Left
RLC Rotate Left through Carry
RR Rotate Right
RRC Rotate Right through Carry
SETB Set Bit
SJMP Short Jump
1. Mnemonic operation code. Sebagai pengganti numeric operation code (opcodes) yang digunakan pada bahasa mesin, digunakankanlah mnemonic code pada bahasa assembly. Selain kemudahan dalam penulisannya dibandingkan dari bahasa mesin juga mendukung pelacakan kesalahan seperti kesalahan penulisan operation code.
2. Symbolic operand specification. Penamaan simbol diasosiasikan sebagai suatu data atau instruksi. Operand lebih menunjukkan symbolic reference dibandingkan dengan alamat mesin suatu data atau instruksi. Hal ini akan mempermudah pada saat harus dilakukan modifikasi program.
3. Declaration of data/storage area. Data dapat dinyatakan dalam notasi desimal. Ini dilakukan untuk mencegah konversi secara manual dari konstanta ke dalam representasi internal mesin. Sebagai contoh :
-5 menjadi (11111010)2 atau 10.5 menjadi (41A80000)16
Suatu statement bahasa assembly mempunyai bentuk umum sebagai berikut :
[Label] Menmonic OpCode Operand [operand…]
Tanda kurung siku menunjukkan isi di dalamnya boleh digunakan atau tidak dalam statement tersebut, sebagai contoh : label bersifat optional. Jika label digunakan, hal tersebut menujukkan suatu symbolic name akan dibuat dalam machine word untuk keperluan assembly statement. Bila digunakan lebih dari satu operand, digunakan tanda “koma” untuk memisahkannya. Jika digunakan index, nomor index register ditunjukan dalam sebuah simbol, seperti contoh berikut :
AGAIN LOAD NUMBER(4)
Dimana ‘4’ menunjukkan register yang memiliki index. AGAIN diasosiasikan dengan instruksi mesin yang dihasilkan untuk statement LOAD.
Program assembly mengenal tiga jenis statement : (i) imperative statement (ii) declarative statement (iii) assembler directive statement.
Imperative Statement
Statement imperative dalam bahasa assembly ditunjukan dengan suatu tindakan yang dikerjakan selama eksekusi program assembly. Karena itu setiap statement imperative ditranslasikan ke dalam instruksi mesin.
Declarative Statement
Statement declarative dalam bahasa assembly menunjukkan konstanta atau storage area pada suatu program. Sebagai contoh :
A DS 1
secara sederhana storage area sebesar 1 word ditunjukkan dengan sebuah label A. DS di sini menunjukkan Declare Storage (DS).
Suatu konstanta dideklarasikan melalui Declare Constant (DC) statement, contohnya :
ONE DC ‘1’
maksud dari statement di atas adalah label ONE berisi konstanta 1. Programmer dapat mendeklarasikan kontanta dalam desimal, binary, hexadesimal, dsb. Assembler akan mengkonversi bentuk tersebut ke dalam bentuk internal yang tepat.
Beberapa assembler sering pula menggunakan’literal’ khususnya pada konstanta yang dipakai sebagai operand, seperti contoh berikut :
Pemrograman Sistem 2
Assembler
ADD ONE ADD = ‘1’
- -
- -
ONE DC ‘1’
Penggunaan tanda “=” pada posisi awal suatu operand menunjukkan sebuah literal. Nilai konstanta yang ditulis dengan cara demikian sama dengan nilai yang dihasilkan bila menggunakan statement DC.
Assembler Directive
Statement jenis ini tidak merepresentasikan instruksi mesin ke dalm suatu objek program atau mengalokasikan storage untuk konstanta atau variable program. Sebaliknya, statement ini secara langsung mengarahkan assembler untukmengambil alih aksi selama proses assembling program. Statement ini digunakan untuk menunjukkan bagaimana input program assembly dibentuk, sebagi contoh : START 100
statement tersebut merupakan kata pertama dari objek program yang dibuat oleh assembler untuk menempatkan lokasi mesin pada alamat ‘100’. Begitupula dengan statement : END, yang mengindikasikan tidak ada lagi bahasa statement bahasa assembly yang akan diproses.
Proses Assembly
Untik membangun skema proses translasi dari satu bahasa ke bentuk lainnya, hal pertama yang harus dilakukan adalah mengindentifikasikan tugas-tugas dasar yang harus dikerjakannya dalam proses translasi tersebut.
Proses Translasi
Secara umum model proses translasi dapat direpresentasikan sebagai berikut :
Analysis of + Synthesis of = Translation from
Source Text Target Text Source Text to Target Text
Model di atas diterapkan untuk mentranslasikan dari sautu bahasa pemrograman ke bentuk lain, translasi dari satu bahasa natural (Inggris, Perancis) ke bentuk coding / decoding pesan rahasia. Untuk mengaplikasikan model di atas, kita perlu menentukan komponen-komponen yang dibutuhkan selama proses analisis dan sintesis.
Dalam fase analisis, focus perhatian kita adalah kepada penentuan arti dari source text. Untuk memahami arti dari source text tersebut, kita mengetahui aturan yang membentuk source text tersebut. Dalam aturan struktur tatabahasa (grammar), dikenal istilah syntax dan semantic. Perhatikan statement berikut :
AGAIN LOAD RESULT + 4
Dalam statement di atas, AGAIN menunjukkan label field, LOAD menunjukkan opcode mnemonic field dan RESULT + 4 menunjukkan operand field. Bila kita melihat lebih dalam lagi ke dalam operand field, kita dapat menukan bahwa RESULT + 4 adalah expression operand yang valid dan sesuai dengan aturan bahasa. Dalam bahasa assembly, aturan penulisan suatu statement sangat sederhana. Pembahasan mengenai tata bahasa akan dilanjutkan pada materi-materi berikutnya.
Dalam fase sintesis, dilakukan pemilihan machine operation code yang sesuai dengan mnemonic LOAD dan menempatkannya pada machine instruction opcode field. Evaluasi korespondensi pengalamatan dilakukan untuk operand expression ’RESULT + 4’ dan menempatkannya pada alamat dari machine instruction.