ASSALAMUALAIKUM WR.WB
HELLO ,,Sobat kali ini saya ingin
memberikan sedikit pengetahuan saya tentang ASSEMBLY
Sesuai dengan pelajaran di sekolah
saya ingin coba sharing pada kalian semua mudah-mudahan dapat dimengerti dan
bermanfaat,,aminnn
Sebelum kita membahas langsung
tentang assembly kita harus tahu dulu apa yang dimaksud dengan assembly itu
sendiri
ð
PENGENALAN ASSEMBLY
Apakah
bahasa assembly?
Bahasa
assembly adalah bahasa pemrograman dengan korespondensi satu-satu antara
perintah-perintah/pernyataannya dan bahasa mesin komputer. Bahasa assembly
tidak satu jenis sebagaimana CPU
komputer pun bermacam-macam. Setiap bahasa assembly secara langsung dipengaruhi
oleh set instruksi mesin komputer dan arsitektur perangkat keras.
ð Register
Register
merupakan lingkungan kerja khusus dalam CPU, dirancang untuk diakses pada
kecepatan tinggi. Dalam melakukan pekerjaannya, CPU selalu menggunakan register
sebagai perantaranya, jadi register dapat diibaratkan sebagai kaki tangannya
mikroprosesor. Jenis – jenis register :
a.
General purpose (Register data)
Yang termasuk kedalam register adalah AX, BX, CX, dan DX yang
masing – masing terdiri atas 16 bit. Register – register ini dapat dipisah
menjadi 2 bagian dimana masing – masing bagian terdiri atas 8 bit, yaitu AH,
AL, BH, BL, CH, CL, DH, DL.
+ A X
+ + B X + + C X +
+ D X +
+-+--+--+-+
+-+--+--+-+ +-+--+--+-+ +-+--+--+-+
| AH | AL
| | BH | BL | | CH | CL | | DH | DL |
+----+----+
+----+----+ +----+----+ +----+----+
Secara umum register-register dalam kelompok ini
dapat digunakan untuk berbagai keperluan, walaupun demikian ada pula penggunaan
khusus dari masingmasing register ini yaitu :
Register AX,
secara khusus digunakan pada operasi aritmatika terutama dalam operasi
pembagian dan pengurangan.
Register BX, biasanya digunakan untuk menunjukkan suatu alamat
offset dari suatu segmen.
Register CX,
digunakan secara khusus pada operasi looping dimana register ini menentukan
berapa banyaknya looping yang akan terjadi.
Register DX,
digunakan untuk menampung sisa hasil pembagian 16 bit.
b.
Segmen register
Register yang termasuk kedalam register ini adalah CS, DS, ES, SS
c.
Index dan pointer register
Register yang termasuk kedalam register ini adalah IP, SP, SI, DI, BP
d.
Flag register
Register ini merupakan register 16 bit untuk menunjukkan kondisi
dari suatu keadaan dari hasil suatu operasi.
|
15
|
14
|
13
|
12
|
11
|
10
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
|
|
X
|
x
|
x
|
x
|
O
|
D
|
I
|
T
|
S
|
Z
|
X
|
A
|
x
|
P
|
x
|
C
|
|
O
: Overflow
D
: Direction
I
: Interupt
T
: Trap
S
: Sign
Z
: Zero
A
: Auxiliary
P
: Parity
C
: Carry
x
: tidak terdefinisi
ð Sintaks Bahasa Assembly
Statement
Statement
terdiri dari paling banyak empay buah field yaitu :
NAME OPERATION OPERAND COMMENT
Contoh
:
Mulai: Mov cx, 5
ORG
100h
Inc
AX ; AX= AX+1
ð Data
Data
yang di gunakan dalam bahasa assembly :
1.
Data Biner, penulisan data biner harus
diakhiri dengan huruf B.
Contoh : 01101011B
2.
Data Heksadesimal, penulisan data
heksadesimal harus diakhiri dengan huruf H, bila data tersebut diawali dengan
karakter A, B, C, D, E, F maka harus disisipkan angka 0 didepan data tersebut.
Contoh : 43AFH 0B45H
3.
Data Desimal, penulisan data decimal dapat
diakhiri dengan huruf D atau tidak diberi tanda sama sekali.
Contoh : 68D 68
4.
Data Karakter, penulisan data karakter
(string) harus diapit oleh tanda petik ganda atau tanda petik tunggal.
Contoh : “TEKNIK” atau ‘TEKNIK’
ð Variabel
Setiap
variabel mempunyai tipe data dan oleh program ditetapkan alamat memorinya.
|
Pseudo-op
|
Arti |
|
DB
|
Penetapan byte
|
|
DW
|
Penetapan word
|
|
DD
|
Penetapan doubleword (dua word berurutan)
|
|
DQ
|
Penetapan quadword (empat word berurutan)
|
|
DT
|
Penetapan tenword (sepuluh word berurutan)
|
Contoh
:
Alpha
db 4 ; 1 Byte nilai Awal 4 dengan
Variable bernama Alpha
Bait
db ? ; 1 word tidak diketahui isinya Dengan variable bernama Bait
Wrd
dw –2 ; 1 word nilai awal 0FFFE H
Array_data
db 10h, 20h, 30h ; variable “Array_data” berukuran 3 byte dengan 3 elemen data
B DB
4,4,4,2,? ; 1*5 byte, nilai awal=4,4,4,2,? Dengan variable
bernama B
C DB 4
DUP(5) ; 1*4 byte,
nilai awal='5' Dengan variable bernama C
D DB 'TEKKOM' ; 6 byte berisi 6 karakter
Dengan variable bernama D
E DW ? ; 1 word tidak
diketahui isinya Dengan variable bernama E
F DW
?,?,? ; 3
word tidak diketahui isinya Dengan variable bernama F
G DW 10
DUP(?) ;10 word tidak
diketahui isinya Dengan variable bernama G
H DD ? ; 1 DoubleWord
tanpa nilai awal Dengan variable bernama H
I DF
?,? ; 2
FarWord tanpa nilai awal Dengan variable bernama I
J DQ
0A12h ; 1 QuadWord, nilai awal='0A12'
Dengan variable bernama J
K DT
25*80 ; 1
TenBytes, nilai awal='2000' Dengan variable bernama K
L EQU
666 ; Konstanta, L=666 Dengan variable
bernama L
M DB
'123' ; String
'123' Dengan variable bernama M
N DB
'1','2','3' ;
String '123' Dengan variable bernama N
ð Instruksi Dasar
ORG 100H
Pada
program COM perintah ini akan selalu digunakan. Perintah ini digunakan untuk
memberitahukan assembler supaya program pada saat dijalankan (diload ke memory)
ditaruh mulai pada offset ke 100h(256) byte. Dapat dikatakan juga bahwa kita
menyediakan 100h byte kosong pada saat program dijalankan. 100h byte kosong ini
nantinya akan ditempati oleh PSP(Program Segment Prefix) dari program tersebut.
PSP ini digunakan oleh DOS untuk mengontrol jalannya program tersebut.
ð JMP
Perintah
JMP(JUMP) ini digunakan untuk melompat menuju tempat yang ditunjukkan oleh
perintah JUMP. Adapun syntaxnya adalah:
ð JUMP Tujuan .
Dimana
tujuannya dapat berupa label seperti yang digunakan pada bagan diatas.
Mengenai perintah JUMP ini akan kita bahas lebih lanjut nantinya. Perintah JUMP yang digunakan pada bagan diatas
dimaksudkan agar melewati tempat data program, karena jika tidak ada perintah
JUMP ini maka data program akan ikut dieksekusi sehingga kemungkinan besar akan
menyebabkan program anda menjadi Hang.
MOV
Instruksi ini digunakan untuk mentransfer data antara register, antara register dengan lokasi memori atau
mentransfer secara langsung suatu bilangan ke register atau lokasi memori.
Sintaks : MOV tujuan, sumber
XCHG
Instruksi XCHG (exchange) digunakan untuk mempertukarkan isi
dua register, atau antara register dan lokasi memori.
Sintaks : XCHG tujuan, sumber
ADD, SUB, INC, dan DEC
Instruksi ADD dan SUB
digunakan untuk menjumlahkan dan mengurangkan isi dua buah register dan suatu
lokasi memori, atau menjumlahkan dan mengurangkan suatu bilangan ke/dari
register atau lokasi memori. Sintaksnya sbb:
ADD
tujuan, sumber
SUB
tujuan, sumber
Instruksi INC (increment)
digunakan untuk menambahkan 1 ke register atau lokasi memori, sedangkan DEC (decrement)
digunakan untuk mengurangi 1 isi register atau lokasi memori. Sintaksnya :
INC tujuan
DEC tujuan
NEG
Instruksi NEG digunakan
untuk membalik isi target yang dituju (dapat berupa register atau lokasi
memori). NEG
sebenarnya melakukan fungsi komplemen-2. Sintaksnya sbb:
NEG tujuan
INT 21H
Bila
dihasilkan interupsi 21h apa yang akan dikerjakan oleh komputer ?. Jawabnya,
ada banyak sekali kemungkinan. Pada saat terjadi interupsi 21h maka
pertama-tama yang dilakukan komputer adalah melihat isi atau nilai apa
yang terdapat pada register AH. Misalkan
bila nilai AH adalah 2 maka komputer akan mencetak sebuah karakter, berdasarkan
kode ASCII yang terdapat pada register DL. Bila nilai pada register AH bukanlah
2, pada saat dilakukan interupsi 21h maka yang dikerjakaan oleh komputer akan
lain lagi. Dengan demikian kita bisa mencetak sebuah karakter yang diinginkan
dengan meletakkan angka 2 pada register AH dan meletakkan kode ASCII dari
karakter yang ingin dicetak pada register DL sebelum menghasilkan interupsi
INT 21h
Contoh
:
ORG 100h
Proses :
MOV AH,02h ; Nilai servis ntuk mencetak karakter
MOV DL,'A' ; DL =
Karakter ASCII yang akan dicetak
INT 21h ; Cetak karakter !!
RET
END.
ð Insruksi Input dan Output
Single-key
input
Input: AH = 1
Output: AL = Kode ASCII jika tombol karakter
ditekan
ð Display a character or execute a control function
Input: AH = 2
DL = Kode ASCII dari karakter tampilan atau
karakter kontrol
Output: AL = Kode ASCII dari karakter
tampilan atau
karakter kontrol
= 0 jika tombol
non-karakter yang ditekan
ð MENCETAK BEBERAPA KARAKTER
Untuk mencetak beberapa karakter, bisa
anda gunakan proses looping. Sebagai contoh dari penggunaan looping ini bisa
dilihat pada program di bawah ini :
ORG 100h
Proses :
MOV AH,02h ; Nilai servis
MOV DL,'A' ; DL=karakter 'A' atau DL=41h
MOV CX,10h ; Banyaknya pengulangan yang akan
Ulang :
INT 21h ; Cetak karakter !!
INC DL ; Tambah DL
dengan 1
LOOP Ulang ; Lompat ke Ulang
RET
END
Perintah
INC DL akan menambah register DL dengan
1, seperti intruksi , DL:=DL+1 dalam Pascal.
ð Pengalamatan Tidak Langsung
Pengalamatan
register tak langsung, memungkinkan data dialamatkan pada lokasi memori melalui
alamat offset yang ditunjukkan oleh register berikut ini : BP, BX, DI, SI.
Symbol
[ ] menjelaskan pengalamatan tidak langsung dalam bahasa rakitan, sebagai
contoh jika register BX berisi 1000H
maka instruksi MOV AX,[BX] akan menyebabkan isi segmen data yang berukuran word
pada alamat yang ditunjukkan oleh nilai di register BX yakni alamat 1000H akan
disalinkan ke register AX.
Contoh
pengalamatan register Tak langsung :
|
Instruksi
|
Ukuran
|
Operasi
|
|
MOV CX,[BX]
|
16-Bit
|
Menyalin isi word lokasi memori segmen
data yang dialamatkan oleh BX ke register CX
|
|
MOV [BP],DL
|
8-Bit
|
Menyalin DL ke lokasi memori segmen stack
yang dialamatkan BP
|
|
MOV [DI],BH
|
8-bit
|
Menyalin BH ke lokasi segmen data yang
dialamatkan oleh DI
|
Array (Larik)
Array
dapat dilihat sebagai rentetan nilai atau karakter dalam suatu variable index.
Array dapat memuat seluruh elemen yang termasuk dalam kode ASCII dengan range
nilai (0..255). berikut contoh penerapannya dalam bahasa assembler.
a DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h
b DB 'Hello', 0
b DB 'Hello', 0

Array
dapat diakses dengan menggunakan tanda kurung persegi seperti di bawah ini :
MOV AL, a[3]
Array
juga dapat diakses dengan menggunakan register indeks, sperti : BX, SI, DI, BP, berikut contohnya :
MOV SI, 3
MOV AL, a[SI]
MOV AL, a[SI]
Apabila anda ingin mendeklarasikan
sebuah array berukuran besar, maka syntax DUP dapat digunakan dengan
format VAR number
DUP ( value(s) , berikut contoh penggunannya :
VAR : nama variable array
Number : jumlah duplikasi nilai
yang akan dideklarasikan
Value(s) :ekspresi atau nilai yang akan diduplikasikan
c DB 5 DUP(9)
akan sama dengan c DB 9, 9, 9, 9, 9
d DB 5 DUP(1, 2)
akan sama dengan d DB 1, 2, 1, 2, 1, 2, 1, 2, 1, 2
berikut ialah contoh program untuk mengisi nilai pada 50 lokasi array
secara looping, yakni :
TEKKOM DW 50 DUP (?)
ORG 100H
MOV AX,0
MOV DX,AX
MOV SI,OFFSET TEKKOM
MOV CX,50
ULANG:
INC DX
MOV AX,DX
MOV TEKKOM[SI],AX
INC SI
LOOP ULANG
INT 20H
END
Program diatas akan mengisikan 50 elemen array variable TEKKOM dengan
nilai dibawah ini
2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60,
62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100
MOV AH, 02H
MOV DL, BL
INT 21H
EXIT: RET
KAL1 DB 13,10, ‘INPUT HURUF BESAR
(A s/d Z) : $’
KAL2 DB 13,10, ‘OUTPUT : $’
Nah itu
saja yang mungkin dapat saya sharingkan mudah-mudahan bisa menjadikan bahan
pelajaran untuk sobat-sobat semua
MOHON MAAF
BILA ADA PENULISAN YANG TIDAK DI MENGERTI,
WASSALAMUALAIKUM WR.WB
mantab banget gan
BalasHapusSolder portable