Tgs Asm
Tgs Asm
Pengertian Assembly
D. Interrupt
E. Register
a) CS (Code Segment)
Menunjukkan alamat segment dari program yang sedang aktif.
b) DS (Data Segment) : digunakan untuk menunjukkan tempat segmen
dimana data-data pada program disimpan
c) SS (Stack Segment) : Menunjukkan alamat segment dari stack
yang digunakan
program.
d) ES (Extra Segment) : Merupakan dan register segment
cadangan.
Mnemonic atau opcode ialah kode yang akan melakukan aksi terhadap operand . Operand
ialah data yang diproses oleh opcode. Sebuah opcode bisa membutuhkan 1 ,2 atau lebih
operand, kadang juga tidak perlu operand. Sedangkan komentar dapat kita berikan dengan
menggunakan tanda titik koma (;). Berikut contoh jumlah operand yang berbeda beda dalam
suatu assembly.
CJNE R0,#22H, Tasmi ;dibutuhkan 3 buah operand
MOVX @DPTR, A ;dibutuhkan 2 buah operand
RR A ;1 buah operand
NOP ; tidak memerlukan operand
Semua instruksi tersebut dapat dibagi menjadi lima kelompok menurut fungsinya, yaitu:
� Instruksi Pemindahan Data
� Instruksi Aritmatika
� Instruksi Logika dan Manipulasi Bit
� Instruksi Percabangan
� Instruksi Stack, I/O, dan Kontrol.
G. 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 nama
MODEL SMALL
Tanda directive ini digunakan untuk memberitahukan kepada assembler bentuk
memory yang digunakan oleh program kita. Supaya lebih jelas model-model yang
bisa digunakan adalah :
- TINY
Jika program anda hanya menggunakan 1 segment seperti program COM. Model
ini disediakan khusus untuk program COM.
- SMALL
Jika data dan code yang digunakan oleh program kurang dari ukuran 1 segment
atau 64 KB.
- MEDIUM
Jika data yang digunakan oleh program kurang dari 64 KB tetapi code yang
digunakan bisa lebih dari 64 KB.
- COMPACT
Jika data yang digunakan bisa lebih besar dari 64 KB tetapi codenya kurang dari
64 KB.
- LARGE
Jika data dan code yang dipakai oleh program bisa lebih dari 64 KB.
- HUGE
Jika data, code maupun array yang digunakan bisa lebih dari 64 KB. Mungkin ada
yang bertanya-tanya mengapa pada program COM yang dibuat digunakan model
SMALL dan bukannya TINY ? Hal ini disebabkan karena banyak dari compiler
bahasa tingkat tinggi yang tidak bisa berkomunikasi dengan model TINY,
sehingga kita menggunakan model SMALL sebagai pemecahannya.
.CODE
Tanda directive ini digunakan untuk memberitahukan kepada assembler bahwa
kita akan mulai menggunakan Code Segment-nya disini. Code segment ini
digunakan untuk menyimpan program yang nantinya akan dijalankan.
. 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.
INT 20h
Perintah INT adalah suatu perintah untuk menghasilkan suatu interupsi
INT NoInt
Interupsi 20h berfungsi untuk mengakhiri program dan menyerahkan kendali
sepenuhnya kepada Dos. Pada program COM cara ini bukanlah satu-satunya tetapi
cara inilah yang paling efektif untuk digunakan. Bila anda lupa untuk mengakhiri
sebuah program maka program anda tidak akan tahu kapan harus selesai, hal ini
akan menyebabkan komputer menjadi hang.
Untuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC
serta INC. Perintah ADD digunakan dengan syntax :
ADD Tujuan,Asal
Perintah ADD ini akan menambahkan nilai pada Tujuan dan Asal. Hasil yang
didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi
Tujuan:=Tujuan + Asal.
pada perintah ADD ini antara Tujuan dan Asal harus
mempunyai daya tampung yang sama, misalnya register AH(8 bit) dan AL(8 bit),
AX(16 bit) dan BX(16 bit).
Perintah INC(Increment) digunakan khusus untuk pertambahan dengan 1.
Perintah INC hanya menggunakan 1 byte memory, sedangkan perintah ADD dan
ADC menggunakan 3 byte. Oleh sebab itu bila anda ingin melakukan operasi
pertambahan dengan 1 gunakanlah perintah INC. Syntax pemakainya adalah :
INC Tujuan
Nilai pada tujuan akan ditambah dengan 1, seperti perintah Tujuan:=Tujuan+1
dalam Turbo Pascal. Tujuan disini dapat berupa suatu register maupun memory.
Contoh : perintah INC AL akan menambah nilai di register AL dengan 1. Adapun
flag yang terpengaruh oleh perintah ini adalah OF,SF,ZF,AF dan PF.
DEC
Perintah DEC(Decrement) digunakan khusus untuk pengurangan dengan 1.
Perintah DEC hanya menggunakan 1 byte memory, sedangkan perintah SUB dan
SBB menggunakan 3 byte. Oleh sebab itu bila anda ingin melakukan operasi
pengurangan dengan 1 gunakanlah perintah DEC. Syntax pemakaian perintah dec ini
adalah:
DEC Tujuan
Nilai pada tujuan akan dikurangi 1, seperti perintah Tujuan:=Tujuan-1 dalam
Turbo Pascal. Tujuan disini dapat berupa suatu register maupun memory. Contoh :
perintah DEC AL akan mengurangi nilai di register AL dengan 1.
PEMBAGIAN
Operasi pada pembagian pada dasarnya sama dengan perkalian. Untuk operasi
pembagian digunakan perintah DIV dengan syntax:
DIV Sumber
Bila sumber merupakan operand 8 bit seperti DIV BH, maka komputer akan
mengambil nilai pada register AX dan membaginya dengan nilai BH. Hasil
pembagian 8 bit ini akan disimpan pada register AL dan sisa dari pembagian akan
disimpan pada register AH.
Bila sumber merupakan operand 16 bit seperti DIV BX, maka komputer akan
mengambil nilai yang terdapat pada register DX:AX dan membaginya dengan nilai
BX. Hasil pembagian 16 bit ini akan disimpan pada register AX dan sisa dari
pembagian akan disimpan pada register DX.
AAD mengubah dua hasil digit BCD menjadi AH dan AL menjadi angka biner yang
seimbang dalam AL. Pengaturan ini harus dibuat sebelum membagi dua hasil digit
BCD dalam AX dengan byte hasil BCD. Setelah pembagian, AL akan berisi hasil
bagi dari hasil BCD dan AH akan berisi sisa hasil BCD. PF, SF, dan ZF
diperbaharui.
AF, CF, dan OF tidak diterangkan setelah AAD.
LOMPAT TANPA SYARAT
Perintah JMP(Jump), sudah pernah kita gunakan, dimana perintah ini digunakan
untuk melompati daerah data program. Perintah JMP digunakan dengan syntax:
JMP Tujuan
Perintah JMP ini dikategorikan sebagai Unconditional Jump, karena perintah ini
tidak menyeleksi keadaan apapun untuk melakukan suatu lompatan.Setiap ditemui
perintah ini maka lompatan pasti dilakukan. Selain dari perintah jump tanpa syarat,
masih banyak perintah Jump yang menyeleksi suatu keadaan tertentu sebelum
dilakukan lompatan. Perintah jump dengan penyeleksian kondisi terlebih dahulu
biasanya diikuti dengan perintah untuk melihat kondisi, seperti membandingkan
dengan perintah "CMP"(Compare).
MEMBANDINGKAN DENGAN CMP
Perintah CMP(Compare) digunakan untuk membandingkan 2 buah operand,
dengan syntax:
CMP Operand1,Operand2
CMP akan membandingkan operand1 dengan operand2 dengan cara
mengurangkan operand1 dengan operand2. CMP tidak mempengaruhi nilai
Operand1
dan Operand2, perintah CMP hanya akan mempengaruhi flags register sebagai hasil
perbandingan. Adapun flag-flag yang terpengaruh oleh perintah CMP ini adalah:
- OF akan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan bertanda.
- SF akan 1, bila operand1 lebih kecil dari operand2, pada operasi bilangan bertanda.
- ZF akan 1, jika operand1 nilainya sama dengan operand2.
- CF akan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan tidak
bertanda.
Perlu anda ingat bahwa CMP tidak dapat membandingkan antar 2 lokasi memory.
LOMPAT YANG MENGIKUTI CMP
Perintah CMP yang hanya mempengaruhi flag register, biasanya diikuti dengan
perintah lompat yang melihat keadaan pada flags register ini. Jenis perintah lompat
yang biasanya mengikuti perintah CMP, terdapat 10 buah seperti
Perintah Lompat Kondisi
JA <Jump If Above> Lompat, jika Operand1 >
Operand2
untuk bilangan tidak bertanda
JG <Jump If Greater> Lompat, jika Operand1 >
Operand2
untuk bilangan bertanda
JE <Jump If Equal> Lompat, jika Operand1 =
Operand2
JNE <Jump If Not Equal> Lompat, jika Operand1 tidak
sama
dengan Operand2
JB <Jump If Below> Lompat, jika Operand1 <
Operand2
untuk bilangan tidak bertanda
JL <Jump If Less> JL <Jump If Less>
JBE <Jump If Below or Lompat, jika operand1 <=
Equal> Operand2
untuk bilangan tidak bertanda
JLE <Jump If Less or Equal> Lompat, jika Operand1 <=
Operand2
untuk bilangan bertanda
JAE <Jump If Above or Lompat, jika Operand1 >=
Equal> Operand2
untuk bilangan tidak bertanda
JGE <Jump If Greater or Lompat, jika Operand1 >=
Equal> Operand2
untuk bilangan bertanda
.model small
.code
org 100h
mulai:
mov ah,2
mov dl,'E'
int 21h
int 20h
end mulai
.model medium
.code
org 100h
mulai:
mov ah,2
mov dl,'F'
int 21h
mov dl,'A'
int 21h
mov dl,'J'
int 21h
mov dl,'A'
int 21h
mov dl,'R'
int 21h
int 20h
end mulai
.model small
.code
org 100h
mulai:
mov ah, 02h
mov dl, 'a'
mov cx, 13
ulang:
int 21h
inc dl
loop ulang
int 20h
end mulai