BAB 8
OPERASI LOGIKA
Ada empat operasi logika yang sering dilakukan, yaitu AND, OR, XOR dan NOT, dimana pada masing-masing operasi dilakukan untuk
pengaturan bit pada suatu data biner.
Operasi AND
Operasi AND sering digunakan untuk operasi masking bit tertentu menjadi nol, maupun untuk mendeteksi apakah suatu bit aktif atau tidak, setelah dilakukan operasi AND, maka akan diperiksa ZF=1, jika benar artinya bit tersebut tidak aktif. Adapun operasi dari AND adalah sebagai berikut:
0 and 0 = 0 0 and 1 = 0 1 and 0 = 0 1 and 1 = 1
Contoh:
MOV AL, 'a' ; AL = 01100001b
AND AL, 11011111b ; AL = 01000001b ('A') RET
Operasi AND juga dapat digunakan untuk menghitung sisa bagi dest := dest MOD 2n
and ax, 3 ;AX := AX mod 4 and ax, 0Fh ;AX := AX mod 16 and ax, 1Fh ;AX := AX mod 32 and ax, 3Fh ;AX := AX mod 64 and ax, 7Fh ;AX := AX mod 128 mov ah, 0 ;AX := AX mod 256 ; (Same as ax and 0FFh)
Operasi OR
Operasi OR sering digunakan untuk operasi masking bit tertentu menjadi satu, adapun operasi OR adalah sebagai berikut:
0 or 0 = 0 0 or 1 = 1 1 or 0 = 1 1 or 1 = 1
Example:
MOV AL, 'A' ; AL = 01000001b
OR AL, 00100000b ; AL = 01100001b ('a') RET
Perintah OR juga sering digunakan untuk memeriksa apakah suatu register berisi nilai
Contoh:
CMP AX, 0 dapat ditulis juga OR AX, AX
Operasi XOR
Operasi OR sering digunakan untuk membalikkan kondisi bit tertentu, maupun untuk
menolkan suatu register, misalnya penulisan MOV AX, 0 dapat diganti dengan XOR
AX,AX,
B80000 MOV AX,0000
31C0 XOR AX,AX ;lebih efisien
Dalam hal ini XOR AX, AX lebih pendek dari pada MOV AX,0 Adapun operasi dari XOR adalah sebagai berikut :
0 xor 0 = 0 0 xor 1 = 1 1 xor 0 = 1 1 xor 1 = 0
Contoh:
MOV AL, 00000111b
XOR AL, 00000010b ; AL = 00000101b RET
Operasi NOT
Operasi NOT digunakan untuk membuat bilangan komplemen satu yaitu membalikan
keaktifkan bit, adapun operasi NOT adalah sebagai berikut:
NOT 0 = 1 NOT 1 = 0
Contoh:
MOV AL, 00011011b NOT AL ; AL = 11100100b
Pemakaian Operasi Logika
bit 9-11 RS-232 serial port yang terdeteksi 000=0, 001=1, ... 100=4 ... 111=7 bit 12 1 = adapter game (joystick) terdeteksi oleh POST bit 13 (hanya pada PCjr) 1 = printer serial terpasang bit 14- 15 jumlah dari port printer parallel 00=0, 01=1, 10=2, 11=3 Sehingga untuk mendeteksi keberadaan drive disket kita dapat melakukan operasi AND word settting tersebut diatas dengan nilai $1, jika hasil operasi tersebut not zero (zero flag), maka berarti disk drive terpasang. Untuk mendeteksi keberadaan coprocessor dapat dilakukan dengan melakukan operasi And word setting tersebut diatas dengan nilai $2.
Operasi logika pada x86
Tata cara penulisan operasi logika pada x86 dan register flag yang terpengaruh ditunjukan pada tabel berikut ini: Format instruksi Fungsi Flags terpengaruh AND dest, src operasi logika and dari dua operand, dan mengembalikan hasil pada dest. CF, OF, PF, SF, ZF (AF tak terdefinisi) OR dest, src operasi logika or dari dua operand, dan mengembalikan hasil pada dest. CF, OF, PF, SF, ZF (AF tak terdefinisi) XOR dest, src operasi logika or dari dua operand, dan mengembalikan hasil pada dest. CF, OF, PF, SF, ZF (AF tak terdefinisi) NOT dest mengembalikan invers bit pada dest TEST dest, src melakukan operasi AND dari dua operand dan mengupdate register CF, OF, PF, SF, ZF (AF tak terdefinisi) flag, tetapi tidak mengembalikan hasil pada dest.
-a 100
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B46 ES=0B46 SS=0B46 CS=0B46 IP=0103 NV UP EI PL NZ NA PO NC
0B46:0103 8ED8 MOV DS,AX -t
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0040 ES=0B46 SS=0B46 CS=0B46 IP=0105 NV UP EI PL NZ NA PO NC 0B46:0105 A11000 MOV AX,[0010] DS:0010=C822
-t
AX=C822 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0040 ES=0B46 SS=0B46 CS=0B46 IP=0108 NV UP EI PL NZ NA PO NC 0B46:0108 250100 AND AX,0001
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
Operasi tersebut diatas dapat dijelaskan bahwa pada awalnya akan diduplikasi nilai 0040 ke register AX, kemudian nilai dari register AX akan diduplikasi ke register DS, dan akan diduplikasi nilai dari lokasi memori 0040:0010 ke register AX, dan kemudian akan dilakukan operasi AND register AX dengan nilai $1. Berdasarkan hasil T (Trace) yang dilakukan terlihat bahwa hasil akhir register AX adalah 0000 dan ZR (Zero flag aktif), berarti bahwa tidak ada drive disket yang terpasang.
org 100h mov dx, offset ada jmp cetak
cetak_tidak_ada:
mov dx, offset tidak_ada cetak:
mov ah,9h int 21h mov ah,4ch int 21h
ada db 'ada coprocessor.',0dh,0ah,'$'
tidak_ada db 'tidak ada coprocessor.',0dh,0ah,'$'
Adapun program tersebut diatas dapat dijelaskan bahwa pada awalnya akan didorong nilai register DS ke stack, kemudian duplikasi nilai 40 ke register AX, kemudian diduplikasi nilai AX ke DS, kemudian diduplikasi isi memori yang ditunjuk oleh DS: [0010] dalam hal ini adalah 0040:1000 ke register AX, dan kemudian register AX di AND dengan nilai $2, dan tarik kembali nilai dari stack ke register DS, berdasarkan hasil operasi AND akan diuji nilai Zero flag, jika aktif akan dicetak ‘tidak ada coprocessor’ dan sebaliknya akan dicetak ‘ada coprocessor’. Sesuatu hal yang perlu diingat bahwa perintah TEST tidak menyimpan nilai hasil operasi, tetapi hanya mempengaruhi flag. Perintah test dapat digunakan untuk memeriksa apakah suatu register bernilai nol atau tidak, contoh: Sesuatu hal yang perlu diingat bahwa operasi TEST tidak menyimpan nilai hasil operasi, tetapi hanya mempengaruhi flag. Test dapat digunakan untuk memeriksa apakah suatu register bernilai nol atau tidak.
85C0 TEST AX,AX 3D0000 CMP AX,0000
Dalam hal ini TEST AX,AX lebih pendek dibandingkan dengan CMP AX,AX.
Latihan
1 shift sebelah kiri ditekan 2 ctrl ditekan
3 alt ditekan
4 keaktifkan ScrollLock 5 keaktifan NumLock 6 keaktifkan CapsLock 7 Keaktifan Insert
1. Buatlah program Assembly yang dapat menampilkan pesan keaktifan tombol
CapsLock (CapsLock Aktif, CapsLock tidak Aktif).
2. Buatlah program Assembly yang menon-aktifkan tombol Capslock 3. Buatlah program Assembly yang mengaktifkan tombol NumLock 4. Buatlah program Assembly yang dapat membalikkan status tombol Capslock (On
menjadi Off dan sebaliknya).
5. Modifikasi soal latihan nomor tiga bab sebelumnya agar password yang dimasukan tidak case sensitif.
LATIHAN TAMBAHAN
CGA video memori untuk text mode terdapat dilokasi memori B800:0000 s/d B800:0F9F untuk halaman pertama. Masing-masing karakter yang ditampilkan pada layar terdiri dari menggunakan satu WORD, yaitu low byte adalah nilai ASCII dari karakter, dan high byte
adalah atribut (background dan foreground). Misalnya pada posisi baris 0, kolom 0 ditampilkan huruf A dengan warna latarbelakang black dan warna tulisan light gray, maka isi memori B800:0000 adalah $41 dan isi memori B800:0001 adalah $07.
1. Buatlah program yang dapat mengubah atribut layar menjadi latarbelakang
merah dan warna tulisan light gray tanpa mengubah tulisan yang ada. 2. Buatlah program yang dapat mengubah karakter pada layar menjadi huruf
besar semua.
3. Buatlah program yang dapat mengubah karakter pada layar menjadi huruf
kecil semua.
4. Dengan menggunakan nested loop, buatlah program yang dapat menampilkan
urutan angka berikut : 12345 54321
5. Buatlah program yang dapat menampilkan suatu daftar ASCII dengan tampilan