Daftar Isi Daftar Isi ................................................................................................................................................. 1 Pertemuan 4: Operator Aritmatika, Logika dan Instruksi Banding dan Lompatan ................................ 2 P4.1. Teori .................................................................................................................................. 3 Operasi Aritmatika ............................................................................................................. 3 Operasi Logika ................................................................................................................. 8 Pergeseran Bit ................................................................................................................ 11 Instruksi Banding ........................................................................................................... 12 Instruksi Lompatan ........................................................................................................ 13 P4.2. Studi Kasus ...................................................................................................................... 18 P4.3. Latihan ............................................................................................................................. 24 P4.4. Daftar Pustaka .................................................................................................................. 25
[Type text]
Page 1
Pertemuan 4 Operasi Aritmatika, Logika, Instruksi Banding dan Lompatan
Objektif: 1. Mahasiswa dapat memahami konsep operasi Aritmatika dan Logika 2. Mahasiswa dapat membuat program sederhana menggunakan operasi Aritmatika dan Logika 3. Mahasiswa dapat mengetahui instruksi Perbandingan dan Lompatan 4. Mahasiswa dapat membuat program sederhana menggunakan instruksi Banding dan Lompatan
P4.1 Teori [Type text]
Page 2
OPERASI ARITMATIKA
Penambahan Operasi penambahan pada Turbo Assembler ada 3 macam, diantaranya adalah ADD, ADC, dan INC. Untuk lebih jelasnya penjelasan 3 hal tersebut ada dibawah ini :
INC Perintah INC (Increment) digunakan khusus untuk pertambahan dengan 1, logikanya seperti contoh perintah di bawah ini: A=A+ 1 Perintah INC hanya menggunakan 1 byte memory, sedangkan perintah ADD dan ADC menggunakan 3 byte. Oleh sebab itu jika melakukan operasi pertambahan dengan 1 gunakanlah perintah INC. Syntax pemakainya adalah: INC [Register/Variabel] Atau INC [Tujuan] Nilai pada register/variabel akan ditambah dengan 1, seperti perintah A = A + 1. Tujuan disini dapat berupa suatu register maupun memory. Contohnya 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.
ADD Perintah ADD dapat digunakan untuk untuk penambahan berapa saja pada suatu register ataupun variabel syntaxnya adalah sebagai berikut: ADD [operand1], [operand2] Isi operand1 adalah register atau variabel dan operand2 berupa register, variabel atau bilangan. Hasil pertambahan akan dimasukkan dalam operand1 sebagai contoh: MOV AH,15h
; AH:=15h
MOV AL,4
; AL:=4
ADD AH,AL
; AH:=AH+AL
Hasilnya adalah AH=19h [Type text]
Page 3
Perintah ADD ini akan menambahkan nilai pada Tujuan dan Asal. Hasil yang didapat akan diletakkan pada Tujuan, dalam bahasa pascal sama dengan instruksi Tujuan:=Tujuan + Asal. Perlu diperhatikan bahwa pada perintah ADD ini antara Tujuan dan Asal harus mempunyai daya tampung yang sama, misalnya register AH (8 bit) dengan AL (8 bit), AX (16 bit) dengan BX (16 bit).
ADC Perintah ADC digunakan dengan cara yang sama pada perintah ADD, yaitu : ADC [Tujuan], [Asal]
Perbedaannya pada perintah ADC ini Tujuan tempat menampung hasil pertambahan Tujuan dan Asal ditambah lagi dengan carry flag (Tujuan:=Tujuan+Asal+Carry). Pertambahan yang demikian dapat memecahkan masalah seperti pertambahan pada bilangan 12345678h+9ABCDEF0h. Seperti yang telah diketahui bahwa satu register hanya mampu menampung 16 bit, maka untuk pertambahan seperti yang di atas bisa digunakan perintah ADC untuk memecahkannya, Contoh: MOV AX,1234h
; AX = 1234h CF = 0
MOV BX,9ABCh
; BX = 9ABCh CF = 0
MOV CX,5678h
; BX = 5678h CF = 0
MOV DX,0DEF0h
; DX = DEF0h CF = 0
ADD CX,DX
; CX = 3568h CF = 1
ADC AX,BX
; AX = AX+BX+CF = ACF1
Hasil penjumlahan akan ditampung pada register AX:CX yaitu ACF13568h. Adapun flag-flag yang terpengaruh oleh perintah ADD dan ADC ini adalah CF,PF,AF,ZF,SF dan OF.
Pengurangan Seperti halnya penambahan, pengurangan juga mempuyai beberapa fungsi, yaitu: SUB Operasi pengurangan dapat digunakan perintah SUB dengan syntax: SUB [Tujuan], [Asal]
Perintah SUB akan mengurangkan nilai pada Tujuan dengan Asal. Hasil yang didapat akan ditaruh [Type text]
Page 4
pada Tujuan, dalam bahasa pascal sama dengan instruksi Tujuan:=Tujuan-Asal. Contoh : MOV AX,15
; AX:=15
MOV BX,12
; BX:=12
SUB AX,BX
; AX:=15-12=3
SUB AX,AX
; AX=0
Untuk mengosongkan nilai (nol) suatu register bisa dikurangkan dengan dirinya sendiri seperti SUB AX, AX.
SBB Seperti pada operasi penambahan, maka pada operasi pengurangan dengan bilangan yang besar (lebih dari 16 bit), dapat menggunakan perintah SUB disertai dengan SBB (Substract With Carry). Perintah menggunakan SBB mempunyai bentuk umum sebagai berikut: SBB [Tujuan],[ Asal] Perintah SBB akan mengurangkan nilai Tujuan dengan Asal dengan cara yang sama seperti perintah SUB, kemudian hasil yang didapat dikurangi lagi dengan Carry Flag yaitu: Tujuan := Tujuan – Asal - CF
DEC [Type text]
Page 5
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, jika ingin melakukan operasi pengurangan dengan 1 gunakan perintah DEC. Syntax pemakaian perintah dec ini adalah: DEC [Register/Variabel] Atau 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.
Perkalian Operasi perkalian dalam Assembler dapat menggunakan perintah ‘MUL’ yang artinya perkalian. Adapun tata penulisannya adalah: MUL [Register] Atau MUL [Sumber]
Sumber disini dapat berupa suatu register 8 bit (misalkan BL, BH, dst) register 16 bit (misalkan BX, DX, dst) atau suatu varibel. Ada 2 kemungkinan yang akan terjadi pada perintah MUL ini sesuai dengan jenis perkalian 8 bit atau 16 bit. Bila Sumber merupakan 8 bit seperti MUL BH maka komputer akan mengambil nilai yang terdapat pada BH dan nilai pada AL untuk dikalikan. Hasil yang didapat akan selalu disimpan pada register AX. Bila sumber merupakan 16 bit seperti MUL BX maka komputer akan mengambil nilai yang terdapat pada BX dan nilai pada AX untuk dikalikan. Hasil yang didapat akan disimpan pada register DX dan AX (DX:AX), jadi register DX menyimpan Word tingginya dan AX menyimpan Word rendahnya.
Pembagian [Type text]
Page 6
Operasi pada pembagian pada membedakan cara kerja pembagian dengan 8 bit dan 16 bit. Bentuk umum penulisannya adalah: 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.
OPERASI LOGIKA [Type text]
Page 7
Gerbang NOT Operator NOT akan menginvers suatu nilai seperti yang terlihat pada gambar 10.1 berikut ini: Tabel 4.1 Gerbang NOT A
NOT (A)
0
1
1
0
Operasi NOT dalam assembler, digunakan dengan syntax: NOT Tujuan,Sumber Hasil dari operasi NOT ini akan disimpan pada Tujuan. Instruksi NOT AL, 3Fh akan menghasilkan nilai C0h bagi AL. Untuk lebih jelasnya dapat dilihat penjelasannya di bawah ini:
Diketahui bilangan heksadesimal: 3 F Bilangan Binernya: 0011 1111 Operasi NOT dari 0011 1111 adalah: 1100 0000 Bilangan Heksadesimal dari 1100 0000 adalah C0
Gerbang AND Operator AND akan menghasilkan nilai nol bila salah satu operandnya bernilai nol. Dan hanya akan bernilai satu bila kedua operandnya bernilai satu.
Tabel 4.2 Gerbang AND A
B
A AND B
0
0
0
0
1
0
1
0
0
1
1
1
Operasi AND di dalam assembler, digunakan dengan syntax: [Type text]
Page 8
AND Tujuan,Sumber Hasil dari operasi AND ini akan disimpan pada Tujuan, sebagai contoh: MOV AL,3Fh MOV BL,1Ah AND AL,BL
Perintah diatas akan menghasilkan nilai 1A bagi register AL. Setiap bit yang AND dengan 0 pasti menghasilkan bit 0 juga, sedangkan setiap bit yang AND dengan 1 akan menghasilkan bit itu sendiri.
Gerbang OR Operator logik OR akan menghasilkan nilai nol bila kedua operannya bernilai nol dan satu bila salah satunya bernilai satu.
Tabel 4.3 Gerbang OR A
B
A OR B
0
0
0
0
1
1
1
0
1
1
1
1
Operasi OR di dalam assembler, digunakan dengan syntax: OR Tujuan, Sumber Hasil dari operasi OR ini akan disimpan pada Tujuan, sebagai contoh: MOV AL,3Fh MOV BL,1Ah OR AL,BL Hasil operasi OR diatas akan menghasilkan nilai 3F bagi register AL. Setiap bit yang di OR dengan 0 pasti menghasilkan bit itu sendiri, sedangkan setiap bit yang di OR dengan 1 pasti menghasilkan bit 1.
Gerbang XOR Operator XOR akan menghasilkan nol untuk dua nilai yang sama nilainya dan satu untuk yang berbeda. [Type text]
Page 9
Tabel 4.4 Gerbang XOR A
B
A XOR B
0
0
0
0
1
1
1
0
1
1
1
0
Operasi XOR di dalam assembler, digunakan dengan syntax sebagai berikut: XOR Tujuan,Sumber Hasil dari operasi XOR ini akan disimpan pada Tujuan, sebagai contoh: MOV AX,0A12h XOR AX,AX Hasil operasi XOR di atas pasti akan menghasilkan nilai 0 bagi register AX. Setiap bilangan yang di XOR dengan bilangan yang sama pasti menghasilkan bilangan 0.
TEST Perintah Test digunakan untuk mengetahui nilai pada suatu bit, dengan syntax: TEST Operand1,Operand2 Perintah test akan melakukan perintah AND di kedua nilai operand, tetapi hasil yang didapatkan tidak akan berpengaruh terhadap nilai kedua operand tersebut. Setelah perintah Test dilaksanakan yang akan terpengaruh adalah Flags, sehingga perintah ini sering diikuti dengan perintah yang berhubungan dengan kondisi flags. Adapun flags yang terpengaruh adalah CF,OF,PF,ZF,SF dan AF. TEST AL, 20 JC 0100
Perintah di atas mencek apakah pada register AL bit kelima (20h = 00100000) berisi 1. Bila ‘Ya’, maka loncat ke arah segment:0100 dan bila tidak lanjutkan ke bawah.
PERGESERAN BIT SHL (Shift Left) [Type text]
Page 10
Operator SHL akan menggeser operand1 ke kiri sebanyak operand2 secara per bit kemudian bit kosong yang telah tergeser di sebelah kanannya akan diberi nilai nol. Operator SHL digunakan dengan syntax : SHL Operand1,Operand2 Operand2 harus digunakan register CL bila pergeseran yang dilakukan lebih dari satu kali.
0
Gambar 4.1 Operasi SHL Instruksi : MOV AX,3Fh MOV CL,3 SHL AX,CL ; Geser 3 bit ke kiri Akan menghasilkan nilai F8h pada register AX. Rincian operasinya dapat dilihat di bawah ini: 3Fh : 0011 1111 SHL 1 : 0111 1110 (=7Eh) SHL 2 : 1111 1100 (=FCh) SHL 3 : 1111 1000 (=F8h)
SHR (Shift Right) Operator SHR akan menggeser operand1 ke kanan sebanyak operand2 secara per bit dan menambahkan nilai nol pada bit yang tergeser seperti halnya pada operator SHL. Operator SHR digunakan dengan syntax : SHR Operand1,Operand2 Operand2 harus digunakan register CL bila pergeseran yang dilakukan lebih dari satu kali. Lebih jelasnya lihat Gambar 4.2 berikut ini:
0
Gambar 4.2 Operasi SHR Instruksi : MOV AX,3Fh [Type text]
Page 11
MOV CL,3 SHR AX,CL
; Geser 3 bit ke kanan
Akan menghasilkan nilai 07h pada register AX. Operasi detilnya dapat dilihat di bawah ini: 3Fh : 0011 1111 SHR 1 : 0001 1111 (=1Fh) SHR 2 : 0000 1111 (=0Fh) SHR 3 : 0000 0111 (=07h)
INSTRUKSI BANDING Compare (CMP) Perintah Banding yaitu CMP (Compare) digunakan untuk membandingkan 2 buah operand dengan syntax sebagai berikut: 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.
Perintah CMP tidak dapat membandingkan antar 2 lokasi memory.
INSTRUKSI LOMPATAN Instruksi Lompatan dibagi menjadi dua macam lompatan, yaitu: [Type text]
Page 12
-
Lompatan Tanpa Syarat
-
Lompatan Bersyarat
Lompatan Tanpa Syarat Perintah JMP digunakan dengan syntax: JMP Tujuan Atau JMP [lokasi memory] 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).
Perbandingan Lompatan Bersyarat 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 12 buah seperti pada table di bawah ini:
Tabel 4.5 Perintah Lompatan Mengikuti CMP
Perintah Lompatan JA (Jump If Above)
JG (Jump If Greater) JE (Jump If Equal) JNE (Jump If Not Equal)
Kondisi Lompat, jika Operand1 > Operand2 untuk bilangan tidak bertanda Lompat, jika Operand1 > Operand2 Untuk bilangan bertanda Lompat, jika Operand1 = Operand2 Lompat, jika Operand1 tidak sama dengan Operand2
Lanjutan tabel 4.5 perintah lompatan
[Type text]
Page 13
Perintah Lompatan JB (Jump If Below)
JL (Jump If Less)
JBE (Jump If Below or Equal)
JLE (Jump If Less or Equal)
JAE (Jump If Above or Equal)
JGE (Jump If Greater or Equal)
Kondisi Lompat, jika Operand1 < Operand2 Untuk bilang tidak bertanda Lompat, jika Operand1 < Operand2 Untuk bilangan bertanda Lompat, jika Operand1 <= Operand2 Untuk bilangan tidak bertanda Lompat jika Operand1 <= Operand2 Untuk bilangan bertanda Lompat jika Operand1 >= Operand2 Untuk bilangan tidak bertanda Lompat, jika Operand1 >= Operand2 Untuk bilangan bertanda
Pada table di atas terdapat dua operasi yang berbeda, yaitu operasi bilangan bertanda dan tidak bertanda. Bilangan bertanda adalah bilangan yang akan membedakan bilangan negative dan positif misalkan bilangan 20 dan -20, sedangkan bilangan tidak bertanda adalah bilangan yang tidak akan membedakan positif dan negative, jadi angka -1 untuk operasi bilangan bertanda akan dianggap FFh pada bilangan tidak bertanda.
Contoh programnya adalah sebagai berikut:
.MODEL SMALL .CODE ORG 100h TData: JMP Proses BilA DB 67 BilB DB 66 Kal0 DB 'Bilangan A lebih kecil dari bilangan B $' Kal1 DB 'Bilangan A sama dengan bilangan B $' [Type text]
Page 14
Kal2 DB 'Bilangan A lebih besar dari bilangan B $' Proses: MOV AL,BilA
; Masukkan bilangan A pada AL
CMP AL,BilB
; Bandingkan AL(BilA) dengan Bilangan B
JB AKecil
; Jika BilA < BilB, lompat ke AKecil
JE Sama
; Jika BilA = BilB, lompat ke Sama
JA ABesar
; Jika BilA > BilB, lompat ke ABesar
LEA DX,Kal0
; Ambil offset Kal0
JMP Cetak
; Lompat ke cetak
LEA DX,Kal1
; Ambil offset Kal1
JMP Cetak
; Lompat ke cetak
Akecil:
Sama:
ABesar: LEA DX,Kal2
; Ambil offset Kal2
MOV AH,09
; Servis untuk mencetak kalimat
INT 21h
; Mencetak Kalimat
EXIT: INT 20h
; Kembali ke DOS.
Cetak:
END TData
Bila program dijalankan, maka akan menghasilkan output: Bilangan A lebih besar dari bilangan B
Nilai pada variabel BilA dan BilB dapat diganti untuk melihat hasil yang akan ditampilkan pada layar. Lompatan Bersyarat Lompat bersyarat hanya dapat melompat menuju label yang berjarak -128 sampai +127 byte dari tempat lompatan. Table perintah lompatan bersyarat dapat dilihat di bawah ini:
Tabel 4.6 Perintah Lompatan Bersyarat
[Type text]
Page 15
Perintah Lompatan JA (Jump If Above)
JG (Jump If Greater) JE (Jump If Equal) JNE (Jump If Not Equal)
JB (Jump If Below)
JL (Jump If Less)
JBE (Jump If Below or Equal)
JLE (Jump If Less or Equal)
JAE (Jump If Above or Equal)
JGE (Jump If Greater or Equal)
Lompat, jika Operand1 > Operand 2 Untuk bilangan tidak bertanda Lompat, jika Operand1 > Operand2 Untuk bilangan bertanda Lompat, jika Operand1 = Operand2 Lompat, jika Operand1 tidak sama dengan Operand2 Lompat, jika Operand1 < Operand2 Untuk bilangan tidak bertanda Lompat, jika Operand1 < Operand2 Untuk bilangan bertanda Lompat, jika Operand1 < = Operand2 Untuk bilangan tidak bertanda Lompat, jika Operand1 < = Operand2 Untuk bilangan bertanda Lompat, jika Operand1 > = Operand2 Untuk bilangan tidak bertanda Lompat, jika Operand1 > = Operand2 Untuk bilangan bertanda
JC (Jump Carry)
Lompat, jika Carry Flag = 1
JCXZ (Jump If CX is Zero)
Lompat, jika CX = 0
JNA (Jump If Not Above)
Lompat, jika Operand1 < Operand2 Dengan CF = 1 atau ZF = 1
JNAE (Jump If Not Above nor
Lompat, jika Operand1 < Operand2 dengan
Equal)
CX = 1
JNB (Jump If Not Below)
[Type text]
Kondisi
Lompat, jika Operand1 > Operand2 dengan CF = 0
JNBE (Jump If Not Below or
Lompat, jika Operand1 > Operand2 dengan
Equal)
CF = 0 dan ZF = 0
JNC (Jump If Not Carry)
Lompat, jika CF = 0 Page 16
JNG (Jump If Not Greater)
dengan ZF =1 atau SF tidak sama OF
JNGE (Jump If Not Greater Nor
Lompat, jika Operand1 <= Operand 2
Equal)
dengan SF tidak sama OF
JNL (Jump If Not Less)
[Type text]
Lompat, jika Operand1 <= Operand2
Lompat, jika Operand1 >= Operand2 dengan SF = OF
JNLE (Jump If Not Less Nor
Lompat, jika Operand1 > Operand2 dengan
Equal)
ZF = 0 dan SF = OF
JNO (Jump If No Overflow)
Lompat, jika tidak terjadi Overflow
JNP (Jump If Not Parity)
Lompat, jika Ganjil
JNS (Jump If No Sign)
Lompat, jika SF = 0
JNZ (Jump If Not Zero)
Lompat, jika tidak 0
JO (Jump On Overflow)
Lompat, jika OF = 1
JP (Jump On Parity)
Lompat, jika Genap
JPE (Jump If Parity Even)
Lompat, jika PF = 1
JPO (Jump If Parity Odd)
Lompat, jika PF = 0
JS (Jump On Sign)
Lompat, jika SF = 1
JZ (Jump Is Zero)
Lompat, jika 0
Page 17
P4.2 Studi Kasus Program Penjumlahan Sederhana Berikut ini contoh program penjumlahan sederhana dan menyimpannya dengan esktensi *.ASM. File tersebut harus disimpan di dalam folder BIN pada TASM: .MODE SMALL .CODE ORG 100h PROSES: MOV AH, 15h
; AH := 15h
MOV AL, 4
; AL := 4
ADD AH, AL
; AH := AH + AL, jadi AH = 19h
MOV AX, 1234h
; Nilai AX := 1234h dan carry = 0
MOV BX, 0F221h
; Nilai BX := F221h dan carry = 0
ADD AX, BX
; AX := AX + BX, jadi nilai AX 0455h
MOV AX, 1234h
; AX = 1234h
CF = 0
MOV BX, 9ABCh
; BX = 9ABCh
CF = 0
MOV CX, 5678H
; BX = 5678h
CF = 0
MOV DX, 0DEF0h
; DX = DEF0h
CF = 0
ADD CX, DX
; CX = 3568h
CF = 1
ADC AX, BX
; AX = AX+BX+CF = ACF1
INC AL
; AL := AL + 1, nilai AL ditambah 1
INT 20h
;
END PROSES
[Type text]
Page 18
Jika sudah disimpan, maka kita buka Command Prompt, lalu pindahkan alamat ke folder BIN pada TASM. Lalu ketikkan tasm nama_file.asm. Maka akan muncul seperti di bawah ini :
Jika sudah tidak ada pesan error, maka kita lanjutkan dengan mengetikkan tlink nama_file. Maka hasilnya akan seperti dibawah ini :
Kemudian kita ketikkan tlink /t nama_file. Maka hasilnya akan seperti berikut ini :
Langkah terakhir adalah dengan mengetikkan debug nama_file.com. Hasil yang didapat adalah sebagai berikut ini :
Penekanan "r" pada saat pertama kali digunakan untuk melihat nilai pada semua register. Pada baris pertama dapat dilihat register yang dinamakan sebagai general purpose (AX,BX,CX dan DX). Register SP yang digunakan pada operasi stack menunjukkan nilai FFFE (akhir dari Segment), jadi operasi stack nantinya akan ditaruh pada posisi tersebut. [Type text]
Page 19
Pada baris kedua, keempat register segment, yaitu DS,ES,SS dan CS menunjukkan nilai yang sama yaitu 3597 (mungkin berbeda pada tiap komputer). Hal ini dikarenakan program yang dibuat adalah program com yang hanya menggunakan 1 segment. Pada baris kedua dapat juga dilihat register IP bernilai 100h. Register IP menunjukkan bahwa kita sekarang sedang berada pada offset ke 100h dari segment aktif (CS:IP atau 3597:100). Pada baris ketiga, nilai 3597:0100 menunjukkan pasangan dari CS:IP. Setelah itu nilai B415 yang menujukkan isi dari alamat 3597:0100 adalah B4 sedangkan isi dari alamat 3597:1001 adalah 15. Nilai B415 ini sebenarnya merupakan suatu bahasa mesin untuk instruksi MOV AH,15. Jadi bahasa mesin untuk perintah "MOV AH,nilai" adalah B4 disertai nilai tersebut. Dari nilai B415 ini dapat diketahui bahwa perintah MOV akan menggunakan 2 byte di memory. Setelah itu ketik 't' untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan CS:IP (MOV AH,15), hasilnya adalah sebagai berikut:
Terlihat bahwa nilai AX berubah dari 0000 menjadi 1500 setelah mendapat perintah MOV AH,15. Tekanlah 't' disertai enter untuk melihat perubahan nilai pada register-register yang bersangkutan.
Pengurangan Program ini bila dijalankan akan mencetak karakter "Z" sampai "A" menggunakan decrement sebagai pengurangannya: .MODE SMALL . CODE ORG 100h PROSES: MOV AH, 02
; Nilai Servis
MOV DL, ‘Z’
; DL = 5Ah
MOV CX, 26
; Banyaknya pengulangan yang akan dilakukan
[Type text]
Page 20
Ulang: INT 21h
; Cetak Karakter
DEC DL
; Kurang DL dengan 1
LOOP Ulang
; Lompat ke Ulang
INT 20H END
PROSES
Hasil dari program di atas adalah: ZYXWVUTSRQPONMLKJIHGFEDCBA
Perkalian Pada program ini. kita mendefinisikan angka untuk variabel 'A'=1EF dan 'B'=2FE dengan DW. Karena tidak digunakan EQU, maka varibel 'A' dan 'B' dapat dirubah bila diinginkan.
Pembagian
[Type text]
Page 21
Program sederhana yang memproses bilangan 16 bit. .MODEL SMALL .CODE ORG 100h TData : JMP
Proses A B Hsl Sisa
; Lompat ke Proses DW 01EFh DW 2 DW ? DW ?
SUB
DX,DX
; Jadikan DX=0
Proses:
MOV AX,A
; AX=1EF
DIV
; Bagi 1EF:2
B
MOV Hsl,AX
; AX bernilai 00F7 sehingga Hsl=00F7
MOV Sisa,DX
; DX berisi 0001 sehingga Sisa=0001
INT 20h
; Kembali ke DOS
END Tdata
Cobalah gunakan perintah trace dengan debug untuk melihat hasil yang didapat pada register AX dan DX
OPERASI LOGIKA Contoh program yang menggunakan operasi Logika dapat dilihat di bawah ini: Operator AND MOV DL, 61 MOV AH, 02 INT 21 AND DL, 0DF INT 21 INT 20
[Type text]
Page 22
Program di atas akan melakukan pencetakan huruf a kecil kemudian dilanjutkan dengan A besar. Yang dilakukan komputer dalam hal ini adalah dengan proses AND terhadap bit kelima dari 61 hexa (ASCII a kecil) menjadi 41 hexa (ASCII A besar), dimana proses AND itu sendiri adalah: 61(16) = 01100001(2) DF(16) = 11011111(2) AND = 01000001(2) = 41(16) Dalam kode ASCII 41h akan menghasilkan huruf A besar.
Operator OR MOV DL, 41 MOV AH, 02 INT 21 OR DL, 20 INT 21 INT 20
Program di atas akan menghasilkan huruf A besar kemudian a kecil.
Lompatan (Jump) .MODEL SMALL .CODE ORG 100h TData : JMP Proses Kal DB ' Lucky Luck menembak ',13,10 DB 'Lebih cepat dari bayangannya !! ',7,7,'*' Proses: XOR BX,BX
; BX=0
MOV AH,02h
; Servis Untuk Cetak Karakter
CMP Kal[BX],'*'
; Bandingkan dengan '*'
Ulang:
[Type text]
Page 23
JE Exit
; Jika Sama Lompat ke Exit
MOV DL,Kal[BX]
; Masukkan karakter ke BX menuju DL
INT 21h
; Cetak karakter
INC BX
; Tambah 1 pada BX
JMP Ulang
; Lompat Ke Ulang
Exit : INT 20h
; Selesai ! kembali ke DOS
END TData
Bila program dijalankan, maka pada layar akan ditampilkan: Lucky Luck menembak Lebih cepat dari bayangannya !!
Angka 7 pada akhir kalimat digunakan untuk menghasilkan suara beep.
P4.3 Latihan Buatlah program sederhana menggunakan Turbo Assembler untuk membuat program Assembler yang menghasilkan output sebagai berikut: Aritmatika 1. Pertambahan 1+1 = 2 2+1 = 3 3+1 = 4 4+1 = 5 2. Pengurangan Buatlah output seperti di bawah ini menggunakan DEBUG. ZYXWVUTSRQPONMLKJIHGFEDCBA
3. Perkalian 1*1 = 1 [Type text]
Page 24
2*1 = 2 3*1 = 3 ….. dst sampai dengan 10 4. Pembagian 1:1 = 1 2:1 = 2 3:1 = 3 …. dst sampai dengan 10 Logika Buatlah program yang mencetak huruf dengan menggunakan operator: 1. Operator AND 2. Operator OR 3. Operator XOR
Lompatan Buatlah program yang menggunakan perintah lompatan (Jump) yang mencetak kalimat secara perkarakter.
P4.4 Daftar Pustaka Lukito, Ediman. Dasar-dasar Pemrograman dengan Assembler 8088. PT. Elex Media Komputindo. Jakarta. 1990.
Pemrograman Bahasa Assembly Edisi Online Versi 1.0. Agustus 2011. http://www.scribd.com/doc/46495287/Sto-Assembly
[Type text]
Page 25