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.
KEGUNAAN BAHASA
ASSEMBLY
Fungsi bahasa
pemrograman yaitu memerintah komputer untuk mengolah data sesuai dengan alur
berpikir yang kita inginkan. Keluaran dari bahasa pemrograman tersebut berupa
program/aplikasi. Contohnya adalah program yang digunakan oleh kasir di mal-mal
atau swalayan, penggunaan lampu lalu lintas di jalan raya, dll.
Bahasa Pemrograman
yang kita kenal ada banyak sekali di belahan dunia, tentang ilmu komputer dan
teknologi dewasa ini. Perkembangannya mengikuti tingginya inovasi yang
dilakukan dalam dunia teknologi. Contoh bahasa pemrograman yang kita kenal
antara lain adalah untuk membuat aplikasi game, antivirus, web, dan teknologi
lainnya.
Bahasa pemrograman
komputer yang kita kenal antara lain adalah Java, Visual Basic, C++, C, Cobol,
PHP, .Net, dan ratusan bahasa lainnya. Namun tentu saja kebutuhan bahasa ini
harus disesuaikan dengan fungsi dan perangkat yang menggunakannya.
Secara umum bahasa pemrograman terbagi
menjadi 4 kelompok, yaitu :
·
Object Oriented Language (Visual dBase, Visual FoxPro, Delphi, Visual C)
·
High Level Language (seperti Pascal dan Basic)
·
Middle Level Language (seperti bahasa C), dan
·
Low Level Language (seperti bahasa Assembly)
CONTOH BAHASA ASSEMBLY
Berikut ini contoh program menggunakan Bahasa Assembly
.MODEL SMALL
.CODE
ORG 100H
AWAL:
MOV CL,30H
JMP PROSES
KAL0 DB 'Ketikkan satu kalimat:$'
KAL1 DB 13,10,'Kalimat yang diinput adalah:$'
KAL2 DB 13,10,'Cetak dari belakang:$',13,10
KAL3 DB 13,10,'panjang string adalah:$'
KALX DB 13,10,'$'
KAL4 DB 13,10,'Jumlah Huruf Vokal:$'
KAL5 DB 13,10,'Jumlah Huruf Konsonan:$'
KATA DB 20,?,20 DUP (?)
VOKAL: INC CL
JMP PLUS
PROSES:
;============= CETAK STRING ================
MOV AH,09H
MOV DX,OFFSET KAL0
INT 21H
;============= INPUT STRING ================
MOV AH,0AH
LEA DX,KATA
INT 21H
;============= CETAK STRING ================
MOV AH,09H
MOV DX,OFFSET KAL1
INT 21H
;============ CETAK VARIABEL STRING DG MODEL COMPARASI ==========
MOV BX,OFFSET KATA+2
CETAK:
MOV DL,[BX]
CMP DL,0DH
JE BELAKANG
MOV AH,02H
INT 21H
CMP DL,'a'
JE VOKAL
CMP DL,'i'
JE VOKAL
CMP DL,'u'
JE VOKAL
CMP DL,'e'
JE VOKAL
CMP DL,'o'
JE VOKAL
CMP DL,'A'
JE VOKAL
CMP DL,'I'
JE VOKAL
CMP DL,'U'
JE VOKAL
CMP DL,'E'
JE VOKAL
CMP DL,'O'
JE VOKAL
PLUS:INC BX
JMP CETAK
;============= CETAK KATA DARI BELAKANG ==================
BELAKANG:MOV AH,09H
MOV DX,OFFSET KAL2
INT 21H
MOV AH,09H
MOV DX,OFFSET KALX
INT 21H
CETAK1:
MOV DL,[BX]
CMP DL,KATA+1
JE VOKAL1
MOV AH,02H
INT 21H
DEC BX
JMP CETAK1
;============ CETAK JUMLAH VOKAL ================
VOKAL1:
MOV AH,09H
MOV DX,OFFSET KAL4
INT 21H
MOV DL,CL
;ADD DL,30H
MOV AH,02H
INT 21H
;============ CETAK JUMLAH KONSONAN ===============
KONSONAN:
MOV AH,09H
MOV DX,OFFSET KAL5
INT 21H
MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
SUB DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
;============= CETAK PANJANG STRING ================
AKHIR:
MOV AH,09H
MOV DX,OFFSET KAL3
INT 21H
MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
MOV AH,02H
INT 21H
SELESAI:
INT 20H
END AWAL
.CODE
ORG 100H
AWAL:
MOV CL,30H
JMP PROSES
KAL0 DB 'Ketikkan satu kalimat:$'
KAL1 DB 13,10,'Kalimat yang diinput adalah:$'
KAL2 DB 13,10,'Cetak dari belakang:$',13,10
KAL3 DB 13,10,'panjang string adalah:$'
KALX DB 13,10,'$'
KAL4 DB 13,10,'Jumlah Huruf Vokal:$'
KAL5 DB 13,10,'Jumlah Huruf Konsonan:$'
KATA DB 20,?,20 DUP (?)
VOKAL: INC CL
JMP PLUS
PROSES:
;============= CETAK STRING ================
MOV AH,09H
MOV DX,OFFSET KAL0
INT 21H
;============= INPUT STRING ================
MOV AH,0AH
LEA DX,KATA
INT 21H
;============= CETAK STRING ================
MOV AH,09H
MOV DX,OFFSET KAL1
INT 21H
;============ CETAK VARIABEL STRING DG MODEL COMPARASI ==========
MOV BX,OFFSET KATA+2
CETAK:
MOV DL,[BX]
CMP DL,0DH
JE BELAKANG
MOV AH,02H
INT 21H
CMP DL,'a'
JE VOKAL
CMP DL,'i'
JE VOKAL
CMP DL,'u'
JE VOKAL
CMP DL,'e'
JE VOKAL
CMP DL,'o'
JE VOKAL
CMP DL,'A'
JE VOKAL
CMP DL,'I'
JE VOKAL
CMP DL,'U'
JE VOKAL
CMP DL,'E'
JE VOKAL
CMP DL,'O'
JE VOKAL
PLUS:INC BX
JMP CETAK
;============= CETAK KATA DARI BELAKANG ==================
BELAKANG:MOV AH,09H
MOV DX,OFFSET KAL2
INT 21H
MOV AH,09H
MOV DX,OFFSET KALX
INT 21H
CETAK1:
MOV DL,[BX]
CMP DL,KATA+1
JE VOKAL1
MOV AH,02H
INT 21H
DEC BX
JMP CETAK1
;============ CETAK JUMLAH VOKAL ================
VOKAL1:
MOV AH,09H
MOV DX,OFFSET KAL4
INT 21H
MOV DL,CL
;ADD DL,30H
MOV AH,02H
INT 21H
;============ CETAK JUMLAH KONSONAN ===============
KONSONAN:
MOV AH,09H
MOV DX,OFFSET KAL5
INT 21H
MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
SUB DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
;============= CETAK PANJANG STRING ================
AKHIR:
MOV AH,09H
MOV DX,OFFSET KAL3
INT 21H
MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
MOV AH,02H
INT 21H
SELESAI:
INT 20H
END AWAL