Assembly
1. Apakah Sebenarnya Bahasa Assembly itu?
-------------------------------------------
Bahasa Assembly (Assembler) adalah merupakan salah satu dari sekian banyak bahasa pemrograman yang tergolong dalam Bahasa Pemrogaman Tingkat Rendah (Low Level Language) dan hanya setingkat diatas bahasa mesin (Machine Language).
2. Mengapa Assembly?
----------------------
Assembly memiliki kelebihan yang tidak dapat digantikan oleh bahasa pemrogaman manapun. Diantaranya adalah :
- Hasil program memiliki tingkat kecepatan yang tinggi.
- Ukuran dari program kecil.
- Sangat mudah untuk mengakses Sistem Komputer.
3. Apakah Segment dan Offset itu?
-----------------------------------
Segment dan Offset merupakan suatu angka 16 bit (direpresntasikan dalam bilangan hexa) yang menunjukkan suatu alamat tertentu di memory komputer. Pasangan segment : offset ini disebut juga alamat relatif. Selain alamat relatif, terdapat juga alamat mutlak berupa angka 20 bit (juga direpresentasikan dalam bilangan hexa). Alamat mutlak ini dapat dihitung dengan mengalikan segment dengan 10 hexa dan ditambahkan dengan offset.
Contoh : segment : offset
0100 : 1234
Alamat relatifnya adalah : 02234
4. Apakah Interrupt itu?
--------------------------
Interrupt adalah permintaan kepada microprocessor untuk melakukan suatu perintah. Ketika terjadi permintaan interupsi, microprocessor akan mengeksekusi interrupt handler , yaitu suatu program yang melayani interupsi. Setitap interrupt handler itu memiliki alamat masing - masing yang disimpan dalam bentuk array yang masing - masing terdiri dari 4 byte (2 offset dan 2 segment). Array ini disebut vektor interupsi . Vektor interupsi ini disusun berdasarkan nomor interupsi yaitu dari hexa. Selain itu, dikenal juga istilah service dan subservice, maksudnya adalah bahwa setiap interrupt itu dibagi menjadi beberapa bagian yang mempunyai tugas masing - masing. Tetapi ada juga interrupt yang tidak memiliki service, contohnya int 29.
5. Apakah Register itu?
-------------------------
Register adalah merupakan sebagian memory dari microprocessor yang neniliki kecepatan sangat tinggi. Dapat juga dianalogikan bahwa register merupakan kaki tangan dari microprocessor.
Register dibagi menjadi lima bagian besar yaitu :
1. Segment Register (16 bit)
Register untuk menunjukkan alamat dari suatu segment. Yang termasuk register segment :
. CS (Code Segment)
Menunjukkan alamat segment dari program yang sedang aktif.
. DS (Data Segment)
Menunjukkan alamat segment dari data program (variabel).
. SS (Stack Segment)
Menunjukkan alamat segment dari stack yang digunakan program.
. ES (Extra Segment)
Merupakan register segment cadangan.
2. Pointer dan Index Register (16 bit) Register untuk menunjukkan alamat dari suatu offset.
Yang termasuk register pointer dan index :
. SP (Stack Pointer)
Berpasangan dengan SS (SS : SP).
. BP (Base Pointer)
Berpasangan dengan SS (SS : BP).
. DI (Destination Index)
Berpasangan dengan ES (ES : DI). Dipakai untuk operasi string.
. SI (Source Index)
Berpasangna dengan DS (DS : SI). Dipakai untuk operasi string.
3. General Purpose Register (16 bit)
Register ini dapat digunakan untuk berbagai keperluan, tetapi masing - masing juga memiliki fungsi khusus. Jenis register ini memiliki ciri khas, yaitu dapat dibagi lagi menjadi register 8 bit, register tinggi/high, dan register rendah/low.
Yang termasuk register general purpose :
. AX --> AH|AL (Accumulator)
Untuk menangani operasi arithmatika.
. BX --> BH|BL (Base)
Untuk menunjukkan alamat offset.
. CX --> CH|CL (Counter)
Untuk looping, menunjukkan berapa kali looping terjadi.
. DX --> DH|DL (Data)
Untuk menampung sisa pembagian bilangan 16 bit.
4. Index Pointer Register (16 bit)
Hanya terdiri dari 1 register yaitu IP yang berpasangan dengan reguster CS (CS : IP) untuk menunjukkan alamat instruksi selanjutnya yang akan dieksekusi.
0125. Flags Register (1 bit)
Register ini berfungsi untuk menunjukkan suatu kondisi (ya atau tidak).
Register ini hanya bernilai 0 dan 1.
Yang termasuk register flags :
. OF (Overflow Flag) 1 jika terjadi overflow
. SF (Sign Flag) 1 jika digunakan bilangan bertanda
. ZF (Zero Flag) 1 jika hasil operasi bernilai 0
. CF (Carry Flag) 1 jika operasi menghasilkan carry
. PF (Parity Flag) 1 jika hasil operasi bilangan genap
. DF (Direction Flag) 1 jika alur proses alur proses menurun pada string
. IF (Interrupt Flag) 1 jika proses dapat diinterupsi
. TF (Trap Flag) 1 jika dapat ditrace / debug
. AF (Auxiliary Flag) digunakan pada operasi bilangan BCD
. NT (Nested Task) digunakan untuk menangani interupsi beruntun
. IOPL (I/O Protection Level) digunakan untuk mode proteksi (2 bit)
6. Bagaimana memulai Assembly?
---------------------------------
Bahasa assembly tidak seperti bahasa tingkat tinggi (High Level Language) yang biasanya memiliki IDE - Integrated Development Environment, bahasa assembly dapat diketikkan dalam berbagai macam editor teks, misalnya BC, TC, TURBO, NOTEPAD, EDIT, dan editor teks lainnya. Yang perlu diingat bahwa ekstensi dari program assembly haruslah .ASM. Setelah program assembly diketikkan dan disimpan dengan ekstensi .ASM, maka program tersebut harus dikompilasi menjadi Object File berekstensi .OBJ, dan kemudian harus dilink menjadi executable file (.EXE/.COM), executable file inilah yang baru dapat dijalankan.
Untuk mengcompile : C:\TASM
Untuk melink : C:\LINK
C:\Option /t untuk melink file ke .COM
C:\Untuk melink menjadi .EXE, hilangkan option /t ini.
atau pake cara langsung :
7. Apakah Perbedaan .COM dan .EXE?
-----------------------------------
Perbedaan program .COM dan .EXE adalah :
Program .COM Program .EXE
- Hanya menggunakan 1 segment untuk º - Menggunakan banyak segment.
- code, data, dan stack. º
- Ukuran program relatif kecil º - Ukuran program relatif besar
- Hasil program lebih cepat º - Hasil program lebih lambat
- Hanya dapat menangani program kecil º - Dapat menangani program yang besar(<=64 KByte).
8. Bagaimana Struktur Program .COM?
-------------------------------------
Untuk .COM dan .EXE memiliki struktur program yang berbeda, untuk kesempatan ini hanya akan dibahas struktur program .COM.
Berikut ini struktur program .COM (tanda ; adalah untuk komentar) :
nama_segment segment ; nama_segment diisi terserah anda
; Baris ini untuk memberikan nama sebuah segment
assume cs : nama_segment ; Menunjukkan CS ke segment yang sudah kita beri nama
org 100h ; Untuk PSP - Program Segment Prefix
; PSP ini digunakan untuk berhubungan dengan DOS
label_pertama : ; Di Assembly, minimal harus ada satu label,
; penamaan label terserah anda
mov ah,04ch ; service
int 21h ; int 21h service 04ch merupakan instruksi untuk
; keluar dari program
nama_segment ends ; Akhir dari sebuah segment
end label_pertama ; Label yang paling pertama harus ditutup dengan perintah ini
9. Bagaimana Variabel dalam Assembly?
--------------------------------------
Dalam assembly dikenal beberapa jenis data, yaitu :
- db (define byte) --> Besarnya 1 byte (0h - FFh)
- dw (define word) --> Besarnya 2 byte (0h - FFFFh)
- dd (define double word) --> Besarnya 4 byte (0h - FFFFFFFFh)
- df (define far word) --> Besarnya 6 byte (0h - FFFFFFFFFFFFh)
- dq (define quad word) --> Besarnya 8 byte (0h - FFFFFFFFFFFFFFFFh)
- dt (define temp word) --> Besarnya 10 byte (0h - FFFFFFFFFFFFFFFFFFFFh)
10. INT, MOV, JMP, dan LEA
----------------------------
INT
---
INT adalah perintah untuk melaksanakan suatu interupsi.
Syntaxnya adalah : INT no_interupsi
Contoh : INT 20h ; untuk program terminate
MOV
---
mOV adalah perintah untuk mengisi nilai ke register, variabel, atau alamat memory tertentu.
Syntaxnya adalah :MOV destination,source
Contoh : MOV AX,5 ; nilai AX akan berisi 5
JMP
---
JMP adalah perintah untuk melakukan lomptan ke label tertentu.
Syntaxnya adalah : JMP nama_label
Contoh : JMP label1 ; Program akan melompat ke label1
LEA
---
LEA adalah perintah untuk mendapatkan alamat dari sebuah variabel.
Syntaxnya adalah : LEA variabel
Contoh : lea si,bil1 ; si akan berisi offset bil1
11. Contoh Program Sederhana
-----------------------------
Program berikut ini akan membersihkan layar, kemudian akan muncul sebuah kalimat dan akan diminta untuk memasukkan sebuah karakter. Kemudian akan ditampilkan lagi sebuah kalimat diikuti dengan karakter yang tadi dimasukkan. code segment
assume cs : code
org 100h
begin : jmp start
kal1 db 'Masukkan sebuah karakter : $'
kal2 db 10,13,'Karakter yang anda masukkan adalah : $'
kar db ?
start : mov ah,0
mov al,3h
int 10h
mov ah,9h
lea dx,kal1
int 21h
12mov ah,1h
int 21h
mov kar,al
mov ah,9h
lea dx,kal2
int 21h
mov al,kar
int29h
mov ah,4ch
int 21h
code ends
end begin
Simpanlah program diatas dengan ekstensi .asm (misal test.asm), kemudian compile program tersebut dengan perintah :
tasm
misal : tasm test.asm
Maka akan dihasilkan sebuah object file berekstensi .obj, kemudian link file tersebut dengan perintah :
tlink /t
misal : tlink /t test.obj
Maka akan dihasilkan sebuah file berekstensi .com, cobalah jalankan !
-------------------------------------------
Bahasa Assembly (Assembler) adalah merupakan salah satu dari sekian banyak bahasa pemrograman yang tergolong dalam Bahasa Pemrogaman Tingkat Rendah (Low Level Language) dan hanya setingkat diatas bahasa mesin (Machine Language).
2. Mengapa Assembly?
----------------------
Assembly memiliki kelebihan yang tidak dapat digantikan oleh bahasa pemrogaman manapun. Diantaranya adalah :
- Hasil program memiliki tingkat kecepatan yang tinggi.
- Ukuran dari program kecil.
- Sangat mudah untuk mengakses Sistem Komputer.
3. Apakah Segment dan Offset itu?
-----------------------------------
Segment dan Offset merupakan suatu angka 16 bit (direpresntasikan dalam bilangan hexa) yang menunjukkan suatu alamat tertentu di memory komputer. Pasangan segment : offset ini disebut juga alamat relatif. Selain alamat relatif, terdapat juga alamat mutlak berupa angka 20 bit (juga direpresentasikan dalam bilangan hexa). Alamat mutlak ini dapat dihitung dengan mengalikan segment dengan 10 hexa dan ditambahkan dengan offset.
Contoh : segment : offset
0100 : 1234
Alamat relatifnya adalah : 02234
4. Apakah Interrupt itu?
--------------------------
Interrupt adalah permintaan kepada microprocessor untuk melakukan suatu perintah. Ketika terjadi permintaan interupsi, microprocessor akan mengeksekusi interrupt handler , yaitu suatu program yang melayani interupsi. Setitap interrupt handler itu memiliki alamat masing - masing yang disimpan dalam bentuk array yang masing - masing terdiri dari 4 byte (2 offset dan 2 segment). Array ini disebut vektor interupsi . Vektor interupsi ini disusun berdasarkan nomor interupsi yaitu dari hexa. Selain itu, dikenal juga istilah service dan subservice, maksudnya adalah bahwa setiap interrupt itu dibagi menjadi beberapa bagian yang mempunyai tugas masing - masing. Tetapi ada juga interrupt yang tidak memiliki service, contohnya int 29.
5. Apakah Register itu?
-------------------------
Register adalah merupakan sebagian memory dari microprocessor yang neniliki kecepatan sangat tinggi. Dapat juga dianalogikan bahwa register merupakan kaki tangan dari microprocessor.
Register dibagi menjadi lima bagian besar yaitu :
1. Segment Register (16 bit)
Register untuk menunjukkan alamat dari suatu segment. Yang termasuk register segment :
. CS (Code Segment)
Menunjukkan alamat segment dari program yang sedang aktif.
. DS (Data Segment)
Menunjukkan alamat segment dari data program (variabel).
. SS (Stack Segment)
Menunjukkan alamat segment dari stack yang digunakan program.
. ES (Extra Segment)
Merupakan register segment cadangan.
2. Pointer dan Index Register (16 bit) Register untuk menunjukkan alamat dari suatu offset.
Yang termasuk register pointer dan index :
. SP (Stack Pointer)
Berpasangan dengan SS (SS : SP).
. BP (Base Pointer)
Berpasangan dengan SS (SS : BP).
. DI (Destination Index)
Berpasangan dengan ES (ES : DI). Dipakai untuk operasi string.
. SI (Source Index)
Berpasangna dengan DS (DS : SI). Dipakai untuk operasi string.
3. General Purpose Register (16 bit)
Register ini dapat digunakan untuk berbagai keperluan, tetapi masing - masing juga memiliki fungsi khusus. Jenis register ini memiliki ciri khas, yaitu dapat dibagi lagi menjadi register 8 bit, register tinggi/high, dan register rendah/low.
Yang termasuk register general purpose :
. AX --> AH|AL (Accumulator)
Untuk menangani operasi arithmatika.
. BX --> BH|BL (Base)
Untuk menunjukkan alamat offset.
. CX --> CH|CL (Counter)
Untuk looping, menunjukkan berapa kali looping terjadi.
. DX --> DH|DL (Data)
Untuk menampung sisa pembagian bilangan 16 bit.
4. Index Pointer Register (16 bit)
Hanya terdiri dari 1 register yaitu IP yang berpasangan dengan reguster CS (CS : IP) untuk menunjukkan alamat instruksi selanjutnya yang akan dieksekusi.
0125. Flags Register (1 bit)
Register ini berfungsi untuk menunjukkan suatu kondisi (ya atau tidak).
Register ini hanya bernilai 0 dan 1.
Yang termasuk register flags :
. OF (Overflow Flag) 1 jika terjadi overflow
. SF (Sign Flag) 1 jika digunakan bilangan bertanda
. ZF (Zero Flag) 1 jika hasil operasi bernilai 0
. CF (Carry Flag) 1 jika operasi menghasilkan carry
. PF (Parity Flag) 1 jika hasil operasi bilangan genap
. DF (Direction Flag) 1 jika alur proses alur proses menurun pada string
. IF (Interrupt Flag) 1 jika proses dapat diinterupsi
. TF (Trap Flag) 1 jika dapat ditrace / debug
. AF (Auxiliary Flag) digunakan pada operasi bilangan BCD
. NT (Nested Task) digunakan untuk menangani interupsi beruntun
. IOPL (I/O Protection Level) digunakan untuk mode proteksi (2 bit)
6. Bagaimana memulai Assembly?
---------------------------------
Bahasa assembly tidak seperti bahasa tingkat tinggi (High Level Language) yang biasanya memiliki IDE - Integrated Development Environment, bahasa assembly dapat diketikkan dalam berbagai macam editor teks, misalnya BC, TC, TURBO, NOTEPAD, EDIT, dan editor teks lainnya. Yang perlu diingat bahwa ekstensi dari program assembly haruslah .ASM. Setelah program assembly diketikkan dan disimpan dengan ekstensi .ASM, maka program tersebut harus dikompilasi menjadi Object File berekstensi .OBJ, dan kemudian harus dilink menjadi executable file (.EXE/.COM), executable file inilah yang baru dapat dijalankan.
Untuk mengcompile : C:\TASM
Untuk melink : C:\LINK
C:\Option /t untuk melink file ke .COM
C:\Untuk melink menjadi .EXE, hilangkan option /t ini.
atau pake cara langsung :
7. Apakah Perbedaan .COM dan .EXE?
-----------------------------------
Perbedaan program .COM dan .EXE adalah :
Program .COM Program .EXE
- Hanya menggunakan 1 segment untuk º - Menggunakan banyak segment.
- code, data, dan stack. º
- Ukuran program relatif kecil º - Ukuran program relatif besar
- Hasil program lebih cepat º - Hasil program lebih lambat
- Hanya dapat menangani program kecil º - Dapat menangani program yang besar(<=64 KByte).
8. Bagaimana Struktur Program .COM?
-------------------------------------
Untuk .COM dan .EXE memiliki struktur program yang berbeda, untuk kesempatan ini hanya akan dibahas struktur program .COM.
Berikut ini struktur program .COM (tanda ; adalah untuk komentar) :
nama_segment segment ; nama_segment diisi terserah anda
; Baris ini untuk memberikan nama sebuah segment
assume cs : nama_segment ; Menunjukkan CS ke segment yang sudah kita beri nama
org 100h ; Untuk PSP - Program Segment Prefix
; PSP ini digunakan untuk berhubungan dengan DOS
label_pertama : ; Di Assembly, minimal harus ada satu label,
; penamaan label terserah anda
mov ah,04ch ; service
int 21h ; int 21h service 04ch merupakan instruksi untuk
; keluar dari program
nama_segment ends ; Akhir dari sebuah segment
end label_pertama ; Label yang paling pertama harus ditutup dengan perintah ini
9. Bagaimana Variabel dalam Assembly?
--------------------------------------
Dalam assembly dikenal beberapa jenis data, yaitu :
- db (define byte) --> Besarnya 1 byte (0h - FFh)
- dw (define word) --> Besarnya 2 byte (0h - FFFFh)
- dd (define double word) --> Besarnya 4 byte (0h - FFFFFFFFh)
- df (define far word) --> Besarnya 6 byte (0h - FFFFFFFFFFFFh)
- dq (define quad word) --> Besarnya 8 byte (0h - FFFFFFFFFFFFFFFFh)
- dt (define temp word) --> Besarnya 10 byte (0h - FFFFFFFFFFFFFFFFFFFFh)
10. INT, MOV, JMP, dan LEA
----------------------------
INT
---
INT adalah perintah untuk melaksanakan suatu interupsi.
Syntaxnya adalah : INT no_interupsi
Contoh : INT 20h ; untuk program terminate
MOV
---
mOV adalah perintah untuk mengisi nilai ke register, variabel, atau alamat memory tertentu.
Syntaxnya adalah :MOV destination,source
Contoh : MOV AX,5 ; nilai AX akan berisi 5
JMP
---
JMP adalah perintah untuk melakukan lomptan ke label tertentu.
Syntaxnya adalah : JMP nama_label
Contoh : JMP label1 ; Program akan melompat ke label1
LEA
---
LEA adalah perintah untuk mendapatkan alamat dari sebuah variabel.
Syntaxnya adalah : LEA variabel
Contoh : lea si,bil1 ; si akan berisi offset bil1
11. Contoh Program Sederhana
-----------------------------
Program berikut ini akan membersihkan layar, kemudian akan muncul sebuah kalimat dan akan diminta untuk memasukkan sebuah karakter. Kemudian akan ditampilkan lagi sebuah kalimat diikuti dengan karakter yang tadi dimasukkan. code segment
assume cs : code
org 100h
begin : jmp start
kal1 db 'Masukkan sebuah karakter : $'
kal2 db 10,13,'Karakter yang anda masukkan adalah : $'
kar db ?
start : mov ah,0
mov al,3h
int 10h
mov ah,9h
lea dx,kal1
int 21h
12mov ah,1h
int 21h
mov kar,al
mov ah,9h
lea dx,kal2
int 21h
mov al,kar
int29h
mov ah,4ch
int 21h
code ends
end begin
Simpanlah program diatas dengan ekstensi .asm (misal test.asm), kemudian compile program tersebut dengan perintah :
tasm
misal : tasm test.asm
Maka akan dihasilkan sebuah object file berekstensi .obj, kemudian link file tersebut dengan perintah :
tlink /t
misal : tlink /t test.obj
Maka akan dihasilkan sebuah file berekstensi .com, cobalah jalankan !