%A&A PE$'A$&A(
Walaupun bahasa tingkat tinggi terus berkembang dengan segala fasilitas dan kemudahannya, peranan bahasa pemrograman tingkat rendah tetap tidak dapat digantikan. Bahasa assembly mempunyai keunggulan yang tidak mungkin diikuti oleh bahasa tingkat apapun dalam hal kecepatan, ukuran file yang kecil serta kemudahan dalam manipulasi sistem komputer. Buku ini disusun berdasarkan pengalaman dari penulis sendiri dalam menggunakan bahasa assembler. Oleh karenanya buku ini disusun dengan harapan bagi anda yang tidak tahu sedikitpun tentang assembly dapat belajar sehingga assembler akan tampak sama mudahnya dengan bahasa tingkat tinggi. Setiap penjelasan pada buku ini akan disertai dengan contoh program yang sesederhana dan semenarik mungkin agar mudah dimengerti. Selain itu juga diberikan !P" !P dan #!$ dalam pemrograman %
ED)S) O$*)$E
Setelah melalui beberapa kali cetakan di P &ramedia, buku ini tidak mengalami cetakan lanjutan lagi dan mempertimbangkan cukup banyak yang tertarik dengan buku ini, maka saya memutuskan untuk mempublikasikannya secara online dan memberikannya secara gratis sehingga perpanjangan percetakan ke &ramedia tidak akan dilakukan lagi untuk buku ini. 'disi online ini bisa terlaksana berkat partisipasi dari teman kita melalui milist (asakom Ari# $opi + yang biasa menggunakan nick (agila yang telah meluangkan
nophiee)yahoo.com *
+aktunya yang begitu banyak untuk mengedit ,ersi buku online ini. -elalui ini saya ucapkan banyak terima kasih yang tak terhingga atas kesediaannya menjadi sukarela+an demi kemajuan anak"anak bangsa. Anda diijinkan untuk mendistribusikan buku ini secara bebas asalkan tidak merubah sedikitpun isi yang ada di buku edisi online. .ntuk mendistribuksikannya ataupun saran dan kritik anda bisa menghubungi penulis melalui email sto)pobo/es.com atau sto)jasakom.com
D)S%E& P(O'(A3
Buku ini disertai dengan disket program sehingga memudahkan anda yang ingin mencoba program"program didalam buku ini. Semua listing program dalam buku ini disimpan pada directory AS-. 1isting program telah diuji semua oleh penulis dan anda dapat memperoleh hasil jadinya dalam bentuk 2O- maupun '3' pada directory 2O-. Selain itu penulis juga menyadari bah+a bahasa assembler adalah bahasa yang ra+an. 4engan sedikit kesalahan saja misalkan anda lupa mengakhiri program dengan suatu interupsi atau kesalahan dalam pemakaian interupsi, komputer akan menjadi 5hang5. entunya akan sangat membosankan bila anda harus selalu mem"boot ulang komputer setiap kali menjalankan program anda yang ternyata salah. .ntuk itulah penulis membuat sebuah program yang sangat sederhana dengan ukuran file sekecil mungkin untuk membantu anda. Program tersebut bisa anda dapatkan pada disket program dengan nama S6.2O-. Program S6 merupakan sebuah program residen 7akan anda pelajari pada bab 08* yang akan membelokkan ,ektor interupsi 9:h7PrtScr*. Sebelum anda mulai bereksperimen dengan program"program assembly, jalankanlah dahulu program S6.2O- dengan cara; 2;<S6 =enter> Setelah program S6 dijalankan maka setiap kali program anda mengalami kemacetan anda tinggal menekan tombol PrtScr. ombol PrtScr akan segera memaksa program tersebut segera kembali ke 4OS sehingga anda tidak perlu mem" Boot ulang komputer anda. Program S6 dibuat dengan cara sesederhana dan sekecil mungkin 7hanya ?1@ Byte* sehingga anda tidak perlu kha+atir akan kekurangan memory. 1isting program S6 sengaja tidak disertakan karena diharapkan setelah anda membaca bab 087tentang residen* anda sudah bisa membuat program semacam ini. Bila anda ingin melihat listing dari program S6 ini anda bisa menggunakan program seperti S#.'3'7khusus untuk melihat listing*, 4'B.&.'3' atau 4.'3'7Bab 0A*.
Sto
BAB ) B)*A$'A$
1.1. BE(BA'A) .E$)S B)*A$'A$
4idalam pemrograman dengan bahasa assembler, bisa digunakan berbagai jenis bilangan. (enis bilangan yang bisa digunakan, yaitu; Bilangan biner, oktaf, desimal dan he/adesimal. Pemahaman terhadap jenis"jenis bilangan ini adalah penting, karena akan sangat membantu kita dalam pemrograman yang sesungguhnya.
K 1111 1111 K G 0:: K "1 K K 1111 1119 K G 0:8 K "0 K K 1111 1191 K G 0:B K "B K K 1111 1199 K G 0:0 K "8 K K 1111 1911 K G 0:1 K ": K K 1111 1919 K G 0:9 K "@ K G""""""""""""G"""""""""""""""G"""""""""""""""G 'ambar 1.1. Bilangan Bertanda dan &ida2
BAB )) 3E3O()
-emori dengan komputer memiliki hubungan yang tak dapat dipisahkan, karena setiap komputer memerlukan memori sebagai tempat kerjanya. -emori ini dapat berfungsi untuk memuat program dan juga sebagai tempat untuk menampung hasil proses. Lang perlu kita perhatikan bah+a memori untuk menyimpan program maupun hasil dari pekerjaan bersifat ,olatile yang berarti bah+a data yang disimpan cuma sebatas adanya aliran listrik. (adi bila listrik mati maka hilang pulalah semua data yang ada di dalamnya. Cal ini mengakibatkan diperlukannya media penyimpan kedua yang biasanya berupa disket maupun hard disk.
,.1. 3icroprocessor
Pada !B-"P2 terdapat suatu bagian penting yang disebut microprocessor atau yang sering disebut processor saja. Processor ini berfungsi untuk menangani keseluruhan dari kerja komputer kita. Pada processor inilah segala hal yang berhubungan dengan kerja komputer diatur dan dibagi prioritasnya dengan baik agar tidak terjadi kesalahan yang kemudian akan menyebabkan kacaunya informasi yang diperoleh. 1ama kelamaan tugas komputer tentu saja makin bertambah baik dari segi kuantitas maupun kerumitannya. Sejalan dengan itu processor juga makin dikembangkan. Processor yang baru sebenarnya hanyalah perbaikan dan pengembangan dari yang ,ersi lama sehingga semua instruksi yang berlaku di processor lama dapat pula dikerjakan oleh yang baru dengan tentu saja beberapa keunggulan. Adapun processor yang kini banyak beredar di pasaran ; " ?9?? M ?9?@ ; !ni merupakan processor !B-"P2 yang pertama sekali atau yang sering disebut 3 . Processor ?9?? menggunakan jalur bus data ? bit sedangkan ?9?@ menggunakan 1@ bit. Pe rbedaan jalur bus ini menyebabkan perbedaan jumlah data yang dikirim pada satu saat dan secara langsung mengakibatkan speed ?9?@ berada di atas ?9??. Baik ?9?? maupun ?9?@ mampu mengalamatkan memori hingga 1 -B. " ?90?@ ; 6ersi pengembangan dari ?9?@. Pada ?90?@ ini beberapa instruksi baru ditambahkan. Selain itu dengan jalur bus yang sama dengan ?9?@, ?90?@ dirancang mempunyai speed di atas ?9?@. Selain itu ?90?@ dapat bekerja pada 0
mode yaitu mode real dan protected. -ode real pada ?90?@ dapat beroperasi sama seperti ?9?? dan ?9?@ hanya terdapat perbedaan dalam hal speed. -ode real ini dimaksudkan agar semua soft+are yang dapat dioperasikan pada ?9??N?9?@ dapat pula dioperasikan dengan baik di ?90?@. Pada mode protected ?90?@ mampu mengalamatkan sampai 1@ -B memori. " ?9B?@ ; Processor ?9B?@ merupakan sesuatu yang sangat baru dibanding ?90?@ sebab bus data yang digunakan di sini sudah B0 bit sehingga speednya juga jauh di atas ?90?@. Selain itu pada ?9B?@ ditambahkan pula sebuah mode pemrograman baru yaitu mode ,irtual. Pada mode ,irtual ini ?9B?@ mampu mengalamatkan sampai 8 &B memori. Sama seperti ?90?@, mode real dimaksudkan untuk kompatibilitas dengan ?9??N?9?@ dan mode protected untuk menjaga kompatibilitas dengan ?90?@.
? #AE #AA '3 'D4'4 6!4'O -'-O#! B '3 'D4'4 6!4'O -'-O#L 2 P'#1.ASAD #O4 H.D&S! 1A!D ' H.D&S! 1A!D H B!OS M BAS!2 """"""""""""""""""""""""""""""""""""""""""""""""""" 'ambar ,.1. Pembagian blo2 memori )B3 P5
19
Sekarang kita lihat bagaimana sebenarnya letak suatu segmen dalam memori komputer kita. Segmen 9999h bera+al dari lokasi memori 9 hingga @::B: 7 @8 $B *. Segmen 9991h bera+al dari lokasi memori 1@ 79919h* hingga @:::1 7@::B: G 1@*. Segmen 9990h bera+al dari lokasi B0 hingga @::@A. 4emikian seterusnya. $ita lihat bah+a sistem penempatan segmen semacam ini akan menyebabkan ter" Segmen Offset 9999 G""""""""""""""""""""G9999 K K 9991 G"""""G"""""""""""""G9999 K991@ K K K 9990G"""""G""""""""""""G9999 K991@ K99B0 K K K K 999BG"""""G"""""""""""G9999 K991@ K99B0 K998? K K K K K K K ; ; ; K ; ; ; ; K ; K K K K K K G""""""G@::B: ; K K K ; K G""""""G@::B: K K K K G""""""G@::B: K K G"""""""""""""""""G@::B: 'ambar ,.,. Peta O:erlapping Segmen jadinya o,erlapping 7tumpang"tindih* di mana lokasi offset 9919h bagi segmen 9999h akan merupakan offset 9999h bagi segmen 9991h. 4emikian pula offset 9911h bagi segmen 9999h akan merupakan offset 9991h bagi segmen 9991h. 4alam pembahasan selanjutnya akan kita lihat bah+a a da banyak nilai segmen;offset yang dapat digunakan untuk menyatakan suatu alamat memori tertentu disebabkan adanya o,erlapping ini. .ntuk lebih jelasnya dapat kita lihat pada gambar 0.0.
11
1B:A9 1B:@9 08@? 08A? """"""" """"""" Alamat absolut ; 1:E4?h 1:E4?h Pada kedua contoh di atas terlihat jelas alamat relatif 1B:Ah;08@?h sebenarnya menunjukkan lokasi yang sama dalam memori dengan alamat relatif 1B:@h;08A?h yang disebut o,erlapping. Alamat yang o,erlapping ini menyebabkan sebuah alamat absolute dapat dinyatakan dengan alamat segmen;offset yang ber,ariasi sebanyak 0 pangkat 10 atau sebanyak 89E@ ,ariasi. 6ariasi untuk alamat absolute ; 9 " 1: dapat dinyatakan dengan 1 ,ariasi 1@ " B1 dapat dinyatakan dengan 0 ,ariasi B0 " 8? dapat dinyatakan dengan B ,ariasi ; ; @::09 keatas dapat dinyatakan dengan 89E@ ,ariasi.
10
1B
G"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""G K Domor Dama Domor Dama K K !nterupt !nterupt !nterupt !nterupt K G"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""G K O99h 4i,ide By Pero 19h 6ideo Ser,ice K K O91h Single Step 11h 'Quipment 2heck K K O90h Don -askable!nt7D-!* 10h -emory SiRe K K O9Bh Break point 1Bh 4isk Ser,ice K K 98h Arithmatic O,erflo+ 18h 2ommunication 7#S"0B0*K K 9:h Print Screen 1:h 2assette Ser,ice K K 9@h #eser,ed 1@h $eyboard Ser,ice K K 9Ah #eser,ed 1Ah Printer Ser,ice K K 9?h 2lock ick7 imer* 1?h #O- Basic K K 9Eh $eyboard 1Eh Bootstrap 1oader K K 9Ah !NO 2hannel Action 1Ah B!OS time M date K K 9Bh 2O- 1 7serial 1* 1Bh 2ontrol Break K K 92h 2O- 0 7serial 0* 12h imer ick K K 94h Hi/ed 4isk 14h 6ideo !nitialiRation K K 9'h 4iskette 1'h 4isk Parameters K K 9Hh 1P 1 7Parallel 1* 1Hh &raphics 2har K G"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""G 'ambar 7.1. B)OS )nterr!pt O !nterrupt ini telah dipastikan kegunaannya oleh sistem untuk keperluan yang khusus , tidak boleh dirubah oleh pemrogram seperti yang lainnya. " 4'6!4' BL P'#O ; (ika terjadi pembagian dengan nol maka proses akan segera dihentikan. " S!D&1' S 'P ; .ntuk melaksanakan N mengeksekusi intruksi satu persatu. " D-! ; Pelayanan terhadap D-! 7Don -askable !nterrupt* yaitu interupsi yang tak dapat dicegah. " B#'A$ PO!D ; (ika suatu program menyebabkan o,erflo+ flag menjadi 1 maka interrupt ini akan melayani pencegahannya dan memberi tanda error.
18
G"""""""""""""""""""""""""""""""""""""""""""G K Domor Dama !nterrupt K K !nterrupt K G"""""""""""""""""""""""""""""""""""""""""""G K 09h erminate Program K K 01h 4OS Hunction Ser,ices K K 00h erminate 2ode K K 0Bh 2trl"Break 2ode K K 08h 2ritical 'rror Candler K K 0:h Absolute 4isk #ead K K 0@h Absolute 4isk Write K K 0Ah erminate But Stay #esident K G"""""""""""""""""""""""""""""""""""""""""""G 'ambar 7.,. DOS )nterr!pt 4idalam pemrograman dengan bahasa assembler kita akan banyak sekali menggunakan interupsi untuk menyelesaikan suatu tugas.
1:
BAB )V (E')S&E(
8.1.PE$'E(&)A$ (E')S&E(
4alam pemrograman dengan bahasa Assembly, mau tidak mau anda harus berhubungan dengan apa yang dinamakan sebagai #egister. 1alu apakah yang dimaksudkan dengan register itu sebenarnya J. #egister merupakan sebagian memori dari mikroprosesor yang dapat diakses dengan kecepatan yang sangat tinggi. 4alam melakukan pekerjaannya mikroprosesor selalu menggunakan register"register sebagai perantaranya, jadi register dapat diibaratkan sebagai kaki dan tangannya mikroprosesor.
8.,..E$)S;.E$)S (E')S&E(
#egister yang digunakan oleh mikroprosesor dibagi menjadi : bagian dengan tugasnya yang berbeda"beda pula, yaitu ;
1@
ini secara umum digunakan sebagai penunjuk atau pointer terhadap suatu lokasi di memory. #egister SP 7Stack Pointer* yang berpasangan dengan register segment SS7SS;SP* digunakan untuk mununjukkan alamat dari stack, sedangkan register BP 7Base Pointer*yang berpasangan dengan register SS7SS;BP* mencatat suatu alamat di memory tempat data. #egister S) 7Source !nde/* dan register D) 74estination !nde/* biasanya digunakan pada operasi string dengan mengakses secara langsung pada alamat di memory yang ditunjukkan oleh kedua register ini. Pada prosesor ?9B?@ terdapat tambahan register B0 bit, yaitu 'SP,'BP,'S! dan '4!.
1A
1?
" AH =Au/iliary Hlag>. 4igunakan oleh operasi B24, seperti pada perintah AAA. " D =Dested ask>. 4igunakan pada prosesor ?90?@ dan ?9B?@ untuk menjaga jalannya interupsi yang terjadi secara beruntun. " !OP1 =!NO Protection le,el>. Hlag ini terdiri atas 0 bit dan digunakan pada prosesor ?90?@ dan ?9B?@ untuk mode proteksi. Adapun susunan dari masing"masing flag didalam flags register dapat anda lihat pada gambar 8.0. Pada prosesor ?90?@ dan ?9B?@ keatas terdapat beberapa tambahan pada flags register, yaitu ; " P' =Protection 'nable>. 4igunakan untuk mengaktifkan mode proteksi. flag ini akan bernilai 1 pada mode proteksi dan 9 pada mode real. " -P =-onitor 2oprosesor>. 4igunakan bersama flag S untuk menangani terjadinya intruksi WA! . " '- ='mulate 2oprosesor>. Hlag ini digunakan untuk mensimulasikan coprosesor ?90?A atau ?9B?A. " S = ask S+itched>. Hlag ini tersedia pada ?90?@ keatas. " ' ='/tension ype>. Hlag ini digunakan untuk menentukan jenis coprosesor ?90?A atau ?9B?A. " #H =#esume Hlag>. #egister ini hanya terdapat pada prosesor ?9B?@ keatas. " 6H =6irtual ?9?@ -ode>. Bila flag ini bernilai 1 pada saat mode proteksi, mikroprosesor akan memungkinkan dijalankannya aplikasi mode real pada mode proteksi. #egister ini hanya terdapat pada ?9B?@ keatas.
1E
-.,. 5O3P)*E(
Source file AS2!! yang telah anda ketikkan perlu dicompile kebentuk file object dengan e/tensi .OB(, dari file object inilah nantinya dapat dijadikan kebentuk file .'3' atau .2O-. .ntuk mengcompile source file, misalnya file 2OBA.AS- menjadi file object dengan e/tensi .OB( bisa anda gunakan file AS-.'3' dengan mengetikkan; 5"?@tasm coba &!rbo Assembler Version ,. 1BB Borland )nternational Assembling #ile" coba.AS3 Error messages" $one Darning messages" $one Passes" 1 (emaining memory" 7 E2 5"?@dir coba.F Vol!me in dri:e 5 is Sto Directory o# 5"? 5OBA OB. 1,= =;1,;B8 1 "8,p 5OBA AS3 1,= =;1,;B8 1 "81p , #ile+sA ,8G bytes 1C =-CB-, bytes #ree 5opyright +cA 1B==C
-.7. *)$'%)$'
Hile object yang telah terbentuk dengan AS-, belum dapat dieksekusi secara langsung. .ntuk membuat file object ke bentuk file yang dapat dieksekusi7ektensi .2O- atau .'3'* bisa anda gunakan file 1!D$.'3'. Bila source program yang anda buat dalam bentuk '3' maka untuk membentuk
09
file dengan ektensi '3' bisa anda ketikkan ; 5"?@tlin2 coba &!rbo *in2 Version 7. 5opyright +cA 1B=EC 1BB Borland )nternational Bila source program yang dibuat adalah file 2O-, maka bisa anda ketikkan; 5"?@tlin2/t coba &!rbo *in2 Version 7. 5opyright +cA 1B=EC 1BB Borland )nternational
01
,. B)$E( .ntuk menuliskan angka dalam bentuk biner79..1*, harus ditambahkan tanda IBI pada akhir angka tersebut, contoh ; 91199111 B. 7. 6E9ADES)3A* .ntuk menuliskan angka dalam bentuk he/adesimal79..E,A..H*, harus ditambahkan tanda ICI pada akhir angka tersebut. Perlu diperhatikan bah+a bila angka pertama dari he/a berupa karakter7A..H* maka angka nol harus ditambahkan didepannya. Bila hal ini tidak dilakukan, assembler akan menganggapnya sebagai suatu label, bukannya sebagai nilai he/a. 2ontoh penulisan yang benar; A10 6 , 0A90 6 . 8. %A(A%&E( Penulisan karakter atau string diapit oleh tanda petik dua 7 tanda petik satu7 I *, 2ontoh; I !ni adalah karakter I . H * atau
-.G. *ABE*
1abel bisa anda definisikan dengan ketentuan akhir dari nama label tersebut harus berupa tanda titik dua 7 " *. Pemberian nama label bisa digunakan; " Curuf ; A..P 7Curuf besar dan kecil tidak dibedakan* " Angka ; 9..E " $arakter khusus ; ) . S T Dama pada label tidak boleh terdapat spasi dan didahului oleh angka, 2ontoh dari penulisan label yang benar; m!lai" -O6 23,A. Dama label terpanjang yang dapat dikenali oleh assembler adalah B1 karakter.
-.E. %O3E$&A(
.ntuk memberikan komentar pada source file digunakan tanda I J I. Apapun yang dtuliskan dibelakang tanda I J I akan dianggap sebagai komentar, 2ontoh ; mulai; -O6 B3,A J beri2an nilai E pada B9
00
AC akan sama nilainya dengan A1 atau E. Pada baris ketiga7 3OV A9CB *, kita memberikan register A3 nilai E. $arena A3 terdiri atas AC dan A1, maka register AC akan bernilai 9, sedangkan A1 akan bernilai E. Perintah -O6 akan mengcopykan nilai pada sumber untuk dimasukan ke ujuan, nilai sumber tidaklah berubah. !nilah sebabnya -O67'* akan kita terjemahkan disini dengan mengcopy, dan bukannya memindahkan.
0B
)$& 09C E$D 1abel1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" 'ambar G.1. 3odel Program 5O3 Supaya lebih jelas bentuk dari program ideal, marilah kita telusuri lebih lanjut dari bentuk program ini.
08
; 5O3PA5& (ika data yang digunakan bisa lebih besar dari @8 $B tetapi codenya kurang dari @8 $B. ; *A('E (ika data dan code yang dipakai oleh program bisa lebih dari @8 $B. ; 64'E (ika data, code maupun array yang digunakan bisa lebih dari @8 $B. -ungkin ada yang bertanya"tanya mengapa pada program 2O- yang dibuat digunakan model S-A11 dan bukannya !DL J Cal ini disebabkan karena banyak dari compiler bahasa tingkat tinggi yang tidak bisa berkomunikasi dengan model !DL, sehingga kita menggunakan model S-A11 sebagai pemecahannya.
G.1., .5ODE
anda directi,e ini digunakan untuk memberitahukan kepada assembler bah+a kita akan mulai menggunakan 2ode Segment"nya disini. 2ode segment ini digunakan untuk menyimpan program yang nantinya akan dijalankan.
G.1.7. O(' 1
Pada program 2O- perintah ini akan selalu digunakan. Perintah ini digunakan untuk memberitahukan assembler supaya program pada saat dijalankan7diload ke memory* ditaruh mulai pada offset ke 199h70:@* byte. 4apat dikatakan juga bah+a kita menyediakan 199h byte kosong pada saat program dijalankan. 199h byte kosong ini nantinya akan ditempati oleh PSP7Program Segment Prefi/* dari program tersebut. PSP ini digunakan oleh 4OS untuk mengontrol jalannya program tersebut.
G.1.8. .3P
Perintah (-P7(.-P* ini digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah (.-P. Adapun synta/nya adalah; .43P &!1!an . 4imana tujuannya dapat berupa label seperti yang digunakan pada bagan diatas. -engenai perintah (.-P ini akan kita bahas lebih lanjut nantinya. Perintah (.-P yang digunakan pada bagan diatas dimaksudkan agar mele+ati tempat data program, karena jika tidak ada perintah (.-P ini maka data program akan ikut dieksekusi sehingga kemungkinan besar akan menyebabkan program anda menjadi Cang.
G.1.-. )$& , h
Perintah )$& adalah suatu perintah untuk menghasilkan suatu interupsi dengan synta/; )$& $o)nt !nterupsi 09h berfungsi untuk mengakhiri program dan menyerahkan kendali sepenuhnya kepada 4os. Pada program 2O- 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.
0:
0@
1C,GEC,
bytes #ree
Sampai disini sudah dihasilkan suatu file object dari $A1.AS- yang siap dijadikan file 2O-7karena kita membuat file dengan format program 2O-*. .ntuk itu lakukanlah langkah kedua, dengan perintah ; 5"?@tlin2/t a &!rbo *in2 Version 7. 5opyright +cA 1B=EC 1BB Borland )nternational 5"?@tlin2/t a &!rbo *in2 Version 7. 5opyright +cA 1B=EC 1BB Borland )nternational 5"?@dir a .F Vol!me in dri:e 5 is Sto Directory o# 5"? A A A A AS3 OB. 3AP 5O3 8 #ile+sA - G =;18;B8 7"-Gp 1EB =;18;B8 11",Gp ,,B =;18;B8 11",Gp = =;18;B8 11",Gp B,, bytes 1C,GGC1EG bytes #ree
Setelah kedua proses itu selesai maka dihasilkanlah suatu program 2Oyang sudah siap untuk dijalankan. Hile"file yang tidak digunakan bisa anda hapus. Bila program A.1. dijalankan maka pada layar akan ditampilkan 5"?@A A $ita lihat disini bah+a karakter yang tercetak adalah yang sesuai dengan kode AS2!! yang ada pada register 41. Sebagai latihan cobalah anda ubah register 41 dengan angka @: yang merupakan kode AS2!! karakter IAI. Casil yang didapatkan adalah sama. Pela1arilah fungsi ini baik"baik, karena akan banyak kita gunakan pada bab"bab selanjutnya.
0A
JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J P(O'(A3 " A1.AS3 J J <4$'S) " 3E$5E&A% %A(A&E( IAIJ J BESE(&A A&()B4&$>A J J DE$'A$ )$& 1 h J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKStoKJ .3ODE* S3A** .5ODE O(' 1 h Proses " 3OV A6C Bh J $ilai ser:is !nt!2 menceta2 2ara2ter 3OV A*CIAI J A* K %ara2ter yang a2an diceta2 3OV B6C h J $omor 6alaman layar 3OV B*CB7h J Darna ata! atrib!t dari 2ara2ter 3OV 59C 7h J Banya2nya 2ara2ter yang ingin diceta2 )$& 1 h J *a2sana2an NNN )$& , h E$D Proses J Selesai N 2embali 2e DOS Program E.,. 3enceta2 2ara2ter beserta atrib!tnya Bila program A.0. dieksekusi maka akan ditampilkan huruf IAI sebanyak B kali dengan +arna dasar biru kedip dan +arna tulisan 2yan7sesuai dengan nilai register B1*. -engenai halaman layar dan atribut7+arna* akan kita bahas lebih lanjut pada bagian yang lain. B"?@A1 AAA Anda bisa merubah"rubah register A1 dan B1 untuk merubah karakter dan +arna yang ingin dicetak.
0?
pada register 23 mencapai nol. Seperti pada contoh diatas, maka interupsi 19h akan dihasilkan sebanyak B kali7sesuai dengan nilai 23*. Perlu diperhatikan bah+a jangan sampai anda m enaruh 23 kedalam proses 1OOP karena hal ini akan menyebabkan nilai 23 diS' terus sehingga proses looping tidak bisa berhenti. &()5%" Bila anda menetapkan nilai 23 menjadi nol pada saat pertama kali sebelum dilakukan loop, maka anda akan mendapatkan proses looping yang terbanyak. Cal ini dikarenakan proses pengurangan 9 dengan 1 akan menghasilkan nilai HHHHh7" 1*, 2ontoh ; 3OV 59C 4lang" *OOP 4lang
Bila program A.B. dijalankan maka akan ditampilkan ; AB5DE<'6).%*3$OP Perintah )$5 D* akan menambah register 41 dengan 1, seperti intruksi , 41;F41G1 dalam Pascal. 1ebih jauh mengenai operasi aritmatika7!D2* ini akan dibahas pada bab selanjutnya.
0E
B9
=.1.,. AD5
Perintah A42 digunakan dengan cara yang sama pada perintah A44, yaitu ; AD5 &!1!anCAsal Perbedaannya pada perintah A42 ini ujuan tempat menampung hasil pertambahan ujuan dan Asal ditambah lagi dengan carry flag 7 ujuan;F ujuanGAsalG2arry*. Pertambahan yang demikian bisa memecahkan masalah seperti yang pernah kita kemukakan, seperti pertambahan pada bilangan 10B8:@A?hGEAB24'H9h. Seperti yang telah kita ketahui bah+a satu register hanya mampu menampung 1@ bit, maka untuk pertambahan seperti y ang diatas bisa anda gunakan perintah A42 untuk memecahkannya, 2ontoh; 3OV A9C1,78h J A9 K 1,78h 5< K 3OV B9CBAB5h J B9 K BAB5h 5< K
B1
3OV 59C-GE=h J B9 K -GE=h 5< K 3OV D9C DE< h J D9 K DE< h 5< K ADD 59CD9 J 59 K 7-G=h 5< K 1 AD5 A9CB9 J A9 K A9LB9L5< K A5<1 Casil penjumlahan akan ditampung pada register A3;23 yaitu A2H1B:@?h. Adapun flag"flag yang terpengaruh oleh perintah A44 dan A42 ini adalah 2H,PH,AH,PH,SH dan OH.
=.1.7. )$5
Perintah !D27!ncrement* digunakan khusus untuk pertambahan dengan 1. Perintah !D2 hanya menggunakan 1 byte memory, sedangkan perintah A44 dan A42 menggunakan B byte. Oleh sebab itu bila anda ingin melakukan operasi pertambahan dengan 1 gunakanlah perintah !D2. Synta/ pemakainya adalah ; )$5 &!1!an Dilai pada tujuan akan ditambah dengan 1, seperti perintah ujuan;F ujuanG1 dalam urbo Pascal. ujuan disini dapat berupa suatu register maupun memory. 2ontoh ; perintah !D2 A1 akan menambah nilai di register A1 dengan 1. Adapun flag yang terpengaruh oleh perintah ini adalah OH,SH,PH,AH dan PH.
B0
Program =.1. Operasi penambahan Setelah anda selesai mengetikkan program ?.1., jadikanlah program 2Odengan tasm dan tlinkNt.Setelah itu cobalah untuk melihat kebenaran dari apa yang sudah diberikan dengan menggunakan debug. Pertama"tama ketikkanlah ; 2;<> deb!g &ambah.com "r = tekan enter > A3F9999 B3F9999 23F99B9 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF9199 D6 .P '! P1 DP DA PO D2 B:EA;9199 B81: -O6 AC,1: "t = tekan enter > Penekanan 5 r 5 pada saat pertama kali digunakan untuk melihat nilai pada semua register. Pada baris pertama dapat anda lihat register yang dinamakan sebagai general purpose7A3,B3,23 dan 43*. #egister SP yang digunakan pada operasi stack menunjukkan nilai HHH'7akhir dari Segment*, jadi operasi stack nantinya akan ditaruh pada posisi tersebut. Pada baris kedua dapat anda lihat keempat register segment, yaitu 4S,'S,SS dan 2S. $eempat register segment menunjukkan nilai yang sama yaitu B:EA7mungkin berbeda pada komputer anda*. Cal ini dikarenakan program kita adalah program com yang hanya menggunakan 1 segment. Pada baris kedua dapat juga anda lihat register !P bernilai 199h. #egister !P menunjukkan bah+a kita sekarang sedang berada pada offset ke 199h dari segment aktif72S;!P atau B:EA;199*. Pada baris ketiga dapat anda lihat B:EA;9199, nilai ini menunjukkan pasangan dari 2S;!P. Setelah itu dapat anda lihat nilai B81: yang menujukkan isi dari alamat B:EA;9199 adalah B8 sedangkan isi dari alamat B:EA;1991 adalah 1:. Dilai B81: ini sebenarnya merupakan suatu bahasa mesin untuk instruksi -O6 AC,1:. (adi bahasa mesin untuk perintah H3OV A6CnilaiH adalah B8 disertai nilai tersebut. 4ari nilai B81: ini dapat diketahui bah+a perintah -O6 akan menggunakan 0 byte di memory. Setelah itu tekanlah ItI untuk mengeksekusi intruksi yang terdapat pada alamat yang ditunjukkan 2S;!P7-O6 AC,1:*. Setelah anda menekan ItI maka akan ditampilkan hasil setelah intruksi 5-O6 AC,1:5 dieksekusi ; A3F1:99 B3F9999 23F99B9 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF9190 D6 .P '! P1 DP DA PO D2 B:EA;9190 B998 -O6 A1,98 "t = enter > erlihat bah+a nilai A3 berubah dari 9999 menjadi 1:99 setelah mendapat perintah -O6 AC,1:. ekanlah ItI disertai enter untuk melihat perubahan nilai pada register"register yang bersangkutan. A3F1:98 B3F9999 23F99B9 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF9198 D6 .P '! P1 DP DA PO D2 B:EA;9198 90'9 A44 AC,A1 "t = enter > A3F1E98 B3F9999 23F99B9 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999
BB
4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF919@ D6 .P '! P1 DP DA PO D2 B:EA;919@ B?B810 -O6 A3,10B8 "t = enter > A3F10B8 B3F9999 23F99B9 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF919E D6 .P '! P1 DP DA PO D2 B:EA;919E BB01H0 -O6 B3,H001 "t = enter > A3F10B8 B3FH001 23F99B9 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF9192 D6 .P '! P1 DP DA PO D2 B:EA;9192 9B2B A44 A3,B3 "t = enter > A3F98:: B3FH001 23F99B9 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF919' D6 .P '! P1 DP DA P' 2L B:EA;919' B?B810 -O6 A3,10B8 "t = enter > A3F10B8 B3FH001 23F99B9 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF9111 D6 .P '! P1 DP DA P' 2L B:EA;9111 BBB2EA -O6 B3,EAB2 "t = enter > A3F10B8 B3FEAB2 23F99B9 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF9118 D6 .P '! P1 DP DA P' 2L B:EA;9118 BEA?:@ -O6 23,:@A? "t = enter > A3F10B8 B3FEAB2 23F:@A? 43F9999 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF911A D6 .P '! P1 DP DA P' 2L B:EA;911A BAH94' -O6 43,4'H9 "t = enter > A3F10B8 B3FEAB2 23F:@A? 43F4'H9 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF911A D6 .P '! P1 DP DA P' 2L B:EA;911A 9B2A A44 23,43 "t = enter > A3F10B8 B3FEAB2 23FB:@? 43F4'H9 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF9112 D6 .P '! P1 DP DA PO 2L B:EA;9112 1B2B A42 A3,B3 "t = enter > A3FA2H1 B3FEAB2 23FB:@? 43F4'H9 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF911' D6 .P '! D& DP A2 PO D2 B:EA;911' H'29 !D2 A1 "t = enter > A3FA2H0 B3FEAB2 23FB:@? 43F4'H9 SPFHHH' BPF9999 S!F9999 4!F9999 4SFB:EA 'SFB:EA SSFB:EA 2SFB:EA !PF9109 D6 .P '! D& DP DA PO D2 B:EA;9109 2409 !D 09 "O = enter > Pengetikan 5U5 menandakan bah+a kita ingin keluar dari lingkungan debug dan akan kembali ke a;<>.
.ntuk Operasi pengurangan dapat digunakan perintah S.B dengan synta/; S4B &!1!anCAsal Perintah S.B akan mengurangkan nilai pada ujuan dengan Asal. Casil yang didapat akan ditaruh pada ujuan, dalam bahasa pascal sama dengan instruksi &!1!an"K&!1!an;Asal . 2ontoh ; 3OV A9C1- J A9"K13OV B9C1, J B9"K1, S4B A9CB9 J A9"K1-;1,K7 S4B A9CA9 J A9K .ntuk menolkan suatu register bisa anda kurangkan dengan dirinya sendiri seperti S.B A3,A3.
=.,.,. SBB
Seperti pada operasi penambahan, maka pada operasi pengurangan dengan bilangan yang besar7lebih dari 1@ bit*, bisa anda gunakan perintah S.B disertai dengan SBB7Substract With 2arry*. Perintah SBB digunakan dengan synta/; SBB &!1!anCAsal Perintah SBB akan mengurangkan nilai ujuan dengan Asal dengan cara yang sama seperti perintah S.B, kemudian hasil yang didapat dikurangi lagi dengan 2arry Hlag7 ujuan;F ujuan"Asal"2H*. JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J P(O'(A3 " %4(A$'.AS3 J J A4&6O( " Sto J J <4$'S) " 3E$'4(A$'%A$ A$'%A J J 1,,E<<<; <E<<<< J J J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses J *ompat 2e Proses A*o EO4 E<<<h A6i EO4 1,,h B*o EO4 <<<<h Bhi EO4 <Eh 6sl*o DD P 6sl6i DD P Proses " 3OV A9CA*o J A9KE<<<h S4B A9CBlo J %!rang2an E<<<;<<<<C 1adi A9K< 3OV 6sl*OCA9 J 6sl*o bernilai < 3OV A9CA6i J A9K1,,h SBB A9CB6i J %!rang2an 1,,;<E;5arryC A9K ,7 3OV 6sl6iCA9 J 6sl6i bernilai ,7
B:
4isini dapat kita lihat begaimana caranya mendefinisikan suatu nilai constanta7nilai yang tidak dapat dirubah* dan ,ariabel dengan ; A*o EO4 E<<<h A6i EO4 1,,h B*o EO4 <<<<h Bhi EO4 <Eh 6sl*o DD P 6sl6i DD P Perintah 'U. digunakan untuk mendefisisikan suatu yang constan7 etap*, data yang telah didefinisikan dengan perintah 'U. tidak dapat dirubah. 4engan perintah 'U. kita mendefinisikan bah+a A1o F 9'HHH, ACiF100, B1oFHHHH dan BCiF9H'. .ntuk menampung hasil dari pengurangan A"B7100'HHH"H'HHH* nantinya, kita definisikan suatu tempat untuk menyimpannya dengan nama Csl1o dan CslCi. anda IJI digunakan untuk menyatakan bah+a tempat yang kita pesan sebanyak sebanyak 1 +ord7 DD * tidak diberikan data a+al yang akan terdapat pada ,aribel tersebut7Csl1o dan CslCi*. (adi data yang akan terdapat pada Csl1o dan CslCi bisa apa saja dan kita tidak mengetahuinya. empat data program kita lompati dengan perintah (-P supaya komputer tidak mengeksekusi data program sebagai perintah. 3OV A9CA*o S4B A9CBlo 3OV 6sl*OCA9 .ntuk mengurangkan angka 100'HHH dengan 9H'HHHH kita dapat mengurangkan +ord rendah dari angka tersebut dahulu, yaitu 'HHH" HHHH. Cal ini dikarenakan daya tampung register yang hanya 1@ bit. 4apat anda lihat bah+a pengurangan 'HHH"HHHH akan menyebabkan terjadinya peminjaman7Borro+*, hasil +ord rendah7H999* yang didapatkan kemudian kita simpan pada ,ariabel Csl1o. 100 'HHH H' HHHH """""""""" " 90B H999 Sampai saat ini kita sudah selesai mendapatkan nilai pada +ord rendahnya, yang disimpan pada ,ariabel Csl1o. 3OV A9CA6i SBB A9CB6i 3OV 6sl6iCA9 1angkah selanjutnya adalah menghitung +ord tingginya yaitu pengurangan 100"H'"2arry dengan menggunakan perintah SBB maka masalah tersebut dengan mudah terpecahkan. Akhirnya kita akan mendapatkan hasil pengurangan dari 100'HHH"9H'HHHH yaitu 0BH999 yang tersimpan pada pasangan CslCi;Csl1o7990BH999*.
B@
=.,.7. DE5
Perintah 4'274ecrement* digunakan khusus untuk pengurangan dengan 1. Perintah 4'2 hanya menggunakan 1 byte memory, sedangkan perintah S.B dan SBB menggunakan B byte. Oleh sebab itu bila anda ingin melakukan operasi pengurangan dengan 1 gunakanlah perintah 4'2. Synta/ pemakaian perintah dec ini adalah; DE5 &!1!an Dilai pada tujuan akan dikurangi 1, seperti perintah ujuan;F ujuan"1 dalam urbo Pascal. ujuan disini dapat berupa suatu register maupun memory. 2ontoh ; perintah 4'2 A1 akan mengurangi nilai di register A1 dengan 1. JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJ J P(O'(A3 " 5BA .AS3 J J <4$'S) " 3E$5E&A% %A(A%&E( J J HQH..HAH DE$'A$ J J )$& ,1h SE(V)S , J JKKKKKKKKKKKKKKKKKKKKKKKKKKStoKJ .3ODE* S3A** .5ODE O(' 1 h Proses " 3OV A6C ,h J $ilai ser:is 3OV D*CIQI J D*K-Ah 3OV 59C,G J Banya2nya peng!langan yang a2an J dila2!2an 4lang" )$& ,1h J 5eta2 2ara2ter NN DE5 D* J %!rang D* dengan 1 *OOP 4lang J *ompat 2e 4lang E$D )$& , h Proses Program =.7. 3enceta2 2ara2ter HQH..HAH
Program ?.B. bila dijalankan akan mencetak karakter 5P5 sampai 5A5 sebagai berikut ; Q>9DV4&S(OPO$3*%.)6'<ED5BA
BA
seperti 34* B9 maka komputer akan mengambil nilai yang terdapat pada B3 dan nilai pada A3 untuk dikalikan. Casil yang didapat akan disimpan pada register 43 dan A3743;A3*, jadi register 43 menyimpan Word tingginya dan A3 menyimpan Word rendahnya. JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J P(O'(A3 " %A*).AS3 J J A4&6O( " Sto J J <4$'S) " 3E$'A*)%A$ B)*A$'A$J J 1G B)&C 6AS)* J J PADA D9"A9 J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses J *ompat 2e Proses A DD 1E<h B DD ,<Eh 6sl*o DD P 6sl6i DD P Proses" 3OV A9CA J A9K1E< 34* B J %ali2an 1<6F,<E 3OV 6sl*oCA9 J A9 bernilai 5B,, sehingga 6sl*oK5B,, 3OV 6sl6iCD9 J D9 bernilai - sehingga 6sl6iK )$& , h E$D &Data J %embali 2e DOS Program =.8. Proses per2alian dengan 34*
Pada program ?.8. kita mendefinisikan angka un tuk ,ariabel IAIF1'H dan IBIF0H' dengan 4W. $arena tidak digunakan 'U., maka ,aribel IAI dan IBI dapat dirubah bila diinginkan.
=.8. PE3BA')A$
Operasi pada pembagian pada dasarnya sama dengan perkalian. .ntuk operasi pembagian digunakan perintah 4!6 dengan synta/; D)V S!mber Bila s!mber merupakan operand ? bit seperti D)V B6 , maka komputer akan mengambil nilai pada register A3 dan membaginya dengan nilai BC. Casil pembagian ? bit ini akan disimpan pada register A1 dan sisa dari pembagian akan disimpan pada register AC. Bila s!mber merupakan operand 1@ bit seperti D)V B9 , maka komputer akan mengambil nilai yang terdapat pada register 43;A3 dan membaginya dengan nilai B3. Casil pembagian 1@ bit ini akan disimpan pada register A3 dan sisa dari pembagian akan disimpan pada register 43. JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ
B?
J P(O'(A3 " BA').AS3 J J A4&6O( " Sto J J <4$'S) " 3E3BA') B)*A$'A$ J J 1G B)&C 6AS)* J J PADA D9"A9 J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses J *ompat 2e Proses A DD 1E<h B DD , 6sl DD P Sisa DD P Proses" S4B D9CD9 J .adi2an D9K 3OV A9CA J A9K1E< D)V B J Bagi 1E<", 3OV 6slCA9 J A9 bernilai <E sehingga 6slK 3OV SisaCD9 J D9 berisi 1 sehingga SisaK )$& , h E$D &data J %embali 2e DOS Program =.-. Proses pembagian bilangan 1G bit 2obalah anda trace dengan debug untuk melihat hasil yang didapat pada register A3 dan 43.
<E 1
BE
BAB )9 PO)$&E(
B.1. PE$DA64*4A$
Pada program"program sebelumnya7pengurangan,perkalian dan pembagian* dapat anda lihat bah+a hasil dari operasi aritmatika disimpan dalam 0 ,ariabel dimana 1 ,ariabel untuk menampung hasil dari +ord tingginya dan 1 +ord untuk menampung +ord rendahnya. Bukankah hal ini akan tampak menjadi aneh, karena bila kita ingin melihat nilai tersebut maka nilai tersebut harus disatukan barulah dapat dibaca. Apakah ada cara lain supaya hasilnya dapat disimpan pada satu ,ariabel saja J LA%%, tetapi untuk itu anda harus menggunakan pointer untuk mengaksesnya. Bila anda tidak menggunakan pointer maka tipe data penampung harus sesuai dengan registernya. anpa pointer untuk memindahkan data dari suatu ,ariabel ke register ? bit, maka ,ariabel tersebut haruslah ? bit juga yang dapat didefinisikan dengan DB , demikian juga untuk register 1@ bit dengan ,ariabel yang didefinisikan dengan DD . 2ontoh ; A DB 1E J DBK= bit 1adi AK= bit B DD 7- J DDK1G bit 1adi BK1G bit " 3OV A*CA J = bit dengan = bit 3OV A9CB J 1G bit dengan 1G bit. Seperti pada contoh diatas anda tidak bisa menggunakan perintah -O6 A3,A karena kedua operand tidak mempunyai daya tampung yang sama71@ dan ? bit*. Bila anda melakukan pemindahan data dari operand yang berbeda tipe data penampungnya maka akan ditampikan 5 FFErrorFF BA').AS3+, A Operand types do not match 5. 4engan menggunakan pointer hal ini bukanlah masalah. Sebelum itu marilah kita lihat dahulu berbagai tipe data yang terdapat pada assembler.
89
DB =4efine Byte> 1 BL ' DD =4efine Word> 0 BL ' DD =4efine 4oubleWord> 8 BL ' D< =4efine HarWords> @ BL ' DO =4efine UuadWord> ? BL ' D& =4efine enBytes> 19 BL ' """"""""""""""""""""""""""""""""""""""""""" 'ambar B.1. Berbagai &ipe Data Sebagai contohnya lihatlah bagaimana tipe data pada gambar E.1. digunakan ; .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses A DB 8 J 1 byteC nilai a0alKI8I B DB 8C8C8C,CP J 1F- byteC nilai a0alK8C8C8C,CP 5 DB 8 D4P+-A J 1F8 byteC nilai a0alKI-I D DB I6A) NNI J G byte berisi G 2ara2ter E DD P J 1 0ord tida2 di2etah!i isinya < DD PCPCP J 7 0ord tida2 di2etah!i isinya ' DD 1 D4P+PA J1 0ord tida2 di2etah!i isinya 6 DD P J 1 Do!bleDord tanpa nilai a0al ) D< PCP J , <arDord tanpa nilai a0al . DO A1,h J 1 O!adDordC nilai a0alKI A1,I % D& ,-F= J 1 &enBytesC nilai a0alKI, I * EO4 GGG J %onstantaC *KGGG 3 DB I1,7I J String I1,7I $ DB I1ICI,ICI7I J String I1,7I O DB 8BC- C-1 J String I1,7I Proses " J J J E$D &data Pada baris pertama75 A DB 8 5* kita mendefinisikan sebanyak satu byte untuk ,ariabel dengan nama 5 A 5, ,ariabel ini diberi nilai 585. Pada baris kedua75 B DB 8C8C8C,CP 5* kita mendefinisikan sebanyak : byte yang berpasangan untuk ,ariabel dengan nama 5 B 5. iga byte pertama pada ,ariabel 5B5 tersebut semuanya diberi nilai a+al 585, byte ke empat diberi nilai a+al 0 sedangkan byte ke lima tidak diberi nilai a+al. Pada baris ketiga75 5 DB 8 D4P+-A 5* kita mendefinisikan sebanyak 8 byte data yang diberi nilai a+al 5:5 semuanya 74.PF4uplikasi*. (adi dengan perintah 4.P kita dapat mendefinisikan suatu Array. Pada baris keempat75 D DB I6A) NN I 5* kita mendefinisikan suatu string
81
dengan 4B. .ntuk mendefinisikan string selanjutnya akan selalu kita pakai tipe data 4B. Bila kita mendefinisikan string dengan 4W maka hanya 0 karakter yang dapat dimasukkan, format penempatan dalam memorypun nantinya akan membalikkan angka tersebut. Pada baris kelima75 E DD P 5* kita mendefinisikan suatu tipe data Word yang tidak diberi nilai a+al. Dilai yang terdapat pada ,ariabel 5'5 ini bisa berupa apa saja, kita tidak perduli. Pada baris keduabelas75 * EO4 GGG 5* kita mendefinisikan suatu konstanta untuk ,ariabel 515, jadi nilai pada 515 ini tidak dapat dirubah isinya. Pada ,ariabel -, D, O kita mendefinisikan suatu string 510B5 dalam bentuk yang berbeda. $etiganya akan disimpan oleh assembler dalam bentuk yang sama, berupa angka 8E, :9 dan :1. Pada program"program selanjutnya akan dapat anda lihat bah+a kita selalu melompati daerah data75 &Data".3P Proses 5*, mengapa demikian J Bila kita tidak melompati daerah data ini maka proses akan melalui daerah data ini. 4ata"data program akan dianggap oleh komputer sebagai suatu intruksi yang akan dijalankan sehingga apapun mungkin bisa terjadi disana. Sebagai contohnya akan kita buat sebuah program yang tidak m elompati daerah data, sehingga data akan dieksekusi sebagai intruksi. Program ini telah diatur sedemikian rupa untuk membunyikan speaker anda, pada akhir data diberi nilai 2409 yang merupakan bahasa mesin dari intruksi !D 09h. JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J P(O'(A3 " B6S3ES)$.AS3 J J A4&6O( " Sto J J <4$'S) " 3E3B4$>)%A$ SPEA%E( J J DE$'A$ DA&A P(O'(A3 J J J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK .3ODE* S3A** .5ODE O(' 1 h &data"DB E8hCG1hC,8hC <EhC EGhCG1hC BBhC D hCEhC BBhCBAh DB ,hC=BhC D1hC-1hC78hC,hC EGhCG1hC D1hC 57hCE7hCGh DB =7hC 51hC hC EBhC BhCB hC-,hC,BhC D1hC=EhC D1hC-Ah DB =1hC 51hC78hC=hC E,hC <EhC-BhC E,hC E,hC 5DhC, h E$D &data Program B.1. Program >ang 3enge2se2!si Daerah Data
80
E.0. ini yang hanya mendefinisikan data. .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses A DB 1,hC78h B DD AB5Dh 5 DD -GE=B 1=h D DB 8 D4P+1A E$D &data Program B.,. 3ende#inisi2an Data
Setelah program E.0. diketikkan dan dijadikan 2O- dengan AS-.'3' dan 1!D$.'3', pakailah debug untuk melihat bagaimana data tersebut disimpan didalam memory komputer. 5"?@deb!g data.com A B 2 4 ;d G"G"G G"G"G G""""G""""G G""""G"""""""" 7 1" 1 EB 71 B 1, 78 5D AB 1=;B E= -G 1 1 1 1 1 7 1" 11 1 1 1 1 1 1 1 1; 1 1 1 1 1 1 1 1 7 1" 1, 1 1 1 1 1 1 1 1; 1 1 1 1 1 1 1 1 7 1" 17 1 1 1 E A5 B1 -1 AD;=B 5= ,- < =B DB B1 7 1" 18 8 D7 EB D1 E7 ,G 7 1E;G8 1 =B 1E G 1< B< 8 7 1" 1-E B< <A - E= =7 A;E7 7 E= G7 A ,G =B 17 1" 1G BB << << EB 1= =E G =,; 1 ,B DB ,G , 15 ED B 7 1" 1E 8G = EB = =A <B ,G =A;15 8G E= 1G DA 8= ED E;R 'ambar B.,. Data program B.,.
$etiga byte pertama pada gambar E.1. adalah bahasa mesin dari perintah H.43P P(OSESH dan H$ OPH . Pada byte ke 8 dan ke : ini adalah data dari ,ariabel HAH , dapat kita lihat bah+a data dari ,ariabel HAH 710B8* yang didefinisikan dengan HDBH disimpan didalam memory komputer sesuai dengan yang didefinisikan. 4ua byte selanjutnya7byte ke @ dan A*, merupakan data dari ,ariabel 5 yang telah kita definisikan dengan HDD+, byteAH . ernyata kedua byte dari ,ariabel H5H 7AB24* disimpan didalam memory dalam urutan yang terbalik724AB* %. -engapa demikian J. Cal ini dikarenakan penyimpanan dimemory yang menyimpan nilai tingginya pada alamat tinggi. Anda dapat lihat pada ke 8 byte selanjutnya, yaitu data dari ,ariabel HDH juga disimpan dengan susunan yang terbalik7:@A?E91? menjadi 1?E9A?:@*.
8B
Supaya lebih jelas, marilah kita lihat penggunaanya didalam program. JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J P(O'(A3 " P&(.AS3 J J A4&6O( " Sto J J <4$'S) " 3E3)$DA6%A$ DA&A J J A$&A( &)PE DA&A >A$'J J BE(BEDA NNN J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ .3ODE* S3A** .5ODE O(' 1 h &Data " .3P A B D Proses" 3OV 3OV Proses J *ompat 2e Proses DD 1E<h J , Byte DD ,<Eh J , Byte DD P J 8 Byte A*CB>&E P&( A J A*KE<C A9KPE< A6CB>&E P&( AL1 J A6K 1C A9K 1E<
3OV B9CB J B9K ,<E 3OV DO(D P&( DCA9 J DKPP 1E< 3OV DO(D P&( DL,CB9 J DK ,<E 1E< E$D )$& , h &Data J %embali 2e DOS
Program B.7. 3engg!na2an Pointer Pada a+alnya kita mendefinisikan ,ariabel 5A5 dan 5B5 dengan tipe data +ord71@ bit* yang mempunyai nilai a+al 91'H dan 90H', serta ,ariabel 525 dengan tipe data 4oubleWord7B0 bit* yang tidak diinialisasi. 3OV A*CB>&E P&( A 3OV A6CB>&E P&( AL1 Pada kedua perintah tersebut, kita memindahkan data dari ,ariabel 5A5 ke register A3 dengan byte per byte. Perhatikanlah bah+a kita harus menyesuaikan pemindahan data yang dilakukan dengan kemampuan daya tampungnya. Oleh sebab itu digunakan HB>&EH P # untuk memindahkan data 1 byte menuju register ? bit, dengan demikian untuk memindahkan data 1@ bit harus digunakan HDO(DH P #. Pada baris pertama kita memindahkan byte rendah dari ,ariabel HAH 7'H* menuju register A1, kemudian pada baris kedua kita memindahkan byte tingginya791* menuju register AC. 1ihatlah kita menggunakan HB>&E P&( AH untuk nilai byte rendah dan HB>&E P&(L1H untuk byte tinggi dari ,ariabel HAH dikarenakan penyimpanan data dalam memory komputer yang menyimpan byte tinggi terlebih dahulu71ihat bagian E.B.*. 3OV B9CB 3OV DO(D P&( DCA9
88
3OV DO(D P&( DL,CB9 Pada bagian ini akan kita coba untuk memindahkan data dari 0 register 1@ bit menuju 1 ,ariabel B0 bit. Pada baris pertama H3OV B9CBH tentunya tidak ada masalah karena kedua operand mempunyai daya tampung yang sama. Pada baris kedua H3OV DO(D P&( DCA9H kita memindahkan nilai pada register A3 untuk disimpan pada ,ariabel 545 sebagai +ord rendahnya. $emudian pada baris ketiga H3OV DO(D P&( DL,CB9H kita masukkan nilai dari register B3 pada ,ariabel 545 untuk +ord tingginya sehingga nilainya sekarang adalah B3;A3F90H'91'H. Perhatikanlah pada baris ketiga kita melompati 0 byte7WO#4 P #G0* dari ,ariabel 545 untuk menyimpan +ord tingginya. $ini dengan menggunakan pointer ini kita bisa menyimpan hasil perkalian 1@ bit didalam 1 ,aribel B0 bit. .ntuk itu lihatlah program E.8. JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J P(O'(A3 " %A*)P&(.AS3 J J A4&6O( " Sto J J <4$'S) " 3E$'A*)%A$ B)*A$'A$J J 1G B)&C 6AS)* J J PADA D9"A9 J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses J *ompat 2e Proses A DD 1E<h J , Byte B DD ,<Eh J , Byte 6sl DD P J 8 Byte Proses" 3OV A9CA J A9K1E< 34* B J %ali2an 1<6F,<E 3OV DO(D P&( 6slCA9 J A9 bernilai 5B,,C 6slKPP5B,, 3OV DO(D P&( 6slL,CD9 J D9 bernilai -C 6slK -5B,, )$& , h E$D &Data J %embali 2e DOS
8:
8@
K 9 K 1 K 9 K K 1 K 9 K 9 K K 1 K 1 K 1 K G"""""G"""""G""""""""""G 'ambar 1 .,. &abel Operator A$D Operasi AD4 di dalam assembler, digunakan dengan synta/ ; A$D &!1!anCS!mber Casil dari operasi AD4 ini akan disimpan pada &!1!an , sebagai contoh, instruksi ; 3OV A*C7<h 3OV B*C1Ah A$D A*CB* Perintah diatas akan menghasilkan nilai 1A bagi register A1. )ngatlah " Setiap bit yang di A$D dengan 9 pasti menghasilkan bit 9 juga, sedangkan setiap bit yang di A$D dengan 1 akan menghasilkan bit itu sendiri.
1 .7. 'E(BA$' O(
Operator logik O# akan menghasilkan nilai nol bila kedua operannya bernilai nol dan satu bila salah satunya bernilai satu. G"""""G"""""G""""""""""G K A K B K A O# B K G"""""G"""""G""""""""""G K 9 K 9 K 9 K K 9 K 1 K 1 K K 1 K 9 K 1 K K 1 K 1 K 1 K G"""""G"""""G""""""""""G 'ambar 1 .7. &abel Operator O( Operasi O# di dalam assembler, digunakan dengan synta/ ; O( &!1!anCS!mber Casil dari operasi O# ini akan disimpan pada &!1!an , sebagai contoh, instruksi ; 3OV A*C7<h 3OV B*C1Ah
8A
O( A*CB* Casil operasi O# diatas akan menghasilkan nilai BH bagi register A1. )ngatlah " Setiap bit yang di O( dengan 9 pasti menghasilkan bit itu sendiri, sedangkan setiap bit yang di O( dengan 1 pasti menghasilkan bit 1.
1 .-. &ES&
Perintah est digunakan untuk mengetahui nilai pada suatu bit, dengan synta/ ; &ES& Operand1COperand, Perintah test akan meng A$D kedua nilai operand, tetapi hasil yang didapatkan tidak akan berpengaruh terhadap nilai kedua operand tersebut.
8?
Setelah perintah est dilaksanakan yang akan terpengaruh adalah Hlags, sehingga perintah ini sering diikuti dengan perintah yang berhubungan dengan kondisi flags. Adapun flags yang terpengaruh adalah 2H,OH,PH,PH,SH dan AH. &ES& A9C <h .$Q Proses J *ompat 1i2a Qerro #lag Pada perintah diatas komputer akan menuju ke label Proses bila ada satu bit atau lebih dari A3 yang sama dengan 9Hh. Bila diikuti dengan perintah .5 Proses , maka komputer akan menuju ke label proses bila keempat byte rendah pada A1 semuanya 17JH*.
8E
S6( Operand1COperand, Supaya lebih jelas anda bisa lihat pada gambar 19.@. Operand0 harus digunakan register 21 bila pergeseran yang dilakukan lebih dari satu kali. G"""""""""""""""""""""G 9 """""> K K """"""> G"""""""""""""""""""""G 'ambar 1 .G. Operasi S6( !nstruksi ; 3OV A9C7<h 3OV 5*C7 S6( A9C5* J 'eser 7 bit 2e 2anan Akan menghasilkan nilai 9Ah pada register A3. Operasi detilnya dapat dilihat di ba+ah ini. BHh ; 9911 1111 SC# 1 ; 9991 1111 7F1Hh* SC# 0 ; 9999 1111 7F9Hh* SC# B ; 9999 9111 7F9Ah*
:9
:1
sebagai perantara, seperti; 3OV A9CES 3OV DSCA9 Selain dengan cara diatas, anda bisa juga menggunakan stack sebagai perantara, seperti; P4S6 ES POP DS 0. Pemberian nilai untuk segment register74S, 'S, 2S, SS* secara langsung, seperti; 3OV ESC B= h .ntuk memecahkan hal ini, anda bisa menggunakan register general purpose sebagai perantara, seperti; 3OV A9C B= h 3OV ESCA9 B. Pengcopyan data langsung antar memory, seperti; 3OV 3emBC3emA .ntuk memecahkan hal ini, anda bisa menggunakan register general purpose sebagai perantara, seperti; 3OV A9C3emA 3OV 3emBCA9 8. Pengcopyan data antar register yang berbeda tipenya7? bit dengan 1@ bit* tanpa menggunakan pointer, seperti; 3OV A*CB9 Pela1arilah" bagian ini dengan baik, karena addressing modes merupakan dasar bagi programmer bahasa assembly yang harus dikuasai.
:0
A EO4 GEh J J 3OV A9CA Perintah diatas akan mengcopykan nilai @Ah untuk register A3.
:B
&Data " .3P Proses A DB 1,h B DB -Bh Proses " 3OV A*CA J Direct Addressing 3OV A6CB J Direct Addressing Perintah diatas akan mengcopykan data ,ariabel A dan B pada register A1 dan AC.
:8
)$& ,1h J *a2sana2an NN ADD B9C, J B9"KB9L, *OOP 4lang J *ompat 2e 4lang )$& , h E$D &Data Program 11.,. Proses (egister )ndirect Addressing
Bila program 11.0. dijalankan maka dilayar anda akan tercetak ; A5 Pertama"tama kita mendefinisikan data untuk ,ariabel I$alI, dimana data ini nantinya akan disimpan pada memory, seperti berikut ; L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L V A V B V 5 V D V E V < V L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L Alamat O##set" 1 7 1 8 1 - 1 G 1 E 1 = Pada perintah *EA B9C%al , maka register B3 akan menunjuk pada alamat efekti,e dari ,ariabel $al, sebagai berikut ; B9K1 7 W L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L V A V B V 5 V D V E V < V L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L Alamat O##set" 1 7 1 8 1 - 1 G 1 E 1 = Pada perintah 3OV 59C, , kita memberikan nilai 0 kepada register 23 untuk digunakan sebagai counter pada saat 1OOP. $ini perhatikanlah bah+a kita mengambil nilai yang ditunjukkan oleh register B3 yaitu IAI dengan perintah 3OV D*CSB9T . anda kurung siku menyatakan bah+a kita bukannya mengambil nilai B3 tetapi nilai yang ditunjukkan oleh register B3. Setelah itu kita mencetak karakter tersebut dengan interupsi 01h ser,is 90 dimana kode AS2!! dari karakter yang ingin dicetak telah kita masukkan pada register 41. Pada perintah ADD B9C, kita me nambahka nilai 0 pad a B3 sehingga kini B3 akan berjalan sebanyak 0 byte dan menunjuk pada data I2I sebagai berikut ; B9K1 W L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L
::
V A V B V 5 V D V E V < V L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L;;;;;L Alamat O##set" 1 7 1 8 1 - 1 G 1 E 1 = $ini B3 te lah menunjuk pada alamat tempat data I2I berada, sehingga pada pencetakan karakter selanjutnya, yang tercetak adalah karakter I2I. )ngatlah" satu karakter menggunakan satu byte memory.
Pertama"tama kita mendefinisikan suatu tabel yang berisi data 11h,:9h,9Ah,18h dan :Ah. 4ata ini akan disimpan dalam memory sebagai berikut ; L;;;;;;L;;;;;;L;;;;;;L;;;;;;L;;;;;;L V 11 V - V A V 18 V -A V L;;;;;;L;;;;;;L;;;;;;L;;;;;;L;;;;;;L
:@
Alamat O##set" 1 7
1 -
1 E
1 B
1 A
Setelah itu kita mengambil alamat efektifnya dengan menggunakan register B3 dengan perintah *EA B9C&abel sehingga B3 akan menunjuk pada alamat data yang pertama. B9K1 7 W L;;;;;;L;;;;;;L;;;;;;L;;;;;;L;;;;;;L V 11 V - V A V 18 V -A V L;;;;;;L;;;;;;L;;;;;;L;;;;;;L;;;;;;L Alamat O##set" 1 7 1 - 1 E 1 B 1 A 4engan perintah 3OV A9C&abel maka A3 akan berisi nilai pada +ord pertama ,ariabel I abelI, yaitu 11. 4engan B3 yang telah menunjuk pada data pertama711* maka kita bisa menggunakannya sebagai patokan untuk mengakses data yang lain. B9 B9L, B9L8 B9LG B9L= W W W W W L;;;;;;L;;;;;;L;;;;;;L;;;;;;L;;;;;;L V 11 V - V A V 18 V -A V L;;;;;;L;;;;;;L;;;;;;L;;;;;;L;;;;;;L Alamat O##set" 1 7 1 - 1 E 1 B 1 A Perlu anda perhatikan bah+a kita mengakses data yang lain terhadap B3 tanpa merubah posisi dari penunjuk B3, jadi B3 tetap menunjuk pada offset abel. $ita menambah B3 dengan 0 karena data terdefinisi sebagai +ord70 byte*. Pada contoh program 11.B. dapat anda lihat bah+a menambah B3 didalam dan diluar kurung siku adalah sama. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J P(O'(A3 " B(A1.AS3 J J A4&6O( " Sto J J <4$'S) " 3E$5E&A% %A*)3A& J J DE$'A$ BASE J J (E*A&)VE ADD(ESS)$'J J J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses %alimat DB I$>A34% 'O(E$'I J 17 2ara2ter Proses" 9O( B9CB9 J B9K 4nt!2 pen!n1!2 O##set 3OV 59C17 J 5o!nter *OOP 4lang " 3OV D*C%alimatSB9T J Ambil 2ara2ter yang 2e B9 3OV A6C , J Ser:is !nt!2 ceta2 2ara2ter )$& ,1h J 5eta2 %ara2ter )$5 B9 J B9"KB9L1 *OOP 4lang J *ompat 2e 4lang sampai 59K
:A
Bila program 11.8. dijalankan maka dilayar akan tampak tulisan ; $>A34% 'O(E$' Pada program 11.8. ini register B3 dijadikan sebagai pencatat offset dari H2alimatH . 4engan nilai B3 sama dengan nol79*, akan menunjuk pada karakter pertama dari $alimat7ingat% 3O# dengan bilangan yang sama pasti menghasilkan 9*. Setelah itu kita memberikan nilai 1B kepada 23 sebagai penghitung banyaknya 1OOP yang akan terjadi. %alimatS T %alimatS1,T W W L;L;L;L;L;L;L;L;L;L;L;L;L;L V$V>VAV3V4V%V V'VOV(VEV$V'V L;L;L;L;L;L;L;L;L;L;L;L;L;L Pada perintah 3OV D*C%alimatSB9T , register B3 digunakan untuk menunjukkan offset dari kalimat. 4engan demikian saat pertama kali yang dimasukkan pada register 41 untuk dicetak adalah karakter IDI kemudian B3 ditambah satu sehingga B3 menunjuk pada karakter ILI. 4emikian seterusnya sampai seluruh kalimat tersebut tercetak.
:?
J?KKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h Proses " 3OV A9C < h J 3as!22an nilai < pada A9 3OV ESCA9 J 5opy2an nilai A9 2e ES 3OV B9C <<<-h J Pen!n1!2 O##set 9O( S)CS) J .adi2an S)K 3OV 59C= J 5o!nter !nt!2 *OOP 4lang" 3OV D*CES"SB9TSS)T J Ambil isi alamat ES"B9LS) 3OV A6C ,h J $ilai ser:is menceta2 2ara2ter )$& ,1h J 5eta2 NN )$5 S) J S)"KS)L1 *OOP 4lang J *ompat 2e 4lang sampai 59K )$& , h J Selesai N 2embali 2e DOS E$D Proses
Bila program 11.:. dijalankan, maka akan ditampilkan ; 1=/ =/B8 =pada komputer anda mungkin lain> $ita tidak bisa langsung mengisikan sebuah nilai kepada segment register, oleh karena itu digunakan register A3 sebagai perantara sebagai berikut; 3OV A9C < h 3OV ESCA9 Setelah itu register B3 yang kita gunakan sebagai penunjuk offset, diisi dengan nilai HHH:, sedangkan S! yang nantinya digunakan sebagai displacement7perpindahan* kita jadikan nol. #egister 23 yang digunakan sebagai counter diisi dengan ?, sesuai dengan jumlah 1OOP yang dinginkan; 3OV B9C <<<-h 9O( S)CS) 3OV 59C= $ini kita bisa mengambil data pada alamat H999;HHH:, dengan segmnent register 'S dan offset pada register B3GS!. Segment register 'S ini harus dituliskan, karena bila tidak dituliskan maka segment yang digunakan adalah segment default atau segment register 4S. #egister S! digunakan sebagai perpindahan terhadap register B3, SB9TSS)T artinya register B3GS!. 3OV D*CES"SB9TSS)T 3OV A6C ,h )$& ,1h )$5 S) *OOP 4lang Proses diulangi sampai ? karakter tanggal dikeluarkannya #O- B!OS tercetak semua.
:E
atau suatu array 0 dimensi. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J P(O'(A3 " B)A.AS3 J J A4&6O( " Sto J J <4$'S) " 3E$'A%SES A((A> J J DE$'A$ BASE J J )$DE9ED ADD(ESS)$' J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses 3ahasis0a S&(45 $im DD &inggi DB $ilai DB C C C 3ahasis0a E$DS Absen 3ahasis0a 1
Proses" *EA B9CAbsen J B9 3en!n1!2 O##set Absen ADD B9C,1 J B9 3en!n1!2 pada (ecord 2e 8 9O( S)CS) J S)K 3OV 3OV 3OV 3OV 3OV 3OV E$D SB9TSS)T.$im C BBh J $)3C record 2e 8 SB9TSS)T.&inggi C1 h J &inggiC record 2e 8 SB9TSS)L1T.$ilaiCE=h J $ilai pertama SB9TSS)L,T.$ilaiCBBh J $ilai 2ed!a SB9TSS)L7T.$ilaiC- h J $ilai 2eempat SB9TSS)L8T.$ilaiC=7h J $ilai 2elima J Selesai NN Program 11.G. &e2ni2 3enga2ses (ecord
)$& , h &Data
Pada program 11.@. akan kita lihat b agaimana based inde/ed addressding memudahkan kita dalam mengakses suatu array record. 3ahasis0a S&(45 $im DD P &inggi DB P $ilai DB PCPCPCP 3ahasis0a E$DS Absen 3ahasis0a 1 D4P +U@A Perintah 5S #.25 digunakan untuk mendefinisikan suatu record dan diakhiri dengan 5'D4S5. Hield"field yang kita definisikan untuk record mahasis+a ini adalah 0 byte untuk D!-, 1 byte untuk inggi, 8 byte untuk Dilai. (adi besar satu record adalah A byte. Pada baris selanjutnya kita mendefinisikan 19 buah record mahasi+a dengan perintah 4.P. anda cryptic
@9
5 +U@A 5 digunakan untuk menginialisasi nilai pada array menjadi nol. ADD B9C,1 9O( S)CS) Pada contoh program ini kita akan memasukan data pada record ke 8, dan karena 1 record menggunakan A byte, maka B3 kita tambah dengan 01 supaya B3 menunjuk pada record ke 8. #egister S! yang nantinya kita gunakan sebagai perpindahan dijadikan 9. 3OV SB9TSS)T.$im C BBh 3OV SB9TSS)T.&inggi C1 h 4engan B3 yang telah menunjuk pada record ke 8, maka kita bisa langsung memasukkan nilai untuk D!- dan inggi pada record ke 8. 3OV SB9TSS)T.$ilai CE=h 3OV SB9TSS)L1T.$ilaiCBBh 3OV SB9TSS)L,T.$ilaiC- h 3OV SB9TSS)L7T.$ilaiC=7h $ini perhatikanlah bah+a dalam memasukkan angka untuk ,ariabel 5 nilai 5 yang mempunyai 8 byte bisa kita gunakan register S! sebagai perpindahan. 5-O6 VB3WVS!W5 akan menunjuk pada byte pertama untuk ,ariabel nilai sedangkan 5VB3WVS!G1W5 akan menunjuk pada byte kedua untuk ,ariabel nilai, demikianlah seterusnya. -udah Bukan J.
@1
*EA D9C%al LE J Ambil Alamat O##set %Al LE )$& ,1h J 5eta2 per2ara2ter sampai tanda X *EA D9C%A*1 J Ambil O##set 2al1 )$& ,1h J 5eta2 per2ara2ter sampai 2etem! X )$& , h E$D &data J SelesaiC 2embali 2e DOS Program 1,.1. 3enceta2 2alimat dengan #!ngsi DOS Pada saat program 10.1. anda jalankan, maka dilayar akan ditampilkan; P(OSES PE$5E&A%A$ S&()$' D)BE*A%A$' &A$DA Pada saat pendefinisian untuk ,ariabel 5$A195 k ita menambahkan tanda 1B dan 19. $edua tanda ini merupakan karakter kontrol untuk pindah baris7tanda 19* dan menuju kolom 97tanda 1B*. Pada akhir dari setiap kalimat yang ingin dicetak harus kita tambahkan dengan karakter 5T5. $arakter ini akan dipakai
@0
sebagai tanda akhir dari kalimat. $arena karakter 5T5 dijadikan sebagai tanda akhir dari kalimat yang ingin dicetak, maka pada proses pencetakan karakter yang kedua hanya kalimat 5 D)BE*A%A$' &A$DA 5 yang tercetak. Sisa kalimatnya, yaitu 5 &)DA% B)SA D)5E&A% 5 tidak tercetak keluar, karena terletak dibelakang tanda 5T5. 4engan demikian, bila kita ingin mencetak kalimat yang mengandung tanda 5T5, harus digunakan fungsi yang lain, misalnya mencetak kalimat dengan perkarakter melalui interupsi 01 fungsi 0.
@B
G Ac2no0ledge V ,, End O# 3edi!m E Bel V ,7 S!bstit!te = Bac2space V ,8 Escape B 6orisontal &ab!lationV ,- <ile Separator 1 *ine <eed V ,G 'ro!p Separator 11 Vertical &ab!lation V ,E (ecord Separator 1, <orm <eed V ,= 4nit Separator 17 5arriage (et!rn V ,B Space 18 Shi#t O!t V7 Delete 1- Shi#t )n V ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 'ambar 1,.,. %ara2ter %ontrol Pada AS5))
@8
%al DB I 3en!lis 2alimat dengan Atrib!tnya I Proses" 3OV A9C17 h J Ser:is 17h s!b#!ngsi 3OV B*C1 1 1 1b J Atrib!t t!lisan 3OV B6C J 6alaman tampilan 3OV D*C, J Posisi 9 3OV D6C1, J Posisi > 3OV 59C7J Banya2nya 2ara2ter dalam string *EA BPC%al J ES"BP alamat string )$& 1 h J 5eta2 2alimat N )$& , h E$D &Data J SelesaiC 2embali 2e DOS Program 1,.,. 3enceta2 %alimat Dengan Atrib!tnya
Bila program 10.0. dijalankan, maka layar pada posisi kolom ke 09 dan baris ke 10 akan terdapat tulisan; 3en!lis 2alimat dengan Atrib!tnya ulisan ditampilkan dengan +arna tulisan putih dan +arna dasar jingga. -engenai halaman layar akan dibahas pada bagian yang lain, sedangkan mengenai atribut akan segera kita bahas.
@:
@@
@A
V !nt!2 bilangan bertanda .E U.!mp )# ER!al@ V *ompatC 1i2a Operand1 K Operand, .$E U.!mp )# $ot ER!al@ V *ompatC 1i2a Operand1 tida2 sama V dengan Operand, .B U.!mp )# Belo0@ V *ompatC 1i2a Operand1 U Operand, V !nt!2 bilangan tida2 bertanda .* U.!mp )# *ess@ V *ompatC 1i2a Operand1 U Operand, V !nt!2 bilangan bertanda .BE U.!mp )# Belo0 or ER!al@V *ompatC 1i2a operand1 UK Operand, V !nt!2 bilangan tida2 bertanda .*E U.!mp )# *ess or ER!al@ V *ompatC 1i2a Operand1 UK Operand, V !nt!2 bilangan bertanda .AE U.!mp )# Abo:e or ER!al@V *ompatC 1i2a Operand1 @K Operand, V !nt!2 bilangan tida2 bertanda .'E U.!mp )# 'reater or V *ompatC 1i2a Operand1 @K Operand, ER!al@ V !nt!2 bilangan bertanda ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 'ambar 17.1. Perintah .!mp yang mengi2!ti 53P Pada tabel 1B.1. dapat anda lihat bah+a terdapat dua operasi yang berbeda, yaitu operasi bilangan bertanda dan tidak bertanda. Bilangan bertanda adalah bilangan yang akan membedakan bilangan negatif dan positif7-is. BA dan "BA*. Sedangkan bilangan tidak bertanda adalah bilangan yang tidak akan membedakan positif dan negatif, jadi angka "1 untuk operasi bilangan bertanda akan dianggap HHh pada bilangan tidak bertanda. 1ebih jauh mengenai bilangan bertanda dan tidak ini bisa anda lihat pada bab1. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " 53P..AS3 J J A!thor " Sto J J <!ngsi " 3endemo2an perintah lompat J J yang mengi2!ti perintah 53P J J J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data" .3P Proses BilA DB GE BilB DB GG %al DB IBilangan A lebih 2ecil dari bilangan B XI %al1 DB IBilangan A sama dengan bilangan B XI %al, DB IBilangan A lebih besar dari bilangan B XI Proses" 3OV A*CBilA J 3as!22an bilangan A pada A* 53P A*CBilB J Banding2an A*+BilAA dengan Bilangan B .B A%ecil J .i2a BilA U BilBC lompat 2e A%ecil .E Sama J .i2a BilA K BilBC lompat 2e Sama .A ABesar J .i2a BilA @ BilBC lompat 2e ABesar A2ecil"
@?
*EA D9C%al J Ambil o##set %al .3P 5eta2 J *ompat 2e ceta2 Sama" *EA D9C%al1 J Ambil o##set %al1 .3P 5eta2 J *ompat 2e ceta2 ABesar" *EA D9C%al, J Ambil o##set %al, 5eta2" 3OV A6C B J Ser:is !nt!2 menceta2 2alimat )$& ,1h J 5eta2 2alimat NN E9)&" )$& , h E$D &Data J %embali 2e DOS. Program 17.1. 3engg!na2an Perintah *ompat Bersyarat
Bila program 1B.1. dijalankan, maka akan tampak pada layar; Bilangan A lebih besar dari bilangan B Anda bisa mengganti nilai pada ,ariabel BilA dan BilB untuk melihat hasil yang akan ditampilkan pada layar.
@E
.59Q U.!mp )# 59 is Qero@ V *ompatC 1i2a 59K .$A U.!mp )# $ot Abo:e@ V *ompatC 1i2a Operand1 U Operand, V dengan 5<K1 ata! Q<K1 .$AE U.!mp )# $ot Abo:e nor V *ompatC 1i2a Operand1 U Operand, ER!al@ V dengan 59K1 .$B U.!mp )# $ot Belo0@ V *ompatC 1i2a Operand1 @ Operand, V dengan 5<K .$BE U.!mp )# $ot Belo0 nor V *ompatC 1i2a Operand1 @ Operand, ER!al@ V dengan 5<K dan Q<K .$5 U.!mp )# $o 5arry@ V *ompatC 1i2a 5<K .$' U.!mp )# $ot 'reater@ V *ompatC 1i2a Operand1 UK Operand, V dengan Q<K1 ata! S< tida2 sama O< .$'E U.!mp )# $ot 'reater V *ompatC 1i2a Operand1 UK Operand, $or ER!al@ V dengan S< tida2 sama O< .$* U.!mp )# $ot *ess@ V *ompatC 1i2a Operand1 @K Operand, V dengan S<KO< .$*E U.!mp )# $ot *ess V *ompatC 1i2a Operand1 @ Operand, $or ER!al@ V dengan Q<K dan S<KO< .$O U.!mp )# $o O:er#lo0@ V *ompatC 1i2a tida2 ter1adi V tida2 ter1adi O:er#lo0 .$P U.!mp )# $ot Parity@ V *ompatC 1i2a 'an1il .$S U.!mp )# $o Sign@ V *ompatC 1i2a S<K .$Q U.!mp )# $ot Qero@ V *ompatC 1i2a tida2 .O U.!mp On O:er#lo0@ V *ompatC 1i2a O<K1 .P U.!mp On Parity@ V *ompatC 1i2a 'enap .PE U.!mp )# Parity E:en@ V *ompatC 1i2a P<K1 .PO U.!mp )# Parity Odd@ V *ompatC 1i2a P<K .S U.!mp On Sign@ V *ompatC 1i2a S<K1 .Q U.!mp )s Yero@ V *ompatC 1i2a ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 'ambar 17.,. Da#tar Perintah .!mp Bila dilihat pada daftar 1B.0., perintah untuk lompat sebenarnya sangat mudah untuk digunakan karena setiap huruf melambangkan suatu kata. 4engan demikian kita tidak perlu untuk mengingat"ingat semua perintah diatas, kita hanya harus ingat bah+a huruf (F(ump, 'F'Qual, DFDot, SFSign, PFPero, PFParity, OFO,erflo+, 2F2arry, &F&reater han, AFAbo,e, 1F1ess dan BFBelo+. )ngatlah" Curuf & dan 1 yang artinya &reater han dan 1ess digunakan khusus untuk operasi bilangan bertanda. Sedangkan Curuf A dan B yang artinya Abo,e dan Belo+ digunakan khusus untuk operasi bilangan tidak bertanda. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " .3P*.AS3 J J A!thor " Sto J
A9
J <!ngsi " 3enceta2 2alimat secara per2ara2ter J J sampai ditem!i 2ara2ter IFI J J J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses %al DB I *!c2y *!c2 menemba2 IC17C1 DB I*ebih cepat dari bayangannya NN ICECECIFI Proses" 9O( B9CB9 J B9K 3OV A6C ,h J Ser:is 4nt!2 5eta2 %ara2ter 4lang" 53P %alSB9TCIFI J Banding2an dengan IFI .E Exit J .i2a Sama *ompat 2e Exit 3OV D*C%alSB9T J 3as!22an 2ara2ter 2e B9 men!1! D* )$& ,1h J 5eta2 2ara2ter )$5 B9 J &ambah 1 pada B9 .3P 4lang J *ompat %e 4lang Exit " )$& , h E$D &Data J Selesai N 2embali 2e DOS Program 17.,. Perbandingan Bila program 1B.0. dijalankan, maka pada layar akan ditampilkan; *!c2y *!c2 menemba2 *ebih cepat dari bayangannya NN Angka A pada akhir kalimat digunakan untuk menghasilkan suara beep. Bila anda masih ingat pada addressing yang telah kita pelajari, maka program 1B.0. tentunya tidak ada masalah.
A1
A0
Bila program 18.1. dan 18.0. dijalankan, maka pada layar akan ditampilkan; *A$' *)$' *4$' *A$' *)$' *4$' Perhatikanlah, perintah; *EA D9C%al 3OV Stac2sCD9 Pada baris pertama kita mendapatkan alamat efektif dari 5$al5 dan disimpan pada 43. $emudian kita simpan nilai 43 yang menunjuk pada offset 5$al5 ini pada ,ariabel Stacks. Sehingga pada saat kita hendak mencetak I$alI untuk kedua kalinya, kita tinggal mengambil nilai dari ,ariabel Stacks dengan perintah 5 3OV D9CStac2s 5. $ini akan kita lihat bagaimana menggunakan stack yang sebenarnya untuk
AB
tugas ini. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " S&A5%.AS3 J J A!thor " Sto J J <!ngsi " 3enceta2 2alimat , 2ali J J dengan operasi stac2 yang J J sebenarnya J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses %al DB I*A$' *)$' *4$' XI 'anti DB 17C1 CIXI Stac2s DD P Proses" *EA D9C%al P4S6 D9 3OV A6C B )$& ,1h *EA D9C'anti )$& ,1h POP D9 )$& ,1h Exit " )$& , h E$D &Data Program 18.,. Operasi Stac2
4engan perintah 5 P4S6 5, kita menyimpan nilai register 43 pada stack, kemudian pada perintah 5 POP 5 kita mangambil keluar nilai yang disimpan tersebut dari stack. 4ari program ini dapat dilihat bagaimana stack menggantikan ,aribel pada program 18.1. yang d igunakan untuk menyimpan nilai pada register 43. $ini lihatlah bagaimana program yang menggunakan pengulangan didalam pengulangan dengan memanfaatkan stack ini. 4alam bahasa Pascal programnya akan tampak seperti berikut; <or i"K 1 Do0n&o 1 Do <or 1"K - Do0n&o 1 Do <or s"K 7 Do0n&o 1 Do Begin End 4alam bahasa assembler akan tampak seperti; 3OV 59C1 i" P4S6 59 3OV 59C-
A8
1" P4S6 59 3OV 59C7 s" *OOP s POP 59 *OOP 1 POP 59 *OOP i
A:
Bila anda terbalik dalam mengambil nilai pada stack dengan POP A3 kemudian POP B3 dan POP 23, maka nilai yang akan anda dapatkan pada register A3, B3 dan 23 akan terbalik. Sehingga register A3 akan bernilai EE dan 23 akan bernilai 10. &()%" Seperti yang telah kita ketahui, data tidak bisa dicopykan antar segment atau memory. .ntuk mengcopykan data antar segment atau memory anda harus menggunakan register general purpose sebagai perantaranya, seperti; 3OV A9CES J 4nt!2 menyama2an register 3OV DSCA9 J ES dan DS 4engan adanya stack, anda bisa menggunakannya sebagai perantara, sehingga akan tampak seperti; P4S6 ES J 4nt!2 menyama2an register POP DS J ES dan DS
A@
AA
tersebut. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " (EAD%E>.AS3 J J A!thor " Sto J J <!ngsi " )np!t sat! 2ara2ter J J dari 2eyboard. J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J )$&E(4PS) 1Gh J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J )np!t" O!tP!t" J J A6 K .i2a tombol biasaC ma2a" J J A* K AS5)) J J A6 K S5A$ J J J J .i2a &ombol 2h!s!sC ma2a J J A* K J J A6 K Extended J J J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses &WAS5)) DB 17C1 CI)ni adalah tombol AS5)) " XI &WExtended DB 17C1 CI)ni adalah tombol Extended XI Proses " 3OV A6C J Ser:is )np!t sat! 2ara2ter )$& 1Gh J *a2sana2an P4S6 A9 J Simpan hasil pembacaan pada stac2 53P A*C J Apa2ah ini 2ara2ter extended P .E Extended J >a NC *ompat 2e Extended AS5))" *EA D9C&WAS5)) J Ambil alamat e#e2ti# &WAS5)) 3OV A6C B J Ser:is ceta2 2alimat )$& ,1h J 5eta2 2alimat N POP A9 J Ambil 2embali nilai A9 pada stac2 3OV D*CA* J Ambil 2ode AS5)) yang dite2an 3OV A6C, J Ser:is ceta2 2ara2ter )$& ,1h J 5eta2 2ara2ter N 53P A*CIOI J Apa2ah yang dite2an h!r!# IOI P .E exit J >a NC lompat 2e Exit 53P A*CIRI J Apa2ah yang dite2an h!r!# IRI P .E exit J >a NC lompat 2e Exit .3P Proses J *ompat 2e Proses Extended" *EA D9C&WExtended J Ambil alamat e#e2ti# &WExtended 3OV A6C B J Ser:is ceta2 2alimat )$& ,1h J 5eta2 2alimat N .3P Proses J *ompat 2e Proses exit" )$& , h E$D &Data J %embali 2e DOS N
Program 1-.1. 3en!ngg! mas!2an sat! 2ara2ter dari %eyboard Bila anda menekan tombol e/tended, seperti penekanan tombol anak panah, H1, H0 dan sebagainya maka pada layar akan ditampilkan ;
A?
)ni adalah tombol Extended Bila anda ingin mengetahui lebih lanjut mengenai tombol apa yang ditekan maka kode e/tendednya bisa dilihat pada register AC. Sedangkan bila yang ditekan adalah tombol biasa, seperti huruf ISI maka pada layar akan ditampilkan; )ni adalah tombol AS5)) " S Program akan selesai jika anda menekan tombol 5Q5 atau 5U5.
AE
J %e E9)& 3OV A6C B J Ser:is !nt!2 ceta2 2alimat *EA D9C%al J Ambil alamat e#e2ti# %al )$& ,1h J 5eta2 2alimat N .3P Proses J *ompat 2e Proses exit " )$& , h E$D &Data J %embali 2e DOS N
Bila program 1:.0. dijalankan, maka pada layar akan ditampilkan tulisan; &e2an sembarang tombol !nt!2 berhenti N ulisan ini akan ditampilkan terus sampai anda menekan sembarang tombol.
?9
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " )$;%A*.AS3 J J A!thor " Sto J J <!ngsi " )np!t %alimat dari J J 2eyboard. J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J )$&E(4PS) ,1h J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J )np!t" J J A6 K Ah J J DS"D9 K Penamp!ng dengan spesi#i2asi" J J Byte 1 K 3a2sim!m 2ara2ter yang dapat dimas!22an J J Byte , K A2an di1adi2an )ndi2ator banya2nya J J 2ara2ter yang dimas!22an J J Byte 7 2eatas K &empat hasil mas!2an ditamp!ng J J J J J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses &WEnter EO4 Dh %al DB I%eti22an sat! %alimat " XI %al1 DB 17C1 CI%alimat pada b!##er " XI B!##er DB ,7CPC,7 D4P+PA Proses " 3OV A6C B *EA D9C%al )$& ,1h J 5eta2 2alimat %al 3OV A6C Ah J Ser:is )np!t 2alimat *EA D9CB!##er J D9 men!n1!2 pada o##set B!##er )$& ,1h J )np!t 2alimat N 3OV A6C B *EA D9C%al1 )$& ,1h J 5eta2 2alimat %al1 *EA B9CB!##erL, J B9 men!n1!2 byte 2e 7 B!##er 4lang" 53P B>&E P&( SB9TC&WEnter J Apa2ah 2ara2ter EnterP .E E9)& J >aN *ompat 2e Exit 3OV D*CSB9T 3OV A6C , )$& ,1h )$5 B9 .3P 4lang E9)&" )$& , h E$D &Data J 3as!22an 2ara2ter pada D* J Ser:is ceta2 2ara2ter J 5eta2 2ara2ter J B9 "K B9L1 J *ompat 2e 4lang J %embali 2e DOS N
2ontoh dari hasil eksekusi program 1:.B. setelah mendapat masukan dari keyboard; %eti22an sat! %alimat " ER!aso#t
?1
%alimat pada b!##er " ER!aso#t Adapun proses yang dilakukan pada program 1:.B. adalah; 3OV A6C B *EA D9C%al )$& ,1h Pertama"tama cetak kalimat $al9 dengan ser,is E interupsi 01h, setelah itu; 3OV A6C Ah *EA D9CB!##er )$& ,1h Pada bagian inilah kita meminta masukan dari keyboard, dengan 43 menunjuk pada buffer yang digunakan sebagai penampung. 3OV A6C B *EA D9C%al1 )$& ,1h Setelah itu cetaklah kalimat pada $al1 *EA B9CB!##erL, 4engan perintah ini maka B3 akan menunjuk pada byte ke B, atau a+al masukan string dari keyboard. Supaya lebih jelas, nilai pada buffer setelah mendapat masukan adalah; O##set B9KO##setL, W W L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L V B V = V E V R V ! V a V s V o V # V t V DV L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L Setelah B3 mnunjuk pada karakter pertama hasil masukan, maka; 53P B>&E P&( SB9TC&WEnter .E E9)& Periksalah, apakah karakter yang ditunjukkan B3 adalah 947'nter*J Bila ya, berarti akhir dari masukan. Perlu anda perhatikan disini, bah+a kita menggunakan BL ' P #. Bila tidak digunakan, assembler akan bingung apakah kita ingin membandingkan isi alamat B3 sebanyak 1 byte atau lebih dengan S'nter. 3OV D*CSB9T 3OV A6C , )$& ,1h Bila bukan karakter enter, maka ambil karakter tersebut dan masukkan
?0
pada register 41 untuk dicetak. )$5 B9 .3P 4lang ambahlah B3 denga satu sehingga B3 akan menunjuk pada karakter selanjutnya. Proses dilanjutkan sampai ketemu tanda 94 atau karakter 'nter.
?B
?8
register !P dan 2S dari stack sebagai alamat loncatan menuju program pemanggil procedure. Alamat kembali untuk procedure disimpan pada stack pada saat procedure tersebut dipanggil dengan perintah 52A115, dengan synta/; 5A** DamaP Perintah 2all ini akan menyimpan register !P saja bila procedure yang dipanggil berbentuk 5D'A#5. Bila procedure yang dipanggil berbentuk 5HA#5, maka perintah 52A115 akan menyimpan register 2S dan !P.
Bila program 1@.1. dijalankan, maka pada layar akan ditampilkan huruf 5S5. .ntuk membuat sebuah procedure ingatlah untuk menyimpan semua register yang digunakan oleh procedure tersebut dan mengembalikan semua isi register pada akhir procedure. Cal ini dilakukan untuk menjaga supaya program utama yang menggunakan procedure tersebut tidak menjadi kacau nantinya. Sebagai contohnya bisa anda lihat pada program 1@.0.
?:
J DE$'A$ P(O5ED4(E J J J JKKKKKKKKKKKKKKKKKKKKKKKKKKStoKJ .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses %ar DB P %lm DB IBA&3A$ S) 3A$4S)A %E*E*ADA( I J ,= %ara2ter Proses " 3OV 59C,= J Banya2nya peng!langan 9O( B9CB9 J Addressing 3ode 4lang " 3OV D*C%lmSB9T 3OV %arCD* 5A** 5eta2W%ar J Panggil 5eta2W%ar )$5 B9 *OOP 4lang )$& , h 5eta2W%ar P(O5 $EA( P4S6 A9 J Simpan sem!a register P4S6 D9 J >ang dig!na2an 3OV A6C ,h 3OV D*C%ar )$& ,1h J 5eta2 2ara2ter POP D9 J %embali2an sem!a register POP A9 J >ang disimpan (E& J %embali 2epada si pemanggil 5eta2W%ar E$DP J E$D Proced!res E$D &Data Program 1G.,. 3engg!na2an Proced!re
Bila program 1@.0. dijalankan, maka pada layar akan ditampilkan; BA&3A$ S) 3A$4S)A %E*E*ADA( Pada procedure kita tidak bisa menggunakan parameter, inilah salah satu kelemahan dari procedure yang sangat berarti. .ntuk menggunakan parameter anda harus menggunakan -A2#OS.
?@
?A
4ari program -A21 bisa anda lihat betapa mudahnya untuk menggunakan macro. Pada procedure, setiap kali kita memanggilnya dengan perintah 2A11 maka program akan melompat pada procedure tersebut, sehingga setiap procedure hanya terdapat satu kali saja pada program. 1ain halnya dengan -acro, setiap terjadi pemanggilan terhadap macro atau dapat dikatakan secara kasar, setiap kita memanggil macro dengan menuliskan nama macronya dalam program, maka seluruh isi macro akan dipindahkan pada program yang memanggilnya. 4engan demikian bila pada program anda memanggil suatu macro sebanyak 19 kali maka macro tersebut akan disisipkan 19 kali pada program. Cal inilah yang menyebabkan program yang menggunakan macro ukuran programnya menjadi lebih besar. etapi hal ini juga yang menyebabkan program yang menggunakan macro lebih cepat daripada procedure, karena pada procedure komputer harus melakukan lompatan tetapi pada macro tidak perlu.
??
Setelah program 1A.B. anda ketikkan, simpanlah dengan nama IP.S A$A.-2#I. Anda bisa menggunakan macro pada file pustaka.mcr dengan hanya manambahkan kata; )$5*4DE P4S&A%A.35( Sebagai contohnya bisa anda lihat pada program 1A.8. yang menggunakan file pustaka.mcr ini untuk mencetak kalimat dan karakter. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " &P&%.AS3 J J <!ngsi " 5ontoh mengg!na2an J J p!sta2a macro J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J )$5*4DE P4S&A%A.35( .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses %al DB IPE$''4$AA$ P4S&A%A 3A5(O XI Proses" 5eta2W%lm %al 5eta2W%ar I>I J 5eta2 %alimat %al J 5eta2 6!r!# I>I J '!na2an #ile P4S&A%A.35(
?E
E$D
Setelah program 1A.8. anda jalankan, maka pada layar akan ditampilkan; PE$''4$AA$ P4S&A%A 3A5(O >
E9
" (ika fungsi tersebut sering dipanggil, gunakanlah P(O5ED4(E 2 arena procedure tidak memperbesar program. " (ika fungsi tersebut kecil, gunakanlah 3A5(O . $arena pengaruh terhadap besarnya program hanya sedikit dan program akan lebih cepat. " (ika fungsi tersebut besar, gunakanlah P(O5ED4(E . $arena procedure tidak memperbesar program.
E1
E0
baris7?9O0:*, maka memory yang dibutuhkan untuk satu layar adalah; = F ,- F , K 8 Byte 4engan alamat memory yang digunakan secara berurutan ini, dimana teks akan menempati offset genap dan atribut menempati offset ganjil, alamat dari posisi karakter maupun atribut bisa dihitung dengan menggunakan rumus; O##set %ara2ter K +Baris F 1G A L +%olom F ,A O##set Atrib!t K +Baris F 1G A L +%olom F ,AL1 4engan demikian bila kita ingin menampilkan karakter ISI pada posisi kolom 89 dan baris 10 maka alamat yang digunakan adalah; 710O1@9*G789O0*F0999, atau tepatnya B?99h;0999. .ntuk menampilkan atribut pada posisi kolom 89 dan baris 10 maka alamat yang digunakan adalah;710O1@9*G789O0*G1F0991, atau tepatnya B?99h;0991. Sebagai contohnya bisa anda lihat pada program 1?.1. yang akan menampilkan karakter 5S5 pada posisi kolom 89 dan baris 10 dengan atributnya E:. &!lisW%ar 3A5(O 9C>C%arCAttr 3OV A9C B= h 3OV ESCA9 J ES 3en!n1!2 pada segment layar 3OV 3OV 34* 3OV 3OV 3OV 34* ADD A6C> A*C1G A6 B9CA9 A6C9 A*C, A6 B9CA9
3OV A*C%ar J A*K2ara2ter yang a2an ditampil2an 3OV A6CAttr J A6KAtrib!t yang a2an ditampil2an 3OV ES"SB9TCA* J &il2an %ara2ter dan atrib!tnya 3OV ES"SB9L1TCA6 J pada posisi 2olom 9 dan baris > E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " *A>A(1.AS3 J J A!thor " Sto J J J J <!ngsi " 3enampil2an 2ara2ter dan atrib!tnya J J dengan men!lis2annya langs!ng pada J J memory layar J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h Proses " &!lisW%ar 8 1, ISI B- J &!lis 2ara2ter ISI dengan J no atrib!t B- pada posisi )$& , h J 2olom 8 dan baris 1, E$D Proses Program 1=.1. 3en!lis2an langs!ng pada memory layar
EB
4engan mengertinya anda pada program 1?.1. ini maka banyak program menarik yang dapat anda hasilkan, seperti program rontok, menu sorot, shado+ dan lain sebagainya.
'eser 3A5(O Pos> P4S6 A9 P4S6 B9 P4S6 59 J Simpan sem!a register yang dig!na2an 9O( 59C59 3OV A*C,G S4B A*CPos> 3OV 5*CA* J 59Kbanya2nya pergeseran 2eba0ah *oop," 3OV A*CB>&E P&( ES"SB9T J A*K%ara2ter pada layar 3OV B>&E P&( ES"SB9L1G TCA* J 'eser 2e ba0ah 6ilang" 3OV B>&E P&( ES"SB9TCI I J 6ap!s 2ara2ter J sebel!mnya Delay J delayC s!paya bisa J terlihat ADD B9C1G J 3en!1! baris selan1!tnya *OOP *oop, J 4langi 2e *oop, POP POP POP E$D3 59 B9 A9
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " (O$&O%.AS3 J J A!thor " Sto J J <!ngsi " 3embersih2an layar dengan cara J J meronto22an h!r!#nya sat! persat!J J J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/
E8
.3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses Pos> DB P Proses" 3OV A9C B= h 3OV ESCA9 J ES mencatat segment layar 3OV B9C7BB= J Posisi 2ara2ter = C,3OV 59C,J Banya2nya peng!langan baris 4lang> " 3OV Pos>C5* J Pos> mencatat posisi baris P4S6 59 J 59 mencatat posisi > 3OV 59C= J Banya2nya peng!langan %olom 4lang9 " 53P B>&E P&( ES"SB9TC77 J Apa2ah ada 2ara2ter J pada layar P .B &d2 J *ompat 2e &d2C 1i2a tida2 ada 'eser Pos> J 'eser 2ara2ter terseb!t 2e ba0ah &d2 " S4B B9C, J B9 men!n1!2 2ara2ter selan1!tnya *OOP 4lang9 J Proses = 2ali !nt!2 2olom POP 59 J Ambil posisi > *OOP 4lang> J 4langi dan ganti baris 2e atas E9)&" )$& , h E$D &Data Program 1=.,. 3eronto22an h!r!# pada layar
Bila program 1?.0 dijalankan, maka semua huruf pada layar akan dirontokkan satu persatu sampai habis. === &br1?0.P!3 >>> 'ambar 1=.,. 6asil e2se2!si program 1=.,. Adapun penjelasan programnya adalah; Delay 3A5(O P4S6 59 9O( 59C59 *oop1" *OOP *oop1 POP 59 E$D3 -acro ini digunakan untuk menunda program. 4engan menolkan 23, maka looping yang akan didapatkan menjadi HHHHh kali, karena pengurangan 9 dengan 1 akan akan menghasilkan nilai "1 atau HHHHh.
E:
'eser 3A5(O Pos> P4S6 A9 P4S6 B9 P4S6 59 Pada macro inilah nantinya huruf"huruf pada la yar akan digeser. .ntuk itu simpanlah semua register yang digunakan oleh macro ini karena pada program utama, register"register juga digunakan. 9O( 59C59 3OV A*C,G S4B A*CPos> 3OV 5*CA* !ni adalah bagian dari macro geser yang akan menghitung banyaknya pergeseran keba+ah yang akan dilakukan, dengan melihat posisi dari huruf yang digeser pada ,ariabel 5PosL5. *oop," 3OV A*CB>&E P&( ES"SB9T 3OV B>&E P&( ES"SB9L1G TCA* 6ilang" 3OV B>&E P&( ES"SB9TCI I Delay ADD B9C1G *OOP *oop, Bagian inilah yang akan menggeser tulisan pada layar. #egister B3 ditambah dengan 1@9 untuk mengakses baris diba+ahnya. POP POP POP E$D3 59 B9 A9
Pada akhir macro, kembalikanlah semua register yang telah disimpan pada a+al macro. !ngat urutannya harus terbalik. Pada program utama; .3ODE* S3A** .5ODE
E@
O(' 1
&Data " .3P Proses Pos> DB P Pertama"tama siapkanlah sebuah ,ariabel untuk menampung posisi dari baris yang sedang diakses. Proses" 3OV A9C B= h 3OV ESCA9 3OV B9C7BB= 3OV 59C,#egister 'S, kita gunakan sebagai penunjuk segment layar, yaitu pada segment B?99h. #egister B3 yang nantinya akan kita gunakan sebagai penunjuk offset dari 'S diberi nilai BEE?. 4engan demikian pasangan 'S;BP akan menunjuk pada karakter dipojok kanan ba+ah atau posisi AE,08. 4lang> " 3OV Pos>C5* P4S6 59 3OV 59C= 4lang9 " 53P B>&E P&( ES"SB9TC77 .B &d2 'eser Pos> &d2 " S4B B9C, *OOP 4lang9 POP 59 *OOP 4lang> E9)&" )$& , h E$D &Data $emudian lakukanlah proses dengan melihat apakah ada karakter atau tidak. Cal ini dapat dilakukan dengan membandingkannya dengan kode AS2!! BB, bila data pada buffer layar diba+ah AS2!! BB artinya tidak ada karakter pada
EA
layar. (ika ada karakter pada layar maka proses geser dilakukan, sebaliknya jika tidak ada karakter proses akan menuju pada posisi selanjutnya dan melakukan hal yang sama.
Scrool 3A5(O 91C>1C9,C>,CArah P4S6 59 3OV A6CArah J Ser:is '!l!ng 2eatas ata! 2eba0ah 3OV A*C1 J .!mlah Baris 3OV 5*C91 J %olom 2iri atas 3OV 56C>1 J Baris 2iri Atas 3OV D*C9, J %olom 2anan ba0ah 3OV D6C>, J Baris 2anan ba0ah 3OV B6C 1 111b J Atrib!t hasil pengg!l!ngan )$& 1 h POP 59 E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " S5(OO*.AS3 J J A!thor " Sto J J <!ngsi " 3engg!l!ng layar J
E?
J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses 'WAtas EO4 G J Ser:is !nt!2 mengg!l!ng 2e atas 'WBa0ah EO4 E J Ser:is !nt!2 mengg!l!ng 2e ba0ah Proses" 3OV 59CE 4lang" Scrool , E G 18 'WBa0ah delay *OOP 4lang )$& , h E$D &Data Program 1=.7. 3eng!l!ng layar
Bila program 1?.B. anda jalankan, maka pada layar akan tampak seperti gambar 1?.0. === &br1?B.P!3 >>> 'ambar 1=.7. 6asil e2se2!si program 1=.7.
EE
E$D3
'oto9> 3A5(O 9C> 3OV A6C , 9O( B9CB9 3OV D6C> 3OV D*C9 )$& 1 h E$D3
Simpan* 3A5(O J 3acro !nt!2 menyimpan sel!r!h *O5A* 4lang J isi layar monitor 3OV A9C B= h 3OV ESCA9 3OV 59C8 9O( B9CB9 4lang" 3OV A*CES"SB9T
199
3OV *ayarSB9TCA* )$5 B9 *OOP 4lang E$D3 Bali2* 3A5(O J 3acro !nt!2 mengembali2an sem!a *O5A* 4lang J isi layar yang telah disimpan 3OV 59C8 9O( B9CB9 4lang" 3OV A*C*ayarSB9T 3OV ES"SB9TCA* )$5 B9 *OOP 4lang E$D3 Sorot 3A5(O 9C> *O5A* 4lang 3OV B*C> 3OV A*C1G 34* B* 3OV B9CA9 3OV A*C9 3OV A6C, 34* A6 ADD B9CA9 )$5 B9 J Alamat 0arna pada posisi 9C> 3OV 4lang" 3OV 59C,J Pan1angnya sorotan J 3acro !nt!2 memb!at sorotan J pada men!
B>&E P&( ES"SB9TC8<h J Atrib!t sorotan J p!tih diatas merah ADD B9C, *OOP 4lang E$D3
(ead2ey 3A5(O J 3acro !nt!2 membaca mas!2an dari 3OV A6C J 2eyboard. )$& 1Gh J hasilnya A6KExtendedC A*KAS5)) E$D3 3en!* 3A5(O String 3OV A6C B *EA D9CString )$& ,1h E$D3 J 3acro !nt!2 menceta2 men!
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " SO(O&.AS3 J J A!thor " Sto J J <!ngsi " 3emb!at men! sorot !nt!2 J J dig!na2an program J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data" .3P Proses *ayar DB 8 D4P +PA 3en! DB BCBCILKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLIC17C1 DB BCBCIV ZZZ 3E$4 SO(O& [[[ VIC17C1 DB BCBCILKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLIC17C1 DB BCBCIV VIC17C1 DB BCBCIV 1. Pilihan pertama VIC17C1
191
DB BCBCIV ,. Pilihan %ed!a VIC17C1 DB BCBCIV 7. Pilihan %etiga VIC17C1 DB BCBCIV 8. Pilihan %eempat VIC17C1 DB BCBCIV VIC17C1 DB BCBCILKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLXI Pos9 DB ,, J Posisi 2olom m!la;m!la Pos> DB 1, J Posisi baris m!la;m!la PanahWAtas EO4 E, J %ode tombol panah atas PanahWBa0ah EO4 = J %ode tombolpanah ba0ah &Enter EO4 Dh J %ode tombol Enter Proses " 5ls J 6ap!s layar 'oto9> = J 2!rsor K C= 3en!* 3en! J 'ambar men! Simpan* J Simpan isi layar 4lang " Bali2* J &il2an isi layar yang J disimpan Sorot Pos9CPos> J Sorot posisi 9C> 3as!2an" (ead2ey J Baca mas!2an dari 2eyboard 53P A6CPanahWBa0ah J Panah ba0ah yang dite2an P .E Ba0ah J >aN lompat ba0ah 53P A6CPanahWAtas J Panah atas yang dite2an P .E 5e2> J >aC lompat 5e2> 53P A*C&Enter J &ombol enter yang dite2an P .$E 3as!2an J B!2anC lompat 2e !langi .3P Selesai J >aC lompat 2e selesai 5e2> " 53P Pos>C1, J Apa2ah sorotan paling atas P .E 3ax> J >aN lompat 2e 3ax> DE5 Pos> J Sorot2an 2e atas .3P 4lang J *ompat 2e !lang 3ax> " 3OV Pos>C1J Pos>KSorotan paling ba0ah .3P 4lang J lompat 2e !lang Ba0ah " 53P Pos>C1J apa2ah sorotan paling ba0ah P .E $ol> J >aN lompat 2e $ol> )$5 Pos> J Sorot2an 2e ba0ah .3P 4lang J *ompat 2e !lang $ol> " 3OV Pos>C1, J Sorotan paling atas .3P 4lang J *ompat 2e !lang Selesai" )$& , h E$D &Data Program 1=.8. 3emb!at 3en! Sorot
Bila program 1?.8. dijalankan, maka anda akan mendapatkan suatu menu sorot yang menarik, seperti pada gambar 1?.8. === &br1?8.P!3 >>> 'ambar 1=.8. 6asil e2se2!si program 1=.8.
190
19B
A1 F Domor halaman tampilan yang akan diaktifkan Delay 3A5(O (ep *O5A* 4lang P4S6 59 3OV D9C(ep S4B 59C59 4lang" *OOP 4lang DE5 D9 53P D9C .$Q 4lang POP 59 E$D3 J 3acro ini !nt!2 men!nda program
A2WPage 3A5(O $o J 3acro ini dig!na2an !nt!2 3OV A6CJ menga2ti#2an halaman layar 3OV A*C$o )$& 1 h E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " PA'E.AS3 J J A!thor " Sto J J <!ngsi " 4nt!2 menga2ti#2an halamanJ J layar tertent! J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses %al DB I)$) ADA*A6 6A*A3A$ &A3P)*A$ %E , IC17C1 DB I DE$'A$ A*A3A& ADA* B= "1 h NNN XI Proses" A2WPage , J A2ti#2an halaman layar yang 2e , 3OV A6C B J *EA D9C%al J &!lis 2alimat pada halaman 2e , )$& ,1h J 3OV 59C7 J Banya2nya peng!langan 4lang" A2WPage , J A2ti#2an halaman 2e , Delay 1 A2WPage J A2ti#2an halaman 2e Delay 1 *OOP 4lang )$& , h E$D &data
Bila program 1?.:. anda jalankan, maka dapat anda lihat perpindahan halaman aktif dari halaman tampilan 9 7default 4OS* dan halaman tampilan 0. 5atatan" Bila anda melakukan 21S dengan 4OS, maka hanya halaman tampilan aktif yang akan terhapus, sedangkan data pada halaman tampilan yang lain akan tetap.
198
19:
3OV B6C1G J .!mlah byte per2ara2ter *EA BPC&abel J *o2asi tabel )$& 1 h )$& , h E$D &Data Program 1=.G. 3er!bah bent!2 2ara2ter
Bila program 1?.@. dijalankan, maka semua karakter 5A5 akan akan segera berubah bentuknya menjadi berbentuk pedang7gambar 1?.@.*. ==== &br1?@.P!3 >>>> 'ambar 1=.G. 6asil e2se2!si program 1=.G. Curuf"huruf yang digunakan akan kembali normal, bila dilakukan pergantian mode. 2obalah anda buat sebuah program yang akan mengganti mode layar dan lihatlah hasil yang akan terjadi setelah membaca bagian 1?.19 diba+ah ini.
19@
K 9:h K & K &ray K B093099 K 2-'6 K 1 K K 9@h K & K 0 K @893099 K 2-'6 K 1 K K 9Ah K K -ono K ?93 0: K 4'6 K ? K K 94h K & K 1@ K B093099 K '6 K ? K K 9'h K & K 1@ K @893099 K '6 K 8 K K 9Hh K & K -ono K @893B:9 K '6 K 0 K K 19h K & K 1@ K @893B:9 K '6 K 0 K K 11h K & K -ono K @8938?9 K -6 K 1 K K 10h K & K 1@ K @8938?9 K 6 K 1 K K 1Bh K & K 0:@ K B093099 K -6 K 1 K G""""""G""""""""G"""""""""G"""""""""""G""""""""""G""""""""""G $et. 2 F 2&A 72olor &raphics Adapter* - F -2&A 7-emory 2ontroller 2ard Array* 4 F -4A 7-onochrome 4isplay Adapter* ' F '&A 7'nchanced &raphics Adapter* 6 F 6&A 76ideo &raphics Array* 'ambar 1=.E. &abel 3ode Video Setelah melihat tabel mode ,ideo, mungkin ada yang heran mengapa setelah mode 9Ah langsung ke mode 94h. Sebenarnya mode" mode di antara kedua mode ini ada, tetapi hanya untuk perangkat ,ideo khusus seperti untuk keperluan P2jr yang sudah jarang. -ode ,ideo umum dari default 4OS adalah mode 9Bh yaitu teks ?930:. 4alam inisialisasi mode ,ideo ini kita akan menggunakan 0 ser,ice dari interupt 19h, yaitu untuk mendapatkan mode ,ideo aktif dan merubah mode ,ideo. .ntuk mendapatkan mode ,ideo aktif gunakan ser,ice 9Hh. Setelah pemanggilan ser,ice ini, maka beberapa nilai akan dikembalikan ke register yaitu ; " A1 F mode ,ideo aktif 7lihat tabel mode ,ideo* " AC F jumlah karakter per kolom " BC F halaman tampilan aktif Calaman tampilan aktif di sini maksudnya adalah nomor dari halaman yang sedang ditampilkan. (umlah halaman yang terdapat pada suatu sistem ,ideo tergantung pada jumlah memori ,ideo yang tersedia. Sedangkan ser,ice 99h digunakan untuk merubah mode ,ideo. Seperti biasa register AC akan berisi nomor ser,ice yang dalam hal ini adalah 99h. Sedangkan mode yang diinginkan diletakkan dalam register A1.
19A
Set3ode 3A5(O 3ode 3OV A6C 3OV A*C3ode )$& 1 h E$D3 Setiap kali dilakukan perubahan pada mode ,ideo, maka otomatis memori ,ideo juga akan dikosongkan dan sebagai akibatnya layar juga akan dibersihkan. &)P" $arena setiap kali terjadi pergantian mode layar akan dibersihkan, anda bisa memanfaatkannya untuk membersihkan layar. -isalkan pada modus eks default79B*, dengan mengaktifkan mode 9B juga, maka isi dari layar akan langsung terhapus. Bila kita tidak menginginkan terjadinya efek pembersihan layar ini, maka nomor mode ,ideo pada A1 harus dijumlahkan dengan 10? atau dengan kata lain bit ke"A pada A1 dihidupkan. 4engan cara ini maka isi layar yang lama tidak akan hilang setelah perubahan mode.
19?
19E
V V V S5AS Scan String V V S5ASB Scan String 1 Byte V V S5ASD Scan String 1 Dord V V S5ASD Scan String 1 Do!ble Dord U= 7=G \ = 8=G@ V V V V S&OS Store String V V S&OSB Store A* at ES"D) String V V S&OSD Store A9 at ES"D) String V V S&OSD Store EA9 at ES"D) String U= 7=G \ = 8=G@ V L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L 'ambar 1B.1. Perintah 4nt!2 Operasi String
119
*OOP
4lang
J DS"S) 2e ES"D)
3OV A6C B J *EA D9CB!##er J )$& ,1h J 5eta2 data pada b!##er )$& , h E$D &Data Program 1B.1. Pengg!naan perintah 3OVS
Pada program 1E.1. dapat anda lihat bagaimana proses pengcopyan data I$alimatI ke IbufferI. Bila program 1E.1. dijalankan maka dilayar akan ditampilkan; Donald D!c2 Casil yang tercetak merupakan data pada buffer yang diambil pada ,ariabel IkalimatI. Perintah 214 digunakan untuk memastikan supaya arah proses menaik7S! dan 4! ditambah setiap kali operasi*. +S&DA3en!r!n U;;; DS"S) ;;;@ 3enai2+5*DA W L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L VDVoVnVaVlVdV VDV!VcV2V L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L;;;L O##set" 1 7 1 8 1 - 1 G 1 E 1 = 1 B , , 1 , , , 7 $arena sumber7kalimat* dan tujuan7buffer* pada program 1E.1. digunakan tipe data byte74B* maka oleh assembler perintah -O6S akan dijadikan 3OVSB 7-o,e string byte*, sehingga register S! dan 4! setiap kali proses akan ditambah dengan 1. Bila sumber dan tujuan didefinisikan dengan 4W, maka assembler akan menjadikannya 3OVSD 7-o,e string +ord*, dan setiap kali operasi S! dan 4! akan ditambah dengan 0. Selain dengan perintah -O6S, anda bisa juga langsung menggunakan perintah -O6SB atau -O6SW. -ungkin ada yang bertanya"tanya, mengapa kita harus menggunakan -O6SB atau -O6SW, jika dengan perintah -O6S assembler akan merubahnya secara otomatis. Bila anda menggunakan perintah -O6SB atau -O6SW secara langsung maka hal ini akan membantu assembler karena ia tidak perlu lagi menterjemahkannya, selain itu program akan lebih efisien. !ntruksi -O6SB dan -O6SW tidak memerlukan operand, oleh karena itu bila pada program 1E.1. ingin anda rubah dengan -O6SB, maka pada perintah; -O6S 'S;Buffer,$alimat Bisa anda ganti menjadi; -O6SB
111
Sebenarnya untuk operasi string ini assembler telah menyediakan beberapa pengulangan khusus, yaitu; " (EP =#epeat> ; -elakukan pengulangan suatu operasi string sebanyak 23 kali7register 23 akan dikurangi 1 secara otomatis*. !ni merupakan bentuk pengulangan tanpa syarat yang akan mel akukan pengulangan terus sampai 23 mencapai 9. " (EPE =#epeat !f 'Qual> ; -elakukan pengulangan operasi string sebanyak 23 kali atau bila sampai terdapat ketidaksamaan pada kedua operand yang membuat Rero flag menjadi tidak aktif7PHF9*. " (EPQ =#epeat !f Pero> ; Perintah ini sama dengan #'P'. " (EP$E =#epeat !f Dot 'Qual> ; -elakukan pengulangan operasi string sebanyak 23 kali atau bila sampai terdapat kesamaan pada kedua operand yang membuat Rero flag menjadi aktif7PHF1*. " (EP$Q =#epeat !f Dot Pero> ; Perintah ini sama dengan #'PD'. Perhati2anlah ; Anda hanya bisa menggunakan bentuk pengulangan string bersyarat7#'P',#'PP,#'PD',#'PDP* ini disertai dengan perintah 2-PS dan S2AS. Cal ini dikarenakan hanya 2-PS dan S2AS yang mempengaruhi Rero flag. Bila pada program 1E.1. digunakan perulangan string, maka hasilnya akan menjadi seperti program 1E.0. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J P(O'(A3 " S&()$',.AS3 J J A4&6O( " Sto J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses %alimat DB IDonald D!c2XI J 1, 2ara2ter B!##er DB 1, D4P+PA Proses" *EA S)C%alimat J S) K s!mber *EA D)CB!##er J D) K t!1!an 5*D J Arah proses menai2 3OV 59C1= J Banya2nya peng!langan (EP 3OVS ES"B!##erC%alimat J Pindah2an data J I2alimatI 2e IB!##erI 3OV A6C B J *EA D9CB!##er J )$& ,1h J 5eta2 Data pada B!##er
110
2-PSB7perbandingan byte*, 2-PSW7perbandingan +ord* dan 2-PS47perbandingan double +ord pada ?9B?@ keatas*. Pada string, perbandingan akan dilakukan pada lokasi memory 4S;S! dan 'S;4!. Perbandingan bisa dilakukan perByte, PerWord atau per4ouble Word7.ntuk ?9B?@ keatas*. 5eta2W%lm 3A5(O %al 3OV A6C B *EA D9C%al J 3acro !nt!2 menceta2 2alimat )$& ,1h E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J P(O'(A3 " 53PS.AS3 J J A4&6O( " Sto J J <4$'S) " 3engg!na2an perbandinganJ J pada string J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data" .3P Proses %al1 DB Ia21sd#ha21:hd#I %al, DB Ia21sd#ha2P:hd#I Pesan1 DB I%ed!a 2alimat yang dibanding2an sama N XI Pesan, DB I%ed!a 2alimat yang dibanding2an tida2 sama NXI Proses " *EA S)C%al1 *EA D)C%al, 5*D J Arah proses menai2 3OV 59C18 J Banya2nya perbandingan dila2!2an 4lang " (EP 53PSB J Banding2an selama sama .$E &d2Sama J .i2a tida2 samaC lompat 2e &d2Sama 5eta2W%lm Pesan1 J 5eta2 pesan tida2 sama .3P E9)& J Selesai &d2Sama" 5eta2W%lm Pesan, J 5eta2 pesan sama E9)& " )$& , h E$D &Data Program 1B.7. Perbandingan String
Bila program 1E.B. dijalankan, maka pada layar akan ditampilkan; %ed!a 2alimat yang dibanding2an tida2 sama N Perlu anda perhatikan, bah+a perbandingan akan dilakukan sebanyak 18 kali7Dilai 23* atau terdapat ketidak"samaan pada kedua lokasi memory. Bila ditemukan adanya ketidak samaan, perbandingan akan selesai dilakukan dan register S! dan 4! tetap ditambah dengan satu, sehingga akan menunjuk pada karakter selanjutnya7sesudah karakter yang tidak sama, pada contoh 1E.B. berupa karakter 5,5*.
Operasi scan pada string digunakan untuk membandingkan nilai pada register A1, A3 atau 'A37?9B?@* dengan data pada 'S;4!. Adapun synta/ pemakaian S2AD ini adalah; S5A$S Operand Sama halnya dengan operasi pada string lainnya, bila digunakan perintah diatas, assembler masih akan menerjemahkannya dalam bentuk S2ASB7perbandingan A1 dengan 'S;4!*, S2ASW7perbandingan A3 dengan 'S;4!* atau S2AS47perbandingan 'A3 dengan 'S;4!* yang tidak memerlukan operand. 5eta2W%lm 3A5(O %al 3OV A6C B J *EA D9C%al J )$& ,1h J 3acro !nt!2 menceta2 2alimat E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " S5A$.AS3 J J A!thor " Sto J J <!ngsi " 3elihat proses pencarian J J string +ScanA J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses 5ari DB Ia2ddti!ernd#alD#hdad#bnI J ,8 b!ah 2ara2ter %etem! DB I %ara2ter IIsIIyang dicari 2etem! N XI &ida2 DB I %ara2ter IIsII yang dicari tida2 2etem! N XI Proses" *EA D)C5ari J *o2asi dari string yang diScan 3OV A*CIsI J %ara2ter yang dicari 3OV 59C,8 J Banya2nya proses Scan (EP$E S5ASB J Scan sebanya2 59 ata! sampai Q<K1 .$Q &d2WAda J .i2a tida2 2etem!C ma2a lompatN 5eta2W%lm %etem! J 5eta2 2etem! .3P Exit J 6abis &d2WAda" 5eta2W%lm &ida2 J 5eta2 tida2 2etem! E9)& " )$& , h E$D &Data J Selesai
Bila program 1E.8. dijalankan, maka pada layar akan ditampilkan; %ara2ter IsI yang dicari tida2 2etem! N
118
11:
11@
)$5 59 J 59 ditambah 1 53P A9C J Apa2ah hasil bagi s!dah habis P .$E 4lang J .i2a bel!mC !langi lagi N 5eta2 " POP D9 J Ambil 1 ang2a yang disimpan ADD D*CI I J 4bah ang2a terseb!t dalam 2ode AS5)) 3OV A6C , J )$& ,1h J 5eta2 ang2a terseb!t *OOP 5eta2 J !langi E$D )$& , h &Data Program , .1. 3enceta2 ang2a dalam bent!2 desimal
Bila program 09.1. dijalankan, maka pada layar akan ditampilkan; G--7-
5Desimal 3A5(O Ang2a *O5A* 4langC 5eta2 3OV A9CAng2a J A9 K ang2a yang a2an diceta2 3OV B9C1 J B9 K penyeb!t 9O( 59C59 J 59 K 4lang " 9O( D9CD9 J 5egah sisa bagi men1adi pembilang N D)V B9 J Bagi ang2a yang a2an diceta2 dengan 1 P4S6 D9 J Simpan sisa bagi dalam stac2 )$5 59 J 59 ditambah 1 53P A9C J Apa2ah hasil bagi s!dah habis P .$E 4lang J .i2a bel!mC !langi lagi N 5eta2 " POP D9 J Ambil 1 ang2a yang disimpan
11A
ADD D*CI I J 4bah 1 ang2a dalam 2ode AS5)) 3OV A6C , J )$& ,1h J 5eta2 ang2a terseb!t *OOP 5eta2 J !langi E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " P()3A.AS3 J J A!thor " Sto J J <!ngsi " 3encari dan menampil2an ang2a J J prima dari sampai 1 J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data ".3P A0al Batas DD 1 Prima DD ) DD , . DD , Spasi DB I XI 6eader DB BCBCBCIBilangan Prima 1 sampai 1 DB BCBCBCI;;;;;;;;;;;;;;;;;;;;;;;;IC17C1 C1 CIXI
" IC17C1
A0al " 5eta2W%lm 6eader Proses " 3OV A9CBatas J .i2a bilangan yang dice2 53P A9C) J s!dah sama dengan Batas .E Exit J ma2a selesai <or) " 3OV .C, J . !nt!2 dibagi oleh ) 3OV PrimaC J Prima K &ida2 <orPrima" 3OV A9CPrima J 53P A9C J Apa2ah prima K &ida2 P .$E &ambah) J 1i2a Prima K >aC lompat 2e &ambah) 3OV A9C) J 53P A9C. J)K.P .$E &ida2 J .i2a tida2 samaC lompat 2e &ida2 5Desimal ) J 5eta2 ang2a prima 5eta2W%lm Spasi J 5eta2 spasi 3OV PrimaC1 J Prima K >a .3P &ambah. J *ompat 2e &ambah. &ida2 " 3OV D9C J 3OV A9C) J 3OV B9C. J D)V B9 J Bagi ) dengan . 53P D9C J Apa2ah sisa bagiK P .$E &ambah. J .i2a tida2 sama lompat 2e &ambah. 3OV PrimaC1 J Prima K >a &ambah. " )$5 . J &ambah . dengan 1 .3P <orPrima J 4langiC bagi ) dengan . &ambah) " )$5 ) J &ambah ) dengan 1 .3P Proses J 4langi 5e2 ) K prima ata! b!2an Exit " )$& , h E$D &Data Program , .,. 3encari dan menapil2an bilangan prima
11?
Bila program 09.0. dijalankan, maka pada layar akan ditampilkan; Bilangan Prima sampai 1 " ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; , 7 - E 11 17 1E 1B ,7 ,B 71 7E 81 87 8E -7 -B G1 GE E1 E7 EB =7 =B BE 1 1 1 7 1 E 1 B 117 1,E 171 17E 17B 18B 1-1 1-E 1G7 1GE 1E7 1EB 1=1 1B1 1B7 1BE 1BB ,11 ,,7 ,,E ,,B ,77 ,7B ,81 ,-1 ,-E ,G7 ,GB ,E1 ,EE ,=1 ,=7 ,B7 7 E 711 717 71E 771 77E 78E 78B 7-7 7-B 7GE 7E7 7EB 7=7 7=B 7BE 8 1 8 B 81B 8,1 871 877 87B 887 88B 8-E 8G1 8G7 8GE 8EB 8=E 8B1 8BB - 7 - B -,1 -,7 -81 -8E --E -G7 -GB -E1 -EE -=E -B7 -BB G 1 G E G17 G1E G1B G71 G81 G87 G8E G-7 G-B GG1 GE7 GEE G=7 GB1 E 1 E B E1B E,E E77 E7B E87 E-1 E-E EG1 EGB EE7 E=E EBE = B =11 =,1 =,7 =,E =,B =7B =-7 =-E =-B =G7 =EE ==1 ==7 ==E B E B11 B1B B,B B7E B81 B8E B-7 BGE BE1 BEE B=7 BB1 BBE 4engan program 09.0. bilangan prima antara 9 sampai @::B: dapat anda ditampilkan.
11E
S4B B6CB6 J .adi2an B6K 3OV B*C&estWAng2a J B* K ang2a yang a2an diceta2 P4S6 B9 J Simpan ang2a terseb!t 3OV 5*C8 S6( B*C5* 5eta2 POP B9 A$D B*C <h 5eta2 )$& , h E$D &Data Program , .7. 3enceta2 ang2a dalam bent!2 hexadesimal J Ambil 8 bit tinggi dari L J B* !nt!2 diceta2 J 5eta2 1 ang2a hexa tingginya J Ambil ang2a yang disimpan J Ambil 8 bit rendah dari L J B* !nt!2 diceta2
Bila program 09.B. dijalankan, maka pada layar akan tercetak; <<
109
101
K 2&A K B49"B4H K B49"B4H K K 4isk 2ontroller K BH9"BHA K BH9"BHA K K 2O-1 K BH?"BHH K BH?"BHH K G"""""""""""""""""""""""""""""G"""""""""""G"""""""""""G 'ambar ,1.1. &abel $omor Port
100
bisa penulis ungkapkan disini karena hal tersebut sangat tergantung dari jenis perangkat kerasnya.
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " SO4$D1.AS3 J J A!thor " Sto J J <!ngsi " memb!nyi2an spea2er dan J J memati2annya melal!i port G1h J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h Proses " )$ A*CG1h O( A*C O4& G1hCA* (ead2ey J Ambil data port G1h USpea2er@ 11b J .adi2an Bit 2e \ 1 men1adi 1 J B!nyi2an spea2er J 3en!ngg! pene2anan sembarang tombol \ 1 men1adi
A$D A*C111111 b J .adi2an bit 2e O4& G1hCA* J 3ati2an spea2er )$& , h E$D Proses J selesai
10B
.ntuk menghasilkan suatu frek+ensi yang tepat dengan program 01.1. memang agak sulit, karena frek+ensi yang terjadi sangat tergantung dari kecepatan komputer yang bersangkutan. Bila pada k omputer anda terdapat tombol .#BO, cobalah ubah"ubah kecepatan dari komputer untuk melihat perubahan dari frek+ensi yang dihasilkan.
Casil dari perhitungan ini kemudian dimasukkan kedalam timer melalui port 80h dan akan disimpan dalam regiser internal 1@ bit. etapi karena imer ini hanya mempunyai ? bit masukan maka kita tidak bisa memasukkan 1@ bit sekaligus. Cal ini dapat anda bayangkan sebagai suatu kamar yang dapat menampung 0 orang tetapi pintunya hanya dapat dilalui oleh 1 orang. .ntuk itu masukkanlah byte rendahnya terlebih dahulu kemudian masukkan byte tingginya. Setelah timer diprogram, maka speaker tinggal diaktifkan untuk menghasilkan frek+ensi yang sesuai dengan timer. Secara teori frek+ensi yang dapat dihasilkan berupa 1 CR " 1,1EB -hR 7bandingkan dengan kemampuan dengar manusia 09 CR " 09 $hR*. 4engan frek+ensi yang tepat, sebenarnya banyak hal yang dapat kita lakukan. $ita dapat saja membuat program Pengusir Dyamuk ataupun program pengusir Burung dan ikus. Binatang" binatang ini biasanya takut pada frek+ensi yang tinggi seperti frek+ensi 09 $hR " 89 $hR. .ntuk mengusir nyamuk frek+ensi 0: $hR sudah memadai, tetapi bila anda ingin mengusir tikus sebaikkan frek+ensinya dibuat suatu layangan. Artinya frek+ensi yang dihasilkan diubah"ubah antara 09 $hR " 89 $hR. $oP5so!nd 3A5(O )$ A*CG1h J Ambil data Port G1h
108
A$D A*C <5h J 3ati2an bit 2e G \ E O4& G1hCA* J 3as!22an nilainya pada Port G1h E$D3 P5so!nd 3A5(O 6Y 3OV A*C BGh J O4& 87hCA* J Persiap2an &imer 3OV D9C 1,h J 3OV A9C7-8 h J Bagi 1,7-8 6 dengan #re20ensi 3OV B9C6Y J yang a2an dihasil2an. D)V B9 J U 1,7-8 "6Y @ C hasil pada A9 O4& 8,hCA* 3OV A*CA6 O4& 8,hCA* J 3as!22an byte rendah dah!l!. J Port hanya dapat melal!i A*/A9 J 3as!22an byte tingginya.
)$ A*CG1h J Ambil data port G1h USpea2er@ O( A*C 7 J .adi2an Bit 2e G \ E men1adi 1 O4& G1hCA* J B!nyi2an spea2er E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " $>A34%.AS3 J J A!thor " Sto J J <!ngsi " memb!nyi2an spea2er dan mengat!r J J #re20ensinya melal!i &imer. J J <re20ensi yang dihasil2an dapat J J dig!na2an !nt!2 meng!sir nyam!2 J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h Proses " P5so!nd ,3OV A6C )$& 1Gh $oP5so!nd )$& , h E$D Proses J <re20ensi !nt!2 meng!sir nyam!2. J (ead2ey J 3ati2an s!ara. J selesai
Hrek+ensi yang dihasilkan pada program 01.0. tidak akan terdengar, oleh karena itu bila anda ingin mendengar suatu frek+ensi cobalah ubah nilai 0:999 dengan nilai 09 " 09999.
10:
10@
E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " <5B1,.AS3 J J A!thor " Sto J J <!ngsi " 3enceta2 isi <5B1 dan <5B, yang J J menamp!ng parameter program. 4nt!2 J J mencobanyaC tambah2anlah parameter J J pada program saat men1alan2annyaC J J seperti" J J 5"?@ <5B1, P111 P,,, J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses Para1 DB I Parameter pertama " XI Para, DB 17C1 CI Parameter 2ed!a " XI Proses " 5eta2W%lm Para1 J 5eta2 2alimat Para1 3OV B9C-5h J Alamat <5B1 3OV 59C1G 4lang1 " 5eta2W%ar SB9T J 5eta2 parameter pertama +<5B1A )$5 B9 *OOP 4lang1 5eta2W%lm Para, J 5eta2 2alimat Para, 3OV 59C1G 4lang, " 5eta2W%ar SB9T J 5eta2 parameter 2ed!a +<5B,A )$5 B9 *OOP 4lang, E$D )$& , h &Data Program ,,.1. 3engambil parameter 1 dan , program dari <5B
.ntuk mencoba dengan program 00.1., masukkanlah parameter program. Casil eksekusinya akan tampak seperti; 5"?@ <5B1, <111 <,,, Parameter pertama " <111 Parameter 2ed!a " <,,,
10A
memasukkan parameter dalam program, seperti; 5"?@ <5B 111 -aka pada 4 A, offset ke ?9h akan berisi banyaknya karakter yang diketikkan termasuk karakter enter74alam contohF98*. Pada offset ke ?1h akan berisi spasi709h*, dan pada offset ke ?0h berisi karakter pertama parameter program. 5eta2W%lm 3A5(O %lm *EA D9C%lm 3OV A6C B )$& ,1h E$D3 5eta2W%ar 3A5(O %ar 3OV D*C%ar 3OV A6C , )$& ,1h E$D3 J 3acro !nt!2 menceta2 2alimat
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " D&A.AS3 J J A!thor " Sto J J <!ngsi " 3enceta2 isi dari D&A program yang J J menamp!ng parameter program. 4nt!2 J J mencobanyaC tambah2anlah parameter J J pada program saat men1alan2annyaC J J seperti" J J 5"?@ D&A P111 P,,, P777 J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses Para DB 17C1 CI Parameter program " XI &WEnter EO4 Dh Spasi EO4 , h Proses " 5eta2W%lm Para J 5eta2 2alimat Para1 3OV B9C=1h J Alamat D&A 4lang " )$5 B9 J B9 K Alamat D&A 53P B>&E P&( SB9TC&WEnter J Apa2ah tombol Enter P .E Exit J >aN *ompat 2e Exit 5eta2W%ar SB9T J B!2anN 5eta2 2ara2ter tsb 53P B>&E P&( SB9TCSpasi J Apa2ah spasi P .$E 4lang J B!2anC lompat 2e !lang 5eta2W%lm Para J >aN 5eta2 2alimat .3P 4lang J *ompat 2e !lang Exit " )$& , h E$D &Data Program ,,.,. 3engambil parameter program dari D&A
10?
5"?@D&A P111 P,,, P777 Parameter program " P111 Parameter program " P,,, Parameter program " P777
10E
1B9
(ika fungsi ini berhasil menciptakan suatu file baru, maka 2arry flag akan dijadikan 972lear* dan A3 akan berisi nomor handle7Domor pembukaan file*. Setiap file yang dibuka akan mempunyai nomor handle yang berbeda"beda, umumnya bernilai : keatas. Sebaliknya jika proses penciptaan file gagal, maka 2arry flag akan dijadikan 17Set* dan A3 akan berisi kode kesalahan. Adapun kode kesalahan yang sering terjadi adalah; " 9Bh artinya Path tidak ditemukan " 98h artinya idak ada handle " 9:h artinya akses terhadap file ditolak 4alam menggunakan fungsi ini anda harus berhati"hati. Bila pada proses penciptaan file baru dan ternyata file tersebut telah ada, maka fungsi ini akan menjadikan file tersebut menjadi nol. .ntuk menghindari hal ini anda bisa menggunakan fungsi 8'h untuk mengecek apakah file yang akan diciptakan telah ada atau belum. 5reate 3A5(O $ama<ileC Attrib!tC 6andle P4S6 59 P4S6 D9 3OV A6C75h 3OV 59CAttrib!t *EA D9C$ama<ile )$& ,1h 3OV 6andleCA9 POP D9 POP 59 E$D3
1B1
O. P. ; (ika berhasil, maka 2H F 9 dan A3 F Domor handle (ika tidak berhasil, maka 2H F 1 dan A3 F kode kesalahan 6ati;hatilah" Pembukaan file yang dilakukan oeh fungsi ini akan memindahkan pointer file pada a+al file. Bila anda membuka suatu file dengan fungsi ini dan langsung menulis pada file tersebut, maka isi dari file tersebut akan tertimpa. .ntuk menghindari ini pointer file harus dipindahkan pada akhir file sesudah pembukaan. Adapun contoh dari macro untuk membuka file dengan fungsi B4h ini adalah; Open 3A5(O $ama<ileCAttrib!tC6andle P4S6 D9 3OV A6C7Dh 3OV A*CAttrib!t *EA D9C$ama<ile )$& ,1h 3OV 6andleCA9 POP D9 E$D3
1B0
sebenarnya tidak perlu. Cal ini dikarenakan interupsi ini akan menutup semua file yang terbuka secara otomatis. -engenai fungsi 82h dari interupsi 01h ini akan kita bahas lebih lanjut nantinya. )ngatlah"W $emampuan 4os dalam menangani file yang terbuka adalah terbatas. $emampuan 4os dalam menangani file yang terbuka dapat diatur melalui 2onfig.Sys dengan perintah; HilesFn.
1BB
Perhati2anlah" Hungsi ini akan membaca banyaknya data dari suatu file dari posisi yang tidak tetap, tergantung dari pointer file pada saat itu. Hungsi ini hanya mampu membaca sebesar 1 segment7@8 $B* dalam sekali pembacaan. .ntuk membaca file yang besar anda bisa membacanya dengan proses looping. pada proses looping, posisi pointer tidak perlu diatur lagi karena setiap kali selesai pembacaan, pointer akan diatur secara otomatis.
1B8
Hungsi ini hampir sama dengan fungsi BHh. 4engan melihat pada nilai A3 setelah operasi penulisan berhasil, maka dapat diketahui; " Bila A3 F 23, artinya operasi penulisan berhasil dengan sukses. " Bila A3 = 23, artinya penulisan hanya berhasil menulis sebagian dari data yang seharusnya dituliskan. 5eta2 3A5(O %al 3OV A6C B *EA D9C%al )$& ,1h E$D3 J 3acro !nt!2 menceta2 J 2alimat
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " <5OP>.AS3 J J A!thor " Sto J J <!ngsi " 3engcopy #ile J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P 34*A) S!mber DB I$ama #ile s!mber " XI &!1!an DB 17C1 CI$ama #ile t!1!an " XI <ile1 DB E CPCE D!p + A <ile, DB E CPCE D!p + A 6andle1 DD P 6andle, DD P 'ood DB 17C1 CIPengcopyan <ile telah dila2sana2an ....XI Err1 DB 17C1 CISalah perintah .....XI Err, DB 17C1 CI<ile tida2 ditem!2an .....XI Err7 DB 17C1 CIPath tida2 ditem!2an .....XI Err8 DB 17C1 CI<ile yang dib!2aC 2ebanya2an ...XI ErrG DB 17C1 CIPengg!naan <ile handle yang salah ..XI Err1DB 17C1 CISpesi#i2asi Dri:e yang salah ....XI Err,1 DB 17C1 CIDri:e tida2 siap .....XI Err,B DB 17C1 CI%esalahan pen!lisan ....XI Err7 DB 17C1 CI%esalahan pembacaan ....XI Err* DB 17C1 CI%esalahan yang lain .....XI 3!lai " 3OV A9C7 )$& 1 6 &anya<1 " 5eta2 S!mber 3OV A6C A6 *EA D9C<ile1 )$& ,1h J 'anti mode J !nt!2 membersih2an layar J 5eta2 2alimat Hs!mberH J J &anya nama #ile yang ingin J dicopy
*EA B9C<ile1 J .i2a !ser tida2 mengeti22an )$5 B9 J nama #ile yang ingin dicopy 53P B>&E P&( SB9TC J ata! langs!ng dite2an enter .E &anya<1 J ma2a tanya lagi 4lang1 " )$5 B9 J 53P B>&E P&( SB9TC Dh J .$E 4lang1 J .adi2an #ile Hs!mberH 3OV B>&E P&( SB9TC J men1adi AS5)QQ &anya<, " 5eta2 &!1!an J 5eta2 2alimat Ht!1!anH
1B:
3OV A6C A6 J &anya nama #ile *EA D9C<ile, J Ht!1!anH ata! nama #ile )nt ,1h J hasil pengcopyan *EA B9C<ile, J .i2a !ser tida2 mengeti22an )$5 B9 J nama #ile !nt!2 Ht!1!anH 53P B>&E P&( SB9TC J ata! langs!ng dite2an enter .E &anya<, J ma2a tanya lagi 4lang, " )$5 B9 J 53P B>&E P&( SB9TC Dh J .$E 4lang, J .adi2an #ile &!1!an 3OV B>&E P&( SB9TC J men1adi AS5)QQ 3OV A6C7D6 J Ser:is b!2a #ile 3OV A*C J 3ode #ile (ead Only *EA D9C<ile1 L , J $ama #ile Hs!mberH )$& ,1h J .5 Er J .i2a errorC lompat 3OV 6andle1CA9 J A9Knomor handle #ile Hs!mberH
3OV A6C756 J B!at #ile bar! *EA D9C<ile, L , J Dengan nama Ht!1!anH 3OV 59C 1 b J <ile Archi:e / normal )nt ,1h J .5 Er J .i2a errorC lompat 3OV 6andle,CA9 J A9Knomor handle #ile Ht!1!anH 5opy " 3OV A6C7<6 J ser:is baca #ile 3OV B9C6andle1 J Baca #ile Hs!mberH 3OV 59C1 ,8 J Banya2nya pembacaan *EA D9CB!##er J *o2asi penamp!ngan )$& ,1h J .5 Er J .i2a errorC lompat 53P A9C .E Selesai J Pembacaan #ile s!dah EO<P J >aC exit
3OV 59CA9 J Banya2nya data 3OV A6C8 h J Ser:is t!lis #ile 3OV B9C6andle, J &!lis #ile H&!1!anH *EA D9CB!##er J *o2asi data )nt ,1h .5 Er J .i2a errorC lompat 53P 59CA9 .E 5opy Selesai " 5eta2 'ood J <ile habis dicopyP J bel!mC !langi J Pengcopyan selesai
3OV A6C7<h J &!t!p #ile 3OV B9C6andle1 J Hs!mberH )$& ,1h J 3OV B9C6andle, J &!t!p #ile )$& ,1h J H&!1!anH E9)& " )$& , h J Selesai Er " 53P A9C1 .$E $otErr1 5eta2 Err1 .3P E9)& $otErr1 " 53P A9C,
1B@
.$E 5eta2 .3P $otErr, " 53P .$E 5eta2 .3P $otErr7 " 53P .$E 5eta2 .3P $otErr8 " 53P .$E 5eta2 .3P $otErrG " 53P .$E 5eta2 .3P $otErr,1 " 53P .$E 5eta2 .3P $otErr,B " 53P .$E 5eta2 .3P $otErr7 " 5eta2 .3P E$D
$otErr, Err, E9)& A9C7 $otErr7 Err7 E9)& A9C8 $otErr8 Err8 E9)& A9CG $otErrG ErrG E9)& A9C,1 $otErr,1 Err,1 E9)& A9C,B $otErr,B Err,B E9)& A9C7 $otErr7 Err7 E9)& Err* E9)&
Bila program 0B.1. dijalankan, maka program akan meminta anda memasukan nama file yang akan dicopy dan nama file hasil copy"an, seperti; $ama #ile s!mber " &AS3.E9E $ama #ile t!1!an " B"SS.P(O' -aka file AS-.'3' akan dicopykan pada dri,e b; dengan nama SS.P#O&. Bila pengcopyan file berhasil dengan sukses, maka pada layar akan ditampilkan; Pengcopyan <ile telah dila2sana2an .... $eterangan program; 3OV A9C7 )$& 1 6 !ni adalah perintah untuk mengaktifkan mode layar 9B, atau mode default
1BA
dari 4OS. 4engan pengaktifan mode layar ini seluruh isi layar akan terhapus. &anya<1 " 5eta2 S!mber 3OV A6C A6 *EA D9C<ile1 )$& ,1h -intalah dari user untuk memasukkan nama file yang akan dicopy. Casil input dari user ini, disimpan pada ,aribel penampung 5Hile15 yang didefinisikan untuk mampu menampung sampai A9 karakter. *EA B9C<ile1 )$5 B9 53P B>&E P&( SB9TC .E &anya<1 4lang1 " )$5 B9 53P B>&E P&( SB9TC Dh .$E 4lang1 3OV B>&E P&( SB9TC Setelah didapat nama file yang ingin dicopy, jadikanlah nama file tersebut menjadi AS2!PP. $arena setiap input dari keyboard selalu diakhiri dengan enter794h*, maka kita tinggal mencari karakter enter tersebut dan menggantinya dengan byte 9, untuk membuatnya menjadi AS2!PP. &anya<, " 5eta2 &!1!an 3OV A6C A6 *EA D9C<ile, )nt ,1h *EA B9C<ile, )$5 B9 53P B>&E P&( SB9TC .E &anya<, 4lang, "
1B?
)$5 B9 53P B>&E P&( SB9TC Dh .$E 4lang, 3OV B>&E P&( SB9TC Proses untuk menanyakan nama file hasil copy"an, sama dengan proses meminta nama file yang ingin dicopy. Dama file hasil copyan juga dijadikan AS2!!P. 3OV A6C7D6 3OV A*C *EA D9C<ile1 L , )$& ,1h .5 Er 3OV 6andle1CA9 Bukalah file yang akan dicopy dengan atribut pembukaan 9, atau #ead Only. Domor handle file tersebut akan diberikan oleh 4OS berupa suatu angka. Simpanlah nomor handle yang diberikan 4OS untuk file yang dibuka ini. .ntuk selanjutnya anda tinggal menggunakan nomor handle dari file ini untuk mengaksesnya. 3OV A6C756 *EA D9C<ile, L , 3OV 59C 1 b )$& ,1h .5 Er 3OV 6andle,CA9 Buatlah sebuah file baru dengan atribut pembukaan B0 atau file archi,e7normal*. Simpanlah nomor handle yang diberikan 4OS untuk file yang baru diciptakan ini. (ika file yang baru diciptakan ini telah ada pada disk sebelumnya, maka file tersebut akan dihapus. 5opy " 3OV A6C7<6 3OV B9C6andle1 3OV 59C1 ,8 *EA D9CB!##er )$& ,1h .5 Er 53P A9C
1BE
.E
Selesai
3OV 59CA9 3OV A6C8 h 3OV B9C6andle, *EA D9CB!##er )nt ,1h .5 Er 53P 59CA9 .AE 5opy Setelah itu, bacalah file yang akan dicopy sebanyak 1908 byte, dan disimpan pada ,ariabel penampung buffer. Setelah pembacaan, lakukanlah penulisan kepada file baru sebanyak byte yang berhasil dibaca. Proses baca dan tulis ini dilakukan terus sampai file tersebut berhasil dicopykan semuanya. Perhati2anlah" .ntuk membaca file yang dicopy dan menulisi file baru, kita tinggal menggunakan nomor handle yang kita dapatkan pada saat pembukaan dan pembuatan file tersebut. Selesai " 5eta2 'ood 3OV A6C7<h 3OV B9C6andle1 )$& ,1h 3OV B9C6andle, )$& ,1h E9)& " )$& , h Setelah proses pengcopyan file selesai, tutuplah file tersebut dengan menggunakan nomor handle"nya. Er " 53P A9C1 .$E $otErr1 5eta2 Err1 .3P E9)&
189
$otErr1 " 53P .$E 5eta2 .3P $otErr, " 53P .$E 5eta2 .3P $otErr7 " 53P .$E 5eta2 .3P $otErr8 " 53P .$E 5eta2 .3P $otErrG " 53P .$E 5eta2 .3P $otErr,1 " 53P .$E 5eta2 .3P $otErr,B " 53P .$E 5eta2 .3P $otErr7 " 5eta2
A9C, $otErr, Err, E9)& A9C7 $otErr7 Err7 E9)& A9C8 $otErr8 Err8 E9)& A9CG $otErrG ErrG E9)& A9C,1 $otErr,1 Err,1 E9)& A9C,B $otErr,B Err,B E9)& A9C7 $otErr7 Err7 E9)& Err*
181
.3P E9)& !ni adalah bagian yang akan menerjemahkan kode kesalahan dari 4os. Proses yang dilakukan memang agak sedikit bertele"tele, karena dibandingkan satu persatu. $ita akan mempelajari caraNteknik untuk menerjemahkan kode kesalahan ini secara profesional pada bagian 0B.11. B!##er *ABE* B>&E !ni adalah suatu pendefinisian data istime+a dalam assembler. 4engan mendefinisikannya pada akhir file, akan kita dapatkan suatu bufferNpenampung yang besar sekali 7sebatas memory yang tersedia*. .ntuk lebih jelasnya anda bisa lompat pada bagian 08.A. sebentar, untuk membaca keterangan mengenai tipe data ini.
180
DB I 5"?@ 6ap!s <)*EW9 IC17C1 C1 DB I !nt!2 menghap!s #ile <)*EW9 XI Proses " 3OV D)C= h J Alamat a0al parameter 3OV A*C Dh J %ara2ter Enter (EP$E S5ASB J 5ari 2ara2ter Enter DE5 D) J D) men!n1!2 2ara2ter Enter 3OV A*C S&OSB 3OV D)C=,h Delete SD)T .$5 Exit 3OV A6C B *EA D9CError )$& ,1h Exit " )$& , h E$D &Data J .adi2an AS5))Q J *eta22an byte pada DS"SD)T J A0al String J 6ap!s #ile parameter J .i2a tida2 ada 2esalahanC 6abis J .i2a ada 2esalahan J &il2an peringatan N
Program ,7.,. 3enghap!s <ile Program 0B.0. bisa anda gunakan untuk menghapus suatu file dengan parameter. -isalkan file 2OBA. 3 akan dihapus, maka bisa dihapus dengan cara; 6AP4S 5OBA.&9&
18B
See2 3A5(O 6andleC3odeCO##set*oCO##set6i P4S6 B9 P4S6 59 3OV A6C8,h 3OV A*C3ode 3OV B9C6andle 3OV 59CO##set6i 3OV D9CO##set*o )$& ,1h POP 59 POP B9 E$D3
188
3OV A6C B *EA D9C%al )$& ,1h E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " A&&(.AS3 J J A!thor " Sto J J <!ngsi " 3elihat atrib!t dari #ile. J J Anda bisa mengg!na2an parameterJ J dengan program ini J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses Error DB ISorryC #ile tida2 ditem!2an ata! IC17C1 DB I anda tida2 meng!na2an parameter XI .enis DB I.enis <ile ini " XI Attr1 DB 17C1 CI;@ (ead Only XI Attr, DB 17C1 CI;@ 6idden XI Attr7 DB 17C1 CI;@ System XI Attr8 DB 17C1 CI;@ Vol!me XI Attr- DB 17C1 CI;@ $ama Directory XI AttrG DB 17C1 CI;@ Archi:e XI &abel DD Attr1CAttr,CAttr7CAttr8CAttr-CAttrG Proses" 3OV 4lang " 53P .E )$5 .3P AS5))Q" 3OV B9C=,h J Alamat D&AC A0al parameter
B>&E P&( SB9TC Dh J Apa2ahKEnterP AS5))Q J >aC .adi2an AS5))Q B9 J t!n1!2 2ara2ter selan1!tnya 4lang J !langiC cari enter B>&E P&(SB9TC J .adi2an AS5))Q
3OV A6C87h 3OV D9C=,h 3OV A*C )$& ,1h .$5 'ood 5eta2W%al Error .3P Exit 'ood " 5eta2W%al .enis 3OV A9C1 9O( B9CB9 5E% " P4S6 A9 P4S6 B9 P4S6 59 A$D .59Q ADD 3OV 3OV )$& &ida2 " POP POP POP ADD 59CA9 &ida2 B9CB9
J Ser:is !nt!2 atrib!t #ile J D9 K A0al nama #ile AS5))Q J 4nt!2 membaca atrib!t J Baca atrib!t #ile J .i2a tida2 error lompat J ErrorC ceta2 pesan dan J Selesai J 5eta2 2alimat J A9 !nt!2 mengetes Bit J B9Kpen!n1!2 isi &abel J J simpan isi register J J 3engetest bit J .i2a 59K artinya bitK J B9 2ali ,C !nt!2 a2ses &abel
A6C B J Ser:is ceta2 2alimat D9C&abelSB9T J Alamat o##set dari 2alimat ,1h J 5eta2 2alimat 59 B9 A9 A9CA9 J J Ambil nilai register J J A9 !nt!2 test bit beri2!tnya
18:
)$5 B9 53P B9CG .E Exit .3P 5E% Exit " )$& , h E$D &Data
J B9KBanya2nya peng!langan J Apa2ah telah mengetest G bitP J >aN selesai J 4langiC test bit beri2!tnya
4engan program 0B.B. anda bisa melihat atribut dari suatu file, termasuk file hidden, seperti !O.SLS. .ntuk melihat atribut dari file tersebut ketikkan; 5"?@A&&( )O.S>S .enis <ile ini " ;@ (ead Only ;@ 6idden ;@ System ;@ Archi:e -engenai penggunaan abel, akan dijelaskan pada sub bab 0B.11 yang menjelaskan mengenai teknik untuk menerjemahkan kode kesalahan 4os dengan cepat dan mudah.
18@
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" $ode salah Arti $ode Salah """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 91 Salah perintah 90 Hile tidak ditemukan 9B Path tidak ditemukan 98 Hile yang dibuka terlalu banyak 9: Operasi ditolak 9@ penggunaan file handle yang salah 9A -2B7-emory 2ontrol Blocks* telah rusak 9? $ekurangan memory 9E $esalahan alamat memory blok 19 $esalahan en,ironment string 11 $esalahan format 10 $esalahan kode akses 1B $esalahan data 1: $esalahan spesifikasi dri,e 1@ idak dapat menghapus directory aktif 1A 4e,ice yang tidak sama 1? idak ada file yang ditemukan lagi 1E idak dapat menulis pada disket yang diprotek 09 .nit tidak diketahui 01 4ri,e belum siap 00 Perintah tidak diketahui 0B 4ata disk terdapat kesalahan 0: Pencarian alamat pada disket ada kesalahan 0@ ipe media tidak diketahui 0A Pencarian nomor sektor tidak ditemukan 0? Printer tidak diberi kertas 0E $esalahan pada saat penulisan B9 $esalahan pada saat pembacaan @1 Uueue Printer telah penuh @: Perintah ditolak ?9 Hile telah ada ?0 idak bisa membuat entri directory ?B $esalahan pada interupsi 08 ?@ $esalahan pass+ord
18A
?A $esalahan parameter """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 'ambar ,7.1. Arti dari 2ode 2esalahan DOS yang !m!m Pada program yang lengkap biasanya bila terdapat error, akan dilaporkan kepada pemakainya. 2ara yang kuno untuk digunakan untuk mencetak arti kesalahan adalah dengan membandingkan kode kesalahan yang dihasilkan dan mencetak pesannya, seperti; &Data" .3P Proses Error1 DB I Salah perintah N XI Error, DB I <ile tida2 ditem!2an N XI Error7 DB I Path tida2 ditem!2an N XI " Proses" " 53P A9C1 J Apa2ah error 2ode 1 P .$E Err, J B!2anN lompat 2e Err, 5eta2 Error1 J >aN 5eta2 pesan dari 2ode error 1 .3P Exit J %el!ar Err," 53P A9C, J Apa2ah error 2ode , P .$E Err7 J B!2anN lompat 2e Err7 5eta2 Error, J >aN 5eta2 pesan dari 2ode error , .3P Exit J %el!ar Err7" 53P A9C7 J Apa2ah error 2ode 7 P .$E Err8 J B!2anN lompat 2e Err8 5eta2 Error7 J >aN 5eta2 pesan dari 2ode error 7 .3P Exit J %el!ar Err8" " " Apakah cara diatas sudah tepat J idak%. Bila pengecekan dari kode kesalahan hanyalah 1 atau 0 buah, cara diatas dapat anda gunakan. Bagaimana jika kode kesalahan yang akan kita cek, ternyata jumlahnya mencapai ratusanJ
18?
Program anda akan tampak bertele"tele dan panjang selain itu ukuran file akan menjadi sangat besar. Salah satu cara yang dapat anda gunakan untuk memecahkan masalah diatas adalah dengan membuat suatu tabel array yang berisi alamat offset dari masing" masing pesan kesalahan. $emudian dari tabel alamat kode kesalahan ini digunakan untuk mencetak pesan salah yang dihasilkan. 5eta2 3A5(O %al 3OV A6C B 3OV D9C%al )$& ,1h E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " E((O(.AS3 J J A!thor " Sto J J <!ngsi " 3enceta2 pesan 2ode error J J dengan cara yang pra2tis. J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Error 1 Error , Error 7 Error 8 Error Error G Error E Error = Error B Error1 Error11 Error1, Proses DB ISalah perintah XI DB I<ile tida2 ditem!2an XI DB IPath tida2 ditem!2an XI DB I<ile yang dib!2a terlal! banya2 XI DB IOperasi ditola2 XI DB IPengg!naan #ile handle yang salah XI DB I35B+3emory 5ontrol Bloc2sA telah r!sa2 XI DB I%e2!rangan memory XI DB IAlamat memory blo2 salah XI DB IEn:ironment String salah XI DB I%esalahan #ormat XI DB I%ode a2ses salah XI
&abel DD Error 1CError ,CError 7CError 8CError DD Error GCError ECError =CError BCError1 DD Error11CError1, &estWError DD 7 Proses " 3OV A9C&estWError DE5 A9 ADD A9CA9 3OV B9CA9 5E&A% &abelSB9T J 5eta2 pesan 2ode error E$D )$& , h &Data Program ,7.8. 5ara yang pra2tis !nt!2 menceta2 arti 2ode 2esalahan DOS
Bila program 0B.8. dijalankan, maka pada layar akan tercetak; Path tida2 ditem!2an
18E
Seperti yang diharapkan, arti kode error 9B7 estS'rror* akan tercetak pada layar. Anda bisa mengubah kode salah pada ,ariabel estS'rror dengan angka 91 sampai 10 untuk melihat pesan yang akan ditampilkan. Perhati2anlah" Pada ,aribel abel kita mencatat alamat offet dari masing" masing pesan kesalahan dengan cara; &abel DD Error 1CError ,CError 7CError 8CError DD Error GCError ECError =CError BCError1 DD Error11CError1, dimana masing"masing alamat offset menggunakan 1 +ord. 3OV A9C&estWError DE5 A9 $arena kode error yang pertama adalah 91, maka perlu kita kurangi dengan 1 supaya menjadi 9. 4engan demikian kode error 1 akan menunjuk pada +ord pertama pada abel yang kita ketahui bah+a +ord pertama dari abel merupakan alamat offset pesan kode salah 91. ADD A9CA9 3OV B9CA9 $arena setiap alamat offset dari pesan kode salah menggunakan 1 +ord atau 0 byte, maka untuk mengambil +ord selanjutnya dari abel yang mencatat alamat offset pesan kode error selanjutnya, kita harus mengalikan kode error dengan 0 atau menambah kode error dengan dirinya sendiri. 5E&A% &abelSB9T $emudian dengan #egister !ndirect Addressing kita mengambil alamat offset pesan kode salah dari abel. Seperti biasa, pada pencetakan kalimat kita mengambil alamat offset dari suatu string yang diakhiri dengan tanda ITI untuk dicetak dengan fungsi 9E dari 4os. Pada pencetakan string ini alamat offset sudah didapat dari abelVB3W, sehingga perintah; 51'A 43,$al5 dari fungsi 9E dapat dirubah menjadi; 5-O6 43,$al5
1:9
1:1
interupsi ini akan disimpan pada pasangan register 'S;B3. 4imana 'S mencatat alamat segment dan B3 mencatat alamat offset ,ektor interupsi dari nomor interupsi yang dimasukkan pada A1. AmbilWVec 3A5(O $o)ntCAlamat 3OV A6C7-h J Ser:is !nt!2 mencari :e2tor 3OV A*C$o)nt J $o inte!rpsi )$& ,1h J *a2sana2an 3OV AlamatCB9 J O##set 3OV AlamatS,TCES J Segment E$D3 .ntuk menggunakan macro ini anda bisa menyediakan suatu ,aribael 0 +ord untuk menampung alamat hasil dari interupsi ini, seperti; Alamat 4W J,J.
1:0
)$& ,1h E$D3 Sama seperti macro untuk mendapatkan alamat ,ektor interupsi, untuk menggunakan macro ini anda harus menyediakan suatu ,aribael 0 +ord yang digunakan sebagai penampung alamat yang akan dituju dari suatu interupsi, seperti; Alamat 4W J,J. Pada program berikut ini akan anda lihat bagaimana membelokkan interupsi 9:h7PrtScr* ke interupsi 1Bh. !nterupsi 1Bh adalah suatu interupsi yang akan selalu terjadi bila anda menekan tombol 2trlGBreak. 4engan demikian setelah program 5breaks5 dijalankan, penekanan tombol PrtScr akan sama halnya dengan penekanan tombol 2trlGBreak. ArahWVec 3A5(O $o)ntCAlamat 3OV A9CAlamatS,T 3OV DSCA9 J DS K segment 3OV D9CAlamat J D9 K o##set 3OV A6C,-h J Ser:is !nt!2 mer!bah :e2tor 3OV A*C$o)nt J $o inter!psi )$& ,1h E$D3 AmbilWVec 3A5(O $o)ntCAlamat 3OV A6C7-h J Ser:is !nt!2 mencari :e2tor 3OV A*C$o)nt J $o inte!rpsi )$& ,1h J *a2sana2an 3OV AlamatCB9 J O##set 3OV AlamatS,TCES J Segment E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " B(EA%S.AS3 J J A!thor " Sto J J <!ngsi " Program yang a2an mengganti J J intr!psi - UPrtScr@ men1adi J J inter!psi 1Bh U5trlLBrea2@. J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P (esW2an Brea2 EO4 ,7h PrtScr EO4 AddrWBrea2 DD PCP J 4nt!2 menyimpan Alamat J :e2tor 5trl Brea2 (esW%an " AmbilWVec Brea2CAddrWBrea2 J Anbil alamat 5trlL5 ArahWVec PrtScrCAddrWBrea2 J (!bah :e2tor PrtScr )$& , h E$D &Data
1:B
Bila progrm 08.1. dijalankan, maka tombol PrtScr sudah tidak akan berfungsi seperti biasanya, tetapi berfungsi seperti penekanan tombol 2trl Break.
Program residen adalah program yang akan menetap dimemory seperti halnya 4OS dan program residen ini akan berada tepat diatas Operating System. Program residen akan dianggap sebagai bagian dari Operating System sehingga bila
1:8
dijalankan program aplikasi maka program aplikasi tersebut akan ditaruh diatas program residen sehingga program residen kita tetap utuh. G""""""""""""""""""G G""""""""""""""""""G K 7.S'# A#'A #A-* K K 7.S'# A#'A #A-* K K K K K K P#O&#AK K P#O&#AK K AP1!$AS! 1 K K AP1!$AS! 0 K K &A-' K K WS K G""""""""""""""""""G G""""""""""""""""""G K #'S!4'D S'2 !OD K K #'S!4'D S'2 !OD K G""""""""""""""""""G G""""""""""""""""""G K OP'#A !D& SLS '- K K OP'#A !D& SLS '- K G""""""""""""""""""G G""""""""""""""""""G 'ambar ,8.,. Peta (A3 dengan program residen Program residen adalah suatu bentuk program yang menarik. $arena program residen menetap pada memory, maka semakin banyak program residen dijalankan, memory akan semakin berkurang untuk digunakan oleh program aplikasi. Program residen, haruslah dibuat sekecil mungkin untuk menghindari pemakaian memory yang terlalu banyak. Canya dengan Assembler"lah, sebuah program dapat dibuat sekecil mungkin% Bayangkan, program untuk menghapus layar, dengan bahasa tingkat tinggi seperti pada pascal dan 2 digunakan sekitar B0B0 byte, sedangkan pada assembler sekitar A byte.
1::
interupsi 01h fungsi B1h. .ntuk menggunakan interupsi 0Ah, kita tinggal mengisi pasangan register 4S;43 dengan batas memory yang akan diresidenkan. G""""""""""""""""""G K K K K K .S'# A#'A #A- K K K K K G""""""""""""""""""G=""4S;43 K #'S!4'D S'2 !OD K G""""""""""""""""""G K OP'#A !D& SLS '- K G""""""""""""""""""G 'ambar ,8.7. Pengg!naan inter!psi ,Eh !nt!2 meresiden2an program .ntuk membuat program residen, anda bisa menggunakan bentuk program seperti pada gambar 08.8. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" .-O4'1 S-A11 .2O4' O#& 199h 4ata ; (-P #esSkan G""""""""""""""""""G K empat untuk K K mendefinisikan K K 4A A K G""""""""""""""""""G BagS#es P#O2 P.SC A3 Y P.SC B3 Y P.SC 23 Y P.SC 43 Y P.SC 'S Y Simpan isi semua register P.SC 4! Y P.SC 4S Y
1:@
P.SC S! Y G""""""""""""""""""G K empat handler K K interupsi yang K K baru K G""""""""""""""""""G POP S! Y POP 4S Y POP 4! Y POP 'S Y POP 43 Y $embalikan isi semua register POP 23 Y POP B3 Y POP A3 Y !#' Y Akhir dari interupt handler BagS#es 'D4P #esS$an ; G""""""""""""""""""G K empat untuk K K memanipulasi K K ,ektor interupsi K G""""""""""""""""""G 1'A 43,#esS$an !D 0Ah 'D4 4ata """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 'ambar ,8.8. 3odel Program (esiden
1:A
J <!ngsi " Program residen yang membelo22an J J intr!psi - ata! inter!psi PrtScr J J men!1! program b!atan sendiri J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P (esW2an Pesan DB I )nter!psi -UPrtScr@ telah di belo22an NN I $o)nt EO4 -h BagW(es P(O5 P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 P4S6 ES P4S6 D) P4S6 DS P4S6 S) J J J J J Simpan isi sem!a register J J J
3OV A9C17 h J 3OV B*C 1 1111b J 3OV B6C J 3OV D*C, J 3OV D6C1, J Program inter!pt handler PrtScr 3OV 59C88 J yang bar!. P4S6 5S J POP ES J *EA BPCPesan J )$& 1 h J POP S) POP DS POP D) POP ES POP D9 POP 59 POP B9 POP A9 )(E& BagW(es E$DP (esW%an " 3OV 3OV *EA )$& J J J J J %embali2an isi sem!a register J J J J A2hir dari inter!pt handler
A6C,-h J A*C$o)nt J 4nt!2 mer!bah :e2tor inter!psi D9CBagW(es J - men!1! IBagW(esI ,1h J
*EA D9C(esW%an J )$& ,Eh J 4nt!2 meresiden2an bagian E$D &Data J HBagW(esH Program ,8.,. 3emb!at Program (esiden
Bila program 08.0. dijalankan, maka tombol PrtScr sudah tidak akan berfungsi lagi. Setiap kali tombol PrtScr ditekan, pada posisi 09,10 akan ditampilkan pesan;
1:?
)nter!psi -UPrtScr@ telah di belo22an NN Perhatikanlah, bah+a pada program ini terdapat 0 bagian pokok, yaitu bagian yang residen dan bagian yang meresidenkan. Bagian yang meresidenkan hanya dijalankan sekali, sedangkan bagian yang re siden akan dijalankan setiap kali terjadi penekanan tombol PrtScr. Bagian yang meresidenkan adalah; (esW%an " 3OV A6C,-h J 3OV A*C$o)nt J 4nt!2 mer!bah :e2tor inter!psi *EA D9CBagW(es J - men!1! IBagW(esI )$& ,1h J *EA D9C(esW%an J )$& ,Eh J 4nt!2 meresiden2an bagian E$D &Data J HBagW(esH Bagian ini tugasnya meresidenkan bagian BagS#es. Sebelum bagian BagS#es diresidenkan, ,ektor interupsi PrtScr79:* diubah menuju progam BagS#es. Bila anda hanya merubah interupsi PrtScr menuju program BagS#es tanpa diresidenkan, maka akan menyebabkan komputer anda menjadi hang, mengapaJ Walaupun ,ektor interupsi tetap menunjuk pada lokasi atau alamat yang sama, tetapi tempat yang digunakan program kita telah diserahkan kepada 4os untuk digunakan oleh aplikasi lain. BagW(es P(O5 P4S6 A9 J P4S6 B9 J P4S6 59 J P4S6 D9 J P4S6 ES J Simpan isi sem!a register P4S6 D) J P4S6 DS J P4S6 S) J !ni adalah a+al dari bagian yang residen. Simpanlah semua nilai register pada a+al program residen untuk mencegah terganggunya program lain yang sedang berjalan pada saat tombol PrtScr ditekan. 3OV A9C17 h J 3OV B*C 1 1111b J 3OV B6C J
1:E
3OV D*C, J 3OV D6C1, J Program inter!pt handler PrtScr 3OV 59C88 J yang bar!. P4S6 5S J POP ES J *EA BPCPesan J )$& 1 h J Bagian ini dapat dikatakan sebagai handler baru bagi interupsi PrtScr. ombol PrtScr yang biasanya mencetak tampilan layar pada printer akan berubah menjadi mencetak pesan pada layar. dengan demikian anda bisa membuat handler baru yang akan melakukan sesuatu setiap kali terjadi penekanan tombol PrtScr. Perhati2anlahN " untuk mencetak pesan pada layar digunakan interupsi 19h, dan bukannya interupsi 4os fungsi 9E yang biasanya kita gunakan. -engapa demikian J Sebagian besar !nterupsi 4os tidak bisa digunakan pada program residen, karena sifat dari 4os yang tidak reentrant. -asalah ini akan kita bicarakan lebih lanjut nantinya. POP S) J POP DS J POP D) J POP ES J POP D9 J %embali2an isi sem!a register POP 59 J POP B9 J POP A9 J )(E& J A2hir dari inter!pt handler BagW(es E$DP Pada akhir program residen, kembalikanlah nilai semua register yang disimpan, disertai perintah !#' 7!nterrupt #eturn*. Perintah !#' akan mengambil alamat 2S dan !P serta nilai Hlag pada stack untuk kembali menuju program yang diselanya. 2S, !P dan nilai flag disimpan pada stack pada saat terjadi interupsi, inilah rahasianya mengapa program dapat berjalan normal kembali setelah mendapat interupsi.
1@9
bit ke A digunakan untuk menandakan keadaan dari tombol caps lock. Bit tersebut akan bernilai 1 bila caps lock sedang aktif dan 9 bila caps lock tidak aktif. 4engan mengubah bit ke A pada alamat 89h;1Ah tersebut kita bisa menyalakan tombol caps lock tanpa menekannya. A2si 3A5(O 3OV A9C8 h 3OV ESCA9 J ESK8 h 3OV A9CES"S1EhT J A9K8 h"1Eh O( A9C 1 b J .adi2an bit 2e E men1adi 1 3OV ES"S1EhTCA9 J 3as!22an 2embali 2e 8 h"1Eh E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " 5APS;O$.AS3 J J A!thor " Sto J J <!ngsi " Program residen yang a2an J J meng!nci 5aps *oc2 sehingga J J nyala ter!s J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P (esW2an $o)nt EO4 15h BagW(es P(O5 P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 P4S6 ES P4S6 D) P4S6 DS P4S6 S) A2si POP S) POP DS POP D) POP ES POP D9 POP 59 POP B9 POP A9 )(E& BagW(es E$DP (esW%an " 3OV 3OV *EA )$& J J J J J %embali2an isi sem!a register J J J J A2hir dari inter!pt handler J J J J J Simpan isi sem!a register J J J
A6C,-h J A*C$o)nt J 4nt!2 mer!bah :e2tor inter!psi D9CBagW(es J 15h men!1! IBagW(esI ,1h J
*EA D9C(esW%an J )$& ,Eh J 4nt!2 meresiden2an bagian E$D &Data J IBagW(esI Program ,8.7. 3eng!nci 5aps *oc2
1@1
Pada program kita kali ini yang dibelokkan adalah interupsi 12h. Candler !nterupsi ini secara defaultnya hanyalah berisi perintah !#' karena interupsi ini memang disediakan untuk digunakan oleh pemakai. !nterupsi 12h terjadi kurang lebih 1?,0 kali setiap detiknya. $arenanya dengan menggunakan interupsi 12h ini penekanan tombol 2aps 1ock menjadi seakan"akan tidak berarti lagi karena selalu dinyalakan oleh program kita.
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " *ABE*.AS3 J J A!thor " Sto J J <!ngsi " pende#inisian data dengan J J *ABE* J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses 99 *ABE* B>&E A DB 1 B DB , 5 DB 7 Proses" 3OV 99S TC Ah 3OV 99S1TC Bh 3OV 99S,TC 5h J K 3OV AC Ah J K 3OV BC Bh J K 3OV 5C Bh
1@0
$arena kita mendefinisikan 533 label byte5 diatas ,ariabel A, maka byte pertama dari 5335 akan sama dengan ,ariabel 5A5, byte keduanya sama dengan 5B5 dan byte ketiganya sama dengan 525. 4engan demikian perintah 5-O6 33V9W,9Ah5 adalah identik dengan 5-O6 A,9Ah5. L;99L;;;L;;;L;;;L;;; L;;;L;;;L;;;L;;;L;;; V1V,V7V V L;;;L;;;L;;;L;;;L;;; HAH HBH H5H 4engan penggunaan label ini, kita bisa mengakses suatu tempat di memory dengan menggunakan 0 atau lebih nama yang berlainan. Apa kelebihan lainnya J " 4engan mendefinisikan suatu ,ariabel label pada akhir program, maka akan didapatkan suatu ,ariabel penampung yang besar sekali, tanpa harus memperbesar program. " 4engan pendefinisian label juga dimungkinkan pengaksesan data dengan tipe data yang berlainan pada ,ariabel. Supaya lebih jelas, bisa anda lihat pada program berikut ini; J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " *ABE*1.AS3 J J A!thor " Sto J J <!ngsi " pende#inisian data dengan J J *ABE* J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses 99 *ABE* DO(D A DB 1C, Proses" 3OV 99C Ah JK@ AS TK Ah Dan AS1TK E$D )$& , h &Data Program ,8.-. 3er!bah tipe data dengan *abel
1@B
Pada program 08.:. dapat dilihat bah+a kita bisa saja mengakses nilai pada ,ariabel A yang didefinisikan dengan tipe data byte diakses dengan tipe data +ord. 4engan demikian penggunaan label memungkinkan kita untuk mengakses suatu data dengan tipe data yang berbeda. L;;99;;;L;;;;;;;L;;; L;;;L;;;L;;;L;;;L;;; V1V,V V V L;;;L;;;L;;;L;;;L;;; AS T AS1T
AmbilWVec 3A5(O $o)ntCAlamat 3OV A6C7-h J Ser:is !nt!2 mencari :e2tor 3OV A*C$o)nt J $o inter!psi )$& ,1h J *a2sana2an 3OV AlamatCB9 J O##set 3OV AlamatS,TCES J Segment E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " O*D)$&.AS3 J J A!thor " Sto J J <!ngsi " Pada saat PrtScr dite2anC program a2an J J memberi2an anda 2esempatan !nt!2 J J menyiap2an printer sebel!m m!lai menceta2 J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P PrtScr (esW2an EO4 -
1@8
AddrWPrtScrWAsli *ABE* DDO(D AddrWPrtScr DD PCP Pesan1 DB I;;@ Siap2an printer anda NN &e2anI DB I sembarang tombol !nt!2 m!laiI DB I menceta2 U;;I Pesan, DB I@@ PrtScr s!dah dila2sana2anCI DB Isemoga anda p!as dengan hasilnya UUI BagW(es P(O5 P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 P4S6 ES P4S6 D) P4S6 DS P4S6 S) J J J J J Simpan isi sem!a register J J J
5eta2WPesan Pesan1C= C C1, (ead2ey P4S6< 5A** AddrWPrtScrWAsli J Panggil handler PrtScr J yang asli 5eta2WPesan Pesan,CG-C-C18 POP S) POP DS POP D) POP ES POP D9 POP 59 POP B9 POP A9 )(E& BagW(es E$DP J J J J J %embali2an isi sem!a register J J J J A2hir dari inter!pt handler
(esW%an " AmbilWVec PrtScrCAddrWPrtScr 3OV 3OV *EA )$& A6C,-h J A*CPrtScr J 3embelo22an :e2tor inter!psi D9CBagW(es J ,1h J
*EA D9C(esW%an J 3eresiden2an program BagW(es )$& ,Eh E$D &Data Program ,8.G. &e2ni2 memanggil handler inter!psi yang asli
Bila program 08.@. dijalankan, maka setiap penekanan tombol PrtScr, komputer akan menampilkan pesan; ;;;@ Siap2an printer anda NN &e2an sembarang tombol !nt!2 m!lai menceta2 U;;; $omputer akan segera mencetak isi layar pada printer bila ditekan sembarang tombol. Pencetakan dilakukan dengan memanggil interrupt handler PrtScr yang asli dengan;
1@:
P4S6< 5A** AddrWPrtScrWAsli $edua perintah ini mensimulasikan perintah interrupt. Seperti yang telah kita ketahui, setiap interrupt handler selalu diakhiri dengan perintah !#' yang akan mengambil 2S, !P dan Hlags dari stack. $arena perintah 2all hanya akan menyimpan 2S dan !P dalam stack maka kit a perlu menyimpan flags dalam stack secara manual. Pada ,ariabel 5AddrSPrtScrSAsli5 kita mendefinisikannya sebagai label 4ouble Word sehingga kedua +ord ,ariabel 5AddrSPrtScr5 dapat diakses dengan tipe data 4ouble Word7alamat 2S dan !P*.
1@@
97biasanya 1*. .ntuk menandakan keadaan aman ini 4OS akan selalu mengaktifkan interupsi 0?h. Candler asli dari interupsi 0?h ini hanyalah berupa perintah !#' . Bila interupsi 0?h ini diaktifkan, kita bisa menggunakan fungsi 4OS dengan aman pada program residen. !nterupsi 0?h ini biasanya diaktifkan 4OS pada saat 4OS sedang menunggu masukan dari keyboard dengan fungsi 91h"92h. .ntuk menggunakan interupsi ini, buatlah suatu handler baru untuknya. Pada program 08.A. akan ditunjukkan bagaimana interupsi dari 4OS, yaitu interupsi 01h fungsi 9Eh digunakan pada program residen. 4engan teknik yang sama, anda bisa menggunakan segala fungsi dari interupsi 4OS dalam program residen tanpa perlu takut program anda menjadi hang. 5eta2WPesan 3A5(O Pesan J 3enceta2 2alimat dengan 3OV A6C B J inter!psi dari DOS P4S6 5S J POP DS J Sama2an nilai 5S dan DS *EA D9CPesan J )$& ,1h J )nter!psi DOS E$D3 AmbilWVec 3A5(O $o)ntCAlamat 3OV A6C7-h J Ser:is !nt!2 mencari :e2tor 3OV A*C$o)nt J $o inter!psi )$& ,1h J *a2sana2an 3OV AlamatCB9 J O##set 3OV AlamatS,TCES J Segment E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " BAD.AS3 J J A!thor " Sto J J <!ngsi " 3engg!na2an #!ngsi DOS pada program residenJ J Program ini a2an men!n1!22an bagaimana J J memecah2an masalah reentrancy DOSC dengan J J mengece2 BAD +Bendera A2ti# DOSA J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P (esW2an PrtScr EO4 AddrWPrtScrWAsli *ABE* DDO(D AddrWPrtScr DD PCP Pesan DB I %alimat ini diceta2 dengan #!ngsiI DB I dari DOS. IC17C1 DB I Pemecahan masalah I DB I(eentrancy DOS NNNXI O##setWBAD DD P SegmenWBAD DD P (es - P(O5 P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 P4S6 ES P4S6 D) J J J J J Simpan isi sem!a register J
1@A
J J
A9CSegmenWBAD ESCA9 B9CO##setWBAD J ES"B9 K alamat BAD B>&E P&( ES"SB9TC J Apa2ah ada #!ngsi DOS yang J sedang a2ti#P .$E P!lih2an J >aC 1angan la2!2an Aman " J inter!psi DOS 5eta2WPesan Pesan J &ida2C la2!2an inter!psi DOS P!lih2an" POP S) J POP DS J POP D) J POP ES J POP D9 J %embali2an isi sem!a register POP 59 J POP B9 J POP A9 J )(E& J A2hir dari inter!pt handler (es - E$DP (esW%an " AmbilWVec PrtScrCAddrWPrtScr 3OV 3OV *EA )$& 3OV )$& 3OV 3OV A6C,-h J A*CPrtScr J 3embelo22an :e2tor inter!psi D9C(es - J ,1h J A6C78h J ,1h J Ambil alamat )nDOS #lag SegmenWBADCES J ata! BAD O##setWBADCB9 J
*EA D9C(esW%an J 3eresiden2an program BagW(es )$& ,Eh E$D &Data Program ,8.E. 3engg!na2an #!ngsi DOS dalam Program (esiden
Bila program 08.A. dijalankan, maka setiap kali terjadi penekanan terhadap tombol PrtScr, program akan melihat keadaan aman atau tidak untuk menggunakan interupsi 4OS. Bila BA4 bernilai nol atau keadaan aman, program akan mencetak kalimat dengan fungsi dari 4OS. Pesan yang tercetak adalah; %alimat ini diceta2 dengan #!ngsi dari DOS. Pemecahan masalah (eentrancy DOS NNN Bila BA4 bernilai lebih dari nol atau keadaan tidak aman, program tidak akan menggunakan fungsi dari 4OS dan akan segera keluar.
1@?
1@E
hanya menggunakan 1 halaman tampilan, maka isi BC akan diabaikan. Setelah semuanya anda persiapkan, laksanakanlah interupsi 19h. 2ontoh dari macro untuk menggambar pi/el; Pixel 3A5(O 9C>CDarna P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 3OV A6C 5h 3OV 59C9 J Posisi 2olom ata! 9 3OV D9C> J Posisi baris ata! > 3OV A*CDarna J Atrib!t Pixel )$& 1 h J 'ambar pixel terseb!t N POP POP POP POP E$D3 D9 59 B9 A9
1A9
1A1
4lang 59 D9
'aris6 3A5(O 91C>1CPan1angCDarna *O5A* 4lang P4S6 59 P4S6 D9 3OV D9C91 3OV 59CPan1ang 4lang" P!tPixel D9C>1CDarna )$5 D9 *OOP 4lang POP D9 POP 59 E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " '(AP6 .AS3 J J A!thor " Sto J J <!ngsi " 3enggambar garis :ertical J J dan horisontal J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h Proses" Set5(& 17h J A2ti#2an mode gra#i2 17h 'arisV 1- C- C- C1, J 'ambar garis Verti2al (ead2ey J &!ngg! pene2anan 2eyboard 'aris6 17-CG C7 C1, J 'ambar garis 6orisontal (ead2ey J &!ngg! pene2anan 2eyboard Set5(& 7h )$& , h E$D Proses J %embali pada mode Dos
Program ,-.1. 3enggambar garis Vertical dan 6orisontal Bila program 0:.1. dieksekusi, maka pada layar akan ditampilkan sebuah gambar salib yang terdiri atas garis ,ertical dan horisontal. ==== &br0:1.P!3 >>>> 'ambar ,-.1. 6asil e2se2!si program ,-.1.
1A0
mengurangi posisi kolom73* dan menambah posisi baris7L*. Sedangkan untuk menggambar sebuah garis miring 8: derajat ke kanan ba+ah, anda bisa menggambar pi/el sambil menambahi posisi kolom73* dan menambah posisi baris7L*. (ead2ey 3A5(O 3OV A6C )$& 1Gh E$D3 Set5(& 3A5(O 3ode 3OV A6C 3OV A*C3ode )$& 1 h E$D3 P!tPixel 3A5(O 9C>CDarna P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 3OV A6C1, J Ser:is menggambar pixel 3OV 59C9 J Posisi 2olom ata! 9 3OV D9C> J Posisi baris ata! > 3OV A*CDarna J Atrib!t Pixel )$& 1 h J 'ambar pixel terseb!t N POP D9 POP 59 POP B9 POP A9 E$D3 3W%anan 3A5(O 91C>1CPan1angCDarna *O5A* 4lang P4S6 B9 P4S6 59 P4S6 D9 3OV D9C91 3OV B9C>1 3OV 59CPan1ang 4lang" P!tPixel D9CB9CDarna )$5 D9 )$5 B9 *OOP 4lang POP D9 POP 59 POP B9 E$D3 3W%iri 3A5(O 91C>1CPan1angCDarna *O5A* 4lang P4S6 B9 P4S6 59 P4S6 D9 3OV D9C91 3OV B9C>1 3OV 59CPan1ang 4lang" P!tPixel D9CB9CDarna DE5 D9
1AB
)$5 B9 *OOP 4lang POP D9 POP 59 POP B9 E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " '(AP61.AS3 J J A!thor " Sto J J <!ngsi " 3enggambar garis miring 8- dera1at J J 2e 2iri dan 2anan J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h Proses" Set5(& 17h 3W%iri 1- C C- C=7 (ead2ey 3W%anan 1- C C- C=7 (ead2ey Set5(& 7h )$& , h E$D Proses Program ,-.,. 3enggambar garis miring Bila program 0:.0. dieksekusi, maka pada layar akan ditampilkan sebuah gambar atap rumah yang terdiri atas garis miring kekanan dan kiri. ==== &br0:0.P!3 >>>> 'ambar ,-.,. 6asil e2se2!si program ,-.,. ,-.G. 3E$''A3BA( %O&A% Sebuah kotak terdiri atas 0 garis ,ertical dan 0 garis horisontal. .ntuk itu anda bisa menggunakan macro dari &aris6 dan &arisC untuk menggambar kotak ini. $ita hanya menentukan posisi 31,L1 dan 30,L07&ambar 0:.B* untuk menggambar sebuah kotak. Perhatikan, bah+a 30 > 31 dan L0 > L1. 31,L1G"""""""""""""""""""""""G30,L1 K 30"31 K K K K K KL0"L1 L0"L1K
1A8
K K K K K 30"31 K 31,L0G"""""""""""""""""""""""G30,L0 'ambar ,-.7. &e2ni2 menggambar 2ota2 4ari gambar 0:.B. dapat anda lihat, dengan mudah sebuah kotak dapat digambar dengan bantuan macro untuk menggambar garis ,ertikal dan horisontal. (ead2ey 3A5(O 3OV A6C )$& 1Gh E$D3 Set5(& 3A5(O 3ode 3OV A6C 3OV A*C3ode )$& 1 h E$D3 P!tPixel 3A5(O 9C>CDarna P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 3OV A6C 5 J Ser:is menggambar pixel 3OV 59C9 J Posisi 2olom ata! 9 3OV D9C> J Posisi baris ata! > 3OV A*CDarna J Atrib!t Pixel )$& 1 h J 'ambar pixel terseb!t N POP D9 POP 59 POP B9 POP A9 E$D3 'arisV 3A5(O 91C>1CPan1angCDarna *O5A* 4lang P4S6 D9 P4S6 59 3OV D9C>1 3OV 59CPan1ang 4lang" P!tPixel 91CD9CDarna )$5 D9 *OOP 4lang POP 59 POP D9 E$D3
1A:
'aris6 3A5(O 91C>1CPan1angCDarna *O5A* 4lang P4S6 59 P4S6 D9 3OV D9C91 3OV 59CPan1ang 4lang" P!tPixel D9C>1CDarna )$5 D9 *OOP 4lang POP D9 POP 59 E$D3 %ota2 3A5(O 91C>1C9,C>,CDarna 'aris6 91C>1C9,;91CDarna 'arisV 91C>1C>,;>1CDarna 'arisV 9,C>1C>,;>1CDarna 'aris6 91C>,C9,;91L1CDarna E$D3
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " '(AP6,.AS3 J J A!thor " Sto J J <!ngsi " 3enggambar seb!ah 2ota2 J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h Proses" Set5(& 17h %ota2 1, C7 C1= C1 (ead2ey Set5(& 7h )$& , h E$D Proses Program ,-.7. 3enggambar %ota2 Bila program 0:.B. dieksekusi, maka pada layar akan ditampilkan sebuah gambar kotak persegi empat7&ambar 0:.8*. ==== &br0:8.P!3 >>>> 'ambar ,-.8. 6asil e2se2!si program ,-.7.
1A@
.ntuk menggambar daerah kotak ini, bisa anda gunakan bermacam"maca cara, misalkan dengan menggambarkan garis ,ertical ataupun garis horisontal. Pada program 0:.8. kita akan me+arnai daerah yang kosong pada kotak dengan dengan garis"garis Corisontal. (ead2ey 3A5(O 3OV A6C )$& 1Gh E$D3 Set5(& 3A5(O 3ode 3OV A6C 3OV A*C3ode )$& 1 h E$D3 P!tPixel 3A5(O 9C>CDarna P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 3OV A6C1, J Ser:is menggambar pixel 3OV 59C9 J Posisi 2olom ata! 9 3OV D9C> J Posisi baris ata! > 3OV A*CDarna J Atrib!t Pixel )$& 1 h J 'ambar pixel terseb!t N POP D9 POP 59 POP B9 POP A9 E$D3 'arisV 3A5(O 91C>1CPan1angCDarna *O5A* 4lang P4S6 D9 P4S6 59 3OV D9C>1 3OV 59CPan1ang 4lang" P!tPixel 91CD9CDarna )$5 D9 *OOP 4lang POP 59 POP D9 E$D3 'aris6 3A5(O 91C>1CPan1angCDarna *O5A* 4lang P4S6 59 P4S6 D9 3OV D9C91 3OV 59CPan1ang 4lang" P!tPixel D9C>1CDarna )$5 D9 *OOP 4lang POP D9 POP 59 E$D3
1AA
%ota2
3A5(O 91C>1C9,C>,CDarna 'aris6 91C>1C9,;91CDarna 'arisV 91C>1C>,;>1CDarna 'arisV 9,C>1C>,;>1CDarna 'aris6 91C>,C9,;91L1CDarna E$D3
%ota2D 3A5(O 91C>1C9,C>,CDarna *O5A* 4lang1C4lang, P4S6 A9 P4S6 59 3OV A9C>1L1 3OV 59C>,;>1;1 4lang1" 'aris6 91L1CA9C9,;91;1CDarna )$5 A9 *OOP 4lang1 POP 59 POP A9 E$D3
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " '(AP67.AS3 J J A!thor " Sto J J <!ngsi " 3enggambar dan me0arnai 2ota2 J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h Proses" Set5(& 17h %ota2 1, C7 C1= C1 C1, J 'ambar 2ota2 (ead2ey %ota2D 1, C7 C1= C1 C B J Darnai 2ota2 (ead2ey Set5(& 7h )$& , h E$D Proses Program ,-.8. 3e0arnai %ota2 Bila program 0:.8. dieksekusi, maka pada layar akan ditampilkan sebuah gambar kotak yang telah di+arnai 7&ambar 0:.:*. ===== &br0::.P!3 >>>>> 'ambar ,-.-. 6asil e2se2!si program ,-.8. Pada program 0:.8. ini, kotak akan di+arnai seluruhnya. 2obalah anda membuat kreasi sendiri, misalkan kotak akan di+arnai dengan garis"garis ,ertical, garis"garis harisontal atau kotak" kotak kecil.
1A?
Pixel 3A5(O 9C>CDarna J 4nt!2 menggambar pixel P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 3OV A6C1, J Ser:is menggambar pixel 3OV 59C9 J Posisi 2olom ata! 9 3OV D9C> J Posisi baris ata! > 3OV A*CDarna J Atrib!t Pixel )$& 1 h J 'ambar pixel terseb!t N POP POP POP POP E$D3 D9 59 B9 A9
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " A$)3A&E1.AS3 J J A!thor " Sto J J <!ngsi " 3enggambar heli2opter J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses 'ambar DD bC b
1AE
DD bC DD bC DD bC 111 DD bC 1 DD 11111111bC111111111111111 DD bC 1 DD bC 111111111 DD 111 bC11111111111 DD 1 111111bC1111 1 11 DD 111111111111111bC1111 1 11 DD 11bC1111 111111 DD bC 1111111111 DD bC 1 1 1 DD 111111bC111111111111 DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC Pos9 DD 1 J Posisi a0al 9 Pos> DD 7 J Posisi a0al > Proses" Set5(& 17h J A2ti#2an mode gra#i2
b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
S4B B9CB9 J 3OV 59C7, J 59Kbanya2nya baris 4lang1" P4S6 59 3OV 59C, J 59Kbanya2nya Dord dalam 1 baris 4lang," P4S6 59 3OV 59C1G J 59KBanya2nya bit dalam 1 0ord 3OV A9C1 b 4lang7" P4S6 A9 A$D A9C'ambarSB9T J &est bit 'ambar yang 2e A9 .Q $ol J .i2a nolC lompat Pixel Pos9CPos>C=7 J .i2a tida2C gambar pixel $ol" POP A9 J S6( A9C1 J )$5 Pos9 J &ambah posisi 9 *OOP 4lang7 J &est bit 'ambar beri2!tnya ADD B9C, J A2ses 0ord beri2!tnya POP 59 *OOP 4lang, J &est 0ord beri2!tnya )$5 Pos> J S4B Pos9C7, J %embali2an posisi 9 m!la;m!la POP 59 *OOP 4lang1 J &est 0ord pada baris beri2!tnya Exit" (ead2ey Set5(& 7h J A2ti#2an 3ode de#a!lt Dos
1?9
E$D
Bila program 0:.:. dieksekusi, maka pada layar akan ditampilkan sebuah gambar helikopter 7&ambar 0:.@*. Celikopter ini digambar berdasarkan data gambar pada ,ariabel 5&ambar5. ===== &br0:@.P!3 >>>>> 'ambar ,-.G. 6asil e2se2!si program ,-.-. 5atatan" 4engan teknik yang tidak jauh berbeda, anda bisa membuat program yang dapat menampilkan bermacam format gambar, seperti &!H, P!3, B-P, dan sebagainya.
1?1
Pixel 3A5(O 9C>CDarna P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 3OV A6C1, J Ser:is menggambar pixel 3OV 59C9 J Posisi 2olom ata! 9 3OV D9C> J Posisi baris ata! > 3OV A*CDarna J Atrib!t Pixel )$& 1 h J 'ambar pixel terseb!t N POP D9 POP 59 POP B9 POP A9 E$D3 6eli 3A5(O 'ambarCDarna *O5A* 4lang1C4lang,C4lang7C$ol P4S6 A9 J P4S6 B9 J Simpan sem!a register yang P4S6 59 J dig!na2an P4S6 D9 J
S4B B9CB9 J 3OV 59C7, J 59 K banya2nya baris 4lang1" P4S6 59 3OV 59C, J 59 K banya2nya Dord sat! baris 4lang," P4S6 59 3OV 59C1G J 59 K Banya2nya bit pada 1 0ord 3OV A9C1 b 4lang7" P4S6 A9 A$D A9C'ambarSB9T J Apa2ah bit gambar 2e A9K1 P .Q $ol J &ida2C lompat Pixel Pos9CPos>CDarna J >aC gambar pixel $ol" POP A9 J S6( A9C1 J 4nt!2 men;test bit 'ambar )$5 Pos9 J *OOP 4lang7 J 4langi test bit beri2!tnya ADD B9C, POP 59 *OOP 4lang, )$5 Pos> S4B Pos9C7, POP 59 *OOP 4lang1 S4B POP POP POP POP E$D3 Pos>C7, D9 59 B9 A9 J 4nt!2 menga2ses 0ord beri2!tnya J J 4langi test 0ord beri2!tnya J &ambah posisi > J %embali2an posisi 9 m!la;m!la J J &est 0ord pada baris beri2!tnya J %embali2an posisi > m!la;m!la J J Ambil 2embali sem!a nilai J register yang disimpan J
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " A$)3A&E,.AS3 J J A!thor " Sto J J <!ngsi " 3emb!at animasi heli2opter yang J J sedang terbang J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A**
1?0
.5ODE O(' 1
h b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
&Data " .3P Proses 6eli1 DD bC DD bC DD bC DD bC 111 DD bC 1 DD 11111111bC111111111111111 DD bC 1 DD bC 111111111 DD 111 bC11111111111 DD 1 111111bC1111 1 11 DD 111111111111111bC1111 1 11 DD 11bC1111 111111 DD bC 1111111111 DD bC 1 1 1 DD 111111bC111111111111 DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC DD bC Pos9 Pos> DD DD J Posisi a0al 9 J Posisi a0al > J A2ti#2an mode :ideo gra#i2
3OV 59C 4lang" 6eli 6eli1CJ 'ambar heli dengan 0arna Delay J 6eli 6eli1C J 6ap!s heli dengan 0arna hitam )$5 Pos9 J &ambah posisi 9 )$5 59 J 53P 59C,B J 4langi sebanya2 ,B 2ali .E Exit J .3P 4lang J Exit" Set5(& 7h )$& , h E$D &Data J %emabli 2e mode :ideo de#a!lt dos
Bila program 0:.@. dieksekusi, maka pada layar akan ditampilkan sebuah gambar helikopter 7&ambar 0:.@* yang akan terbang melintasi monitor anda.
1?B
A2WPage 3A5(O $o J 3acro ini dig!na2an !nt!2 3OV A6CJ menga2ti#2an halaman layar 3OV A*C$o )$& 1 h E$D3 Set5(& 3A5(O 3ode 3OV A6C 3OV A*C3ode )$& 1 h E$D3 J 3acro !nt!2 mengganti mode layar
Pixel 3A5(O 9C>CDarnaC6lm P4S6 A9 P4S6 B9 P4S6 59 P4S6 D9 3OV A6C1, J Ser:is menggambar pixel 3OV 59C9 J Posisi 2olom ata! 9 3OV D9C> J Posisi baris ata! > 3OV A*CDarna J Atrib!t Pixel 3OV B6C6lm J 6alaman layar )$& 1 h J 'ambar pixel terseb!t N POP D9 POP 59 POP B9 POP A9 E$D3 6allo 3A5(O 'ambarCDarnaC6lm *O5A* 4lang1C4lang,C4lang7C$ol P4S6 A9 J P4S6 B9 J Simpan sem!a register yang P4S6 59 J dig!na2an P4S6 D9 J S4B B9CB9 3OV 59C7, 4lang1" P4S6 59 3OV 59C, 4lang," J J 59 K banya2nya baris J 59 K banya2nya Dord sat! baris
1?8
P4S6 59 3OV 59C1G J 59 K Banya2nya bit pada 1 0ord 3OV A9C1 b 4lang7" P4S6 A9 A$D A9C'ambarSB9T J Apa2ah bit gambar 2e A9K1 P .Q $ol J &ida2C lompat Pixel Pos9CPos>CDarnaC6lm J >aC gambar pixel $ol" POP A9 J S6( A9C1 J 4nt!2 men;test bit 'ambar )$5 Pos9 J *OOP 4lang7 J 4langi test bit beri2!tnya ADD B9C, POP 59 *OOP 4lang, )$5 Pos> S4B Pos9C7, POP 59 *OOP 4lang1 S4B POP POP POP POP E$D3 Pos>C7, D9 59 B9 A9 J 4nt!2 menga2ses 0ord beri2!tnya J J 4langi test 0ord beri2!tnya J &ambah posisi > J %embali2an posisi 9 m!la;m!la J J &est 0ord pada baris beri2!tnya J %embali2an posisi > m!la;m!la J J Ambil 2embali sem!a nilai J register yang disimpan J
J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " A$)3A&E7.AS3 J J A!thor " Sto J J <!ngsi " 3emb!at animasi dengan meman#aat2an J J halaman layar J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses 6all1 DD 1bC1 b DD 11bC1 b DD 11 bC b DD 111bC1 b DD 11111 bC111111 b DD 11 1 bC1 11 b DD 1 1 bC 1 1 b DD 1 1 bC 11 11 b DD 1 1 bC 1 1 b DD 1 bC 1 b DD 1 11 bC 11 1 b DD 1 1111 bC 11111 1 b DD 1 1111 bC 1111 1 b DD 1 11 111 bC 11 11 1 b DD 1 111111 bC 11111 1b DD 1 bC 1b DD 1 1bC1 1 b DD 1 11bC11 1 b DD 1 1 bC11 1 b DD 1 1 bC 1 1 b DD 1 111 bC 111 1 b DD 1 111111 bC11 1111 1 b DD 1 111111 bC11 1111 1 b DD 1 1111111bC1111111 1 b
1?:
DD DD DD DD DD DD DD DD
b b b b b b b b
6all, DD 11bC b DD 111bC b DD 11 bC b DD 111bC1 b DD 11111 bC111111 b DD 11 1 bC1 11 b DD 1 1 bC 1 1 b DD 1 1 bC 11 11 b DD 1 1 bC 1 1 b DD 1 bC 1 b DD 1 1 bC 1 1 b DD 1 111 bC 111 1 b DD 1 111 bC 111 1 b DD 1 1111 bC 1111 1 b DD 1 1111 bC 111 1b DD 1 bC 1b DD 1 1bC1 1 b DD 1 11bC11 1 b DD 1 1 bC11 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 1 bC 1 1 b DD 1 111 bC 1111 1 b DD 1 11111 1bC1111111 1 b DD 1 11111bC11111 1 b DD 1 111bC111 1 b DD 1 bC 11 b DD 11 bC 111 b DD 111 bC1 1 b DD 1111bC 1111 b DD bC b DD bC b 6all7 DD 1111 bC b DD 1111bC b DD 11 bC b DD 111bC1 b DD 11111 bC111111 b DD 11 1 bC1 11 b DD 1 1 bC 1 1 b DD 1 1 bC 11 11 b DD 1 1 bC 1 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 bC 11 1 b DD 1 1 bC 11 1 b DD 1 111 bC 11 1 b DD 1 11111 bC 11 1b DD 1 bC 1b DD 1 1bC1 1 b DD 1 11bC11 1 b DD 1 1 bC11 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 11 bC 1 1 b DD 1 11111 bC 1 111 1 b DD 1 111 bC 111111 1 b DD 1 1111bC11111 1 b
1?@
DD DD DD DD DD DD DD
b b b b b b b
6all8 DD 111 bC b DD 11 1111 bC b DD 111bC b DD 111bC1 b DD 11111 bC111111 b DD 11 1 bC1 11 b DD 1 1 bC 1 1 b DD 1 1 bC 11 11 b DD 1 1 bC 1 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 bC 1b DD 1 bC 1b DD 1 1bC1 1 b DD 1 11bC11 1 b DD 1 1 bC11 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 bC 1 b DD 1 bC1 1 b DD 1 1 bC 1 1 b DD 1 11bC11 11 b DD 11 bC 111 b DD 111 bC1 1 b DD 1111bC 1111 b DD bC b DD bC b Pos9 Pos> DD 1DD E J Posisi a0al 9 J Posisi a0al > J A2ti#2an mode :ideo gra#i2 J 'ambar hall1 pada halaman J 'ambar hall, pada halaman 1 J 'ambar hall7 pada halaman , J 'ambar hall8 pada halaman 7
Proses" Set5(& 17 6allo 6allo 6allo 6allo 6all1C, C 6all,C,1C1 6all7C,,C, 6all8C,7C7
3OV A*C8 4lang1" DE5 A* A2WPage A* (ead2ey 53P A*C .$E 4lang1 Exit" Set5(& 7h )$& , h E$D &Data
1?A
Bila program 0:.A. dieksekusi, maka pada layar akan ditampilkan gambar pumpkin yang akan berubah mimik +ajahnya setiap ditekan sembarang tombol7&ambar 0:.@*. ===== &br0:A.P!3 >>>>> 'ambar ,-.E. 6asil e2se2!si program ,-.E. Pada a+al program kita mangaktifkan modus grafik 1B yang mempunyai halaman tampilan sebanyak 8 buah79, 1, 0 dan B*. $arena modus yang digunakan mempunyai halaman tampilan lebih dari satu, maka pada macro yang menggambar Pi/el, ditambahkan register BC yang berisi nomor halaman yang akan digambari pi/el.
1??
1?E
K K K empat K K Program K K K G"""""""""""""""G -O6 A3,8299h !D 01h 'D4 1abel1 """""""""""""""""""""""""""""""""""""""""""""""""""""""""" 'ambar ,G.1. 3odel program E9E Pada program '3', kita tidak perlu menggunakan perintah;O#& 199h, karena program '3' bisa menempatkan dirinya pada alamat yang telah ditentukan. Pada program '3', register segment 2S dan SS diinialisasi secara otomatis, tetapi register segment 4S dan 'S tidaklah demikian. #egister segment 4S dan 'S pada a+alnya menunjuk pada a+al program, yaitu PSP. $arenanya register 4S perlu kita inialisasi secara manual agar menunjuk pada segment data melalui perintah; 3OV A9C@DA&A 3OV DSCA9 Pada program '3', kita perlu mendefinisikan tempat untuk stack. Pendefinisian tempat untuk stack digunakan tanda directi,e; .S A2$ yang diikuti dengan banyaknya stack yang didefinisikan untuk program. Pada model yang kita gunakan didefinisikan tempat untuk stack sebanyak 099h Word yang tentunya sudah lebih dari cukup untuk digunakan oleh program"program pada umumya. Berbeda dengan program 2O-, yang selalu kita akhiri dengan interupsi 09h, pada program '3' interupsi 09h tidak bisa digunakan. Pada program '3' digunakan interupsi 01h fungsi 82h dengan register A1 berisi kode return. !nterupsi 01h fungsi 82h ini lebih fleksibel untuk digunakan, karena selain kontrol akan dikembalikan kepada 4OS, file"file yang terbuka juga akan ditutup oleh fungsi ini. Hungsi ini juga akan mengembalikan ,ektor interupsi default 00h, 0Bh dan 08h. Anda juga bisa mengakhiri program 2O- dengan fungsi ini.
1E9
,G.7. 3E3B4A& P(O'(A3 E9E Sesuai dengan model program '3' pada gambar 0@.1. akan kita buat sebuah program yang sederhana. Program berikut akan memperlihatkan kepada anda, bagaimana caranya merubah huruf kecil menjadi huruf besar. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " 4P5ASE.AS3 J J A!thor " Sto J J <!ngsi " 3er!bah h!r!# 2ecil men1adi J J h!r!# besar J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .S&A5% , h .DA&A %lm DB I5inta menyebab2an rind! yang paling sengsara XI .5ODE Proses" 3OV A9C@DA&A 3OV DSCA9
9O( B9CB9 3OV 59C8E 4lang" 53P %lmSB9TCIaI J Apa2ah h!r!# 2ecil P .B &ida2 J &ida2C ce2 beri2!tnya 53P %lmSB9TCIYI J Apa2ah h!r!# 2ecil P .A &ida2 J &ida2C ce2 beri2!tnya S4B %lmSB9TCIaI;IAI J .adi2an h!r!# besar &ida2" )$5 B9 J A2ses 2ara2ter beri2!tnya *OOP 4lang J 4langi 5eta2" 3OV A6C B J 5eta2 2alimat yang telah *EA D9C%lm J dir!bah men1adi h!r!# besar )$& ,1h J sem!anya Exit" 3OV A9C85 h J SelesaiC )$& ,1h J 2embali 2e DOS E$D Proses
Setelah program 0@.1. anda ketikkan, compilelah menjadi bentuk '3', dengan cara; 5"?@&AS3 4P5ASE &!rbo Assembler Version ,. Borland )nternational 5opyright +cA 1B==C 1BB
1E1
Passes" 1 (emaining memory" 7,G2 Setelah source program di AS-, anda bisa me"1!D$ objek file dengan; 5"?@&*)$% 4P5ASE &!rbo *in2 Version 7. 5opyright +cA 1B=EC 1BB Borland )nternational Setelah kedua proses ini selesai, maka anda akan mendapatkan sebuah program '3' yang siap dijalankan. Bila program 0@.1. dieksekusi, maka pada layar akan ditampilkan kalimat yang semua karakternya telah dirubah menjadi huruf besar, seperti; 5)$&A 3E$>EBAB%A$ ()$D4 >A$' PA*)$' SE$'SA(A
1E0
1EB
.ntuk menggunakan urbo 4ebugger, anda dapat langsung menyertakan nama file yang akan dilacak malalui parameter, seperti; &D 4P5ASE (ika 'ktensi file tidak anda sertakan, maka secara default urbo 4ebugger akan mencari file tersebut dengan ektensi '3' terlebih dahulu. Bagi anda pemakai urbo Pascal, tentunya tidak akan terlalu asing dengan tampilan urbo 4ebugger ini. ampilan pada urbo 4ebugger hampir sama dengan tampilan pada urbo Pascal, selain itu banyak pula tombol fungsi yang sama persamaanya7&ambar 0A.1.* ===== &br0A1.P!3 >>>>>> 'ambar ,E.1. &ilan 3en! &!rbo Deb!gger Pada lingkungan urbo 4ebugger ini, mouse dapat anda gunakan dengan mudahnya tetapi bila anda tidak mempunyainya, keyboard juga dapat digunakan.
1E8
===== &br0A0.P!3 >>>>> 'ambar ,E.,. &ilan &!rbo Deb!gger 2obalah anda race jalannya program anda dengan menekan tombol HA atau dengan memilih menu #un kemudian race. Setiap penekanan tombol HA akan melaksanakan satu intruksi yang ditunjukkan oleh tanda panah72S;!P* dan tanda panah akan segera bergeser pada intruksi selanjutnya yang siap dieksekusi. ekanlah terus tombol HA dan perhatikan perubahan nilai register dan perubahan huruf"huruf pada ,ariabel 5$lm5. Setelah program selesai dieksekusi anda bisa melihat tampilan dari program dengan menekan tombol A1 GH:. .ntuk keluar dari lingkungan urbo 4ebugger, tekanlah tombol A1 G3. Bila anda masih ingin mencoba, tekanlah tombol 2trlGH0 maka file akan segera direset atau di1oad kembali dan siap di race lagi dari permulaan.
1E:
register yang sedang disorot. Selain mengganti nilai register dengan cara ini, anda bisa mengganti nilai register yang sedang disorot dengan secara langsung mengetikan nilainya tanpa mengaktifkan Sub-enu. " #egister B0"Bit; Pilihan ini akan menampilkan register B0 bit bila belum ditampilkan, sebaliknya register B0 bit akan dihilangkan bila sebelumnya telah ditampilkan.
1E@
" 2hange ; .ntuk mengganti data 1 byte atau lebih data pada posisi kursor. " Hollo+ ; .ntuk mengganti alamat code atau data tampilan dengan data pada posisi kursor. " Pre,ious; .ntuk mengembalikan tampilan pada alamat sebelum terjadi perubahan. Perintah ini biasanya digunakan untuk membatalkan hasil dari perintah Hollo+ dan &oto. Pekerjaan ini dapat dilakukan karena urbo 4ebugger menyimpan alamat terakhir pada saat terjadi perubahan alamat. " 4isplay As; .ntuk merubah format tampilan yang secara default adalah Byte. Perintah ini mempunyai pilihan; Byte, Word, 1ong!nt78 byte*, 2omposite7? byte*, Hloat7Hormat data 2*, #eal7@ byte*, 4ouble7Hormat data 2* dan '/tended719 byte*. " Block ; .ntuk manipulasi blok memory. Perintah ini mempunyai pilihan; O 2lear ; .ntuk menolkan data pada suatu block memory yang ditentukan. O -o,e ; .ntuk memindahkan suatu block memory pada alamat baru. O Set ; .ntuk merubah semua nilai pada suatu block memory. O #ead ; .ntuk membaca file ke suatu block memory yang ditentukan. Anda harus menentukan nama file, alamat a+al penyimpanan dan banyaknya byte yang akan dibaca. O Write ; .ntuk membaca suatu 4ata blok yang ditentukan dan ditulis ke file yang ditentukan. Pada menu ini, anda juga harus menentukan alamat a+al dari data yang akan dicatat, banyaknya byte serta nama file. ,E.7.7. 3E$&(A5E P(O'(A3 Pada bagian 0A.B. anda telah menggunakan tombol HA untuk mentrace program. Pada bagian ini akan kita lihat fungsi"fungsi lain yang disediakan oleh urbo 4ebugger untuk mentrace program. -acam"macam fungsi trace ini umumnya terdapat pada menu #un7&ambar 0A.:.*.
1EA
===== &br0A:.P!3 >>>>> 'ambar ,E.-. 3en! (!n Pada menu #un ini, dapat anda lihat terdapat lagi submenu; 1. #un ; .ntuk menjalankan program dengan kecepatan penuh. Program akan dijalankan sampai selesai atau pada posisi Break Point. Anda bisa menggunakan fungsi ini dengan menekan tombol HE secara langsung. 0. &o o 2ursol ; .ntuk menjalankan program sampai posisi kursor. .ntuk menggunakan fungsi ini, gerakkanlah posisi kursor dengan tombol panah menuju posisi yang diiginkan, kemudian pilihlah menu #un dan &o o 2ursol atau dengan menekan tombol H8. -aka program akan dijalankan sampai posisi kursor tersebut. B. race !nto ; .ntuk menjalankan satu intruksi. Bila terdapat pemanggilan terhadap suatu procedure, fungsi ini juga akan melompat dan menjalankan intruksi pada procedure itu. Hungsi ini dapat digunakan secara langsung dengan menekan tombol HA. 8. Step O,er ; Sama dengan fungsi HA perbedaannya bila terdapat pemanggilan terhadap suatu procedure, fungsi ini akan langsung menyelesaikan seluruh intruksi pada procedure tersebut. Hungsi ini dapat digunakan secara langsung dengan menekan tombol H?. :. '/ecute o ; .ntuk menjalankan program sampai pada posisi yang ditentukan. Anda bisa menentukan alamat segment;offset ataupun dengan nama label program sebagai tempat berhenti. Hungsi ini dapat digunakan secara langsung dengan menekan tombol AltGHE. @. .ntil #eturn ; .ntuk menjalankan program sampai akhir dari suatu procedure atau procedure kembali pada pemanggilnya. Hungsi ini biasanya digunakan pada saat anda mentrace program dengan tombol HA dan masuk pada suatu procedure, ternyata anda ingin segera mele+atinya. Hungsi ini dapat digunakan secara langsung dengan menekan tombol AltGH?.
1E?
A. Animate ; .ntuk menjalankan program secara otomatis sampai program selesai atau ditekan sembarang tombol. Hungsi ini sama dengan penekanan tombol HA secara otomatis. Hungsi ini biasanya digunakan oleh orang yang mempunyai mata elang atau pada program yang terdapat intruksi yang akan mengunci keyboard sementara. ?. Back race ; .ntuk menjalankan intruksi sebelumnya yang telah dijalankan. Hungsi ini dapat digunakan secara langsung dengan menekan tombol AltGH8. E. !nstruktion race ; Sama dengan tombol HA, perbedaannya bila terdapat suatu interupsi maka fungsi ini akan masuk dan menjalankan program interupt handler perintruksi. 4engan fungsi ini anda dapat melihat interrupt handler suatu interupsi. Hungsi ini dapat digunakan secara langsung dengan menekan tombol AltGHA. 19. Argumen ; .ntuk merubah atau mengganti command line. 11. Program #eset ; .ntuk mereset program. Hungsi ini biasanya digunakan bila anda ingin mentrace kembali program dari permulaaan. Hungsi ini dapat digunakan secara langsung dengan menekan tombol 2trlGH0. ,E.7.8. 3E*)6A& VA()ABE* P(O'(A3 Semua isi ataupun nilai dari ,ariabel program bisa anda lihat dengan tombol 2trlGHA ataupun dengan memilih menu 4ata kemudian pilih menu Add Watch. Setelah itu isilah dengan nama ,ariabel yang ingin anda lihat isinya7&ambar 0A.@.*. ====== &br0A@.P!3 >>>>>> 'ambar ,E.G. 3elihat Variabel Program Bila anda memasukkan nama dari suatu label program, maka alamat dari label tersebut akan ditampilkan. Bila anda merasa +imdo+ +atch ini terlalu kecil, tombol H@ dapat anda gunakan untuk berpindah ke +indo+ +atch ini dan membesarkannya7H:*. Penekanan tombol H: akan membesarkan atau mengecilkan +indo+.
1EE
,E.7.-. 3E3BE()%A$ &)&)% B(EA%PO)$&S Breakpoints adalah titik"titik tempat dimana program akan dihentikan. .ntuk itu anda bisa melakukannya dengan; 1. Aktifkan urbo 4ebugger 0. empatkan kursor pada posisi yang ingin anda beri tanda breakpoints. B. Pilih menu BreakPoints kemudian oggle, atau langsung menekan tombol H0. -aka pada posisi tersebut akan ditandai dengan sebuah sorotan garis merah7&ambar 0A.A*. Bila anda ingin membatalkan titik brekpoints, tekanlah tombol H0 sekali lagi pada tempat yang sama. ====== &br0AA.P!3 >>>>>>
099
'ambar ,E.E. 3emberi2an posisi Brea2Points Selain pemberian posisi BreakPoints dengan H0, anda bisa juga memberikan posisi BreakPoints melalui alamatnya. .ntuk itu tekanlah tombol AltGH0 dan berikan alamat untuk titik BreakPoints tersebut. 8. ekanlah tombol HE untuk mengeksekusi program anda. Setiap mencapai titik BreakPoints program akan segera berhenti, untuk melanjutkannya kembali tekanlah tombol HE lagi. ,E.8. .)%A A$DA 3E3P4$>A) P(O'(A3 >A$' BESA( (ika anda ingin melacak suatu program yang besar, kebutuhan akan memory komputer menjadi penting sekali. Pada kasus seperti ini, urbo 4ebugger menyediakan 0 cara yang dapat memecahkan masalah ini, yaitu; 1. .ntuk anda yang memiliki komputer ?90?@, disediakan program 40?@.'3' yang dapat berjalan pada modus proteksi. 40?@.'3' akan menyimpan dirinya pada Cigh Area, sehingga memory kon,ensional hanya digunakan sedikit sekali. Program 40?@ dapat juga berjalan pada semua prosesor diatasnya, seperti ?9B?@ dan ?98?@. 0. .ntuk anda yang memiliki komputer ?9B?@ dengan memory e/tended minimal @89 $B, disediakan 4B?@.'3' dengan 4ri,er 4CB?@.SLS. 4ri,er 4CB?@.SLS akan membuat urbo 4ebugger dijalankan pada modus 6irtual sehingga membebaskan memory kon,ensional. Anda bisa menggunakan dri,er ini melalui 2ODH!&.SLS dengan menyertakan; 4'6!2'C!&CF 4CB?@.SLS. !ngatlah, dri,er 4CB?@.SLS ini biasanya akan konflik dengan memory manager yang menggunakan ,irtual memory, seperti U'--.SLS. Baik 40?@.'3' maupun 4B?@.'3' dapat dijalankan persis dengan program 4.'3'. Selain dengan cara diatas, masih terdapat cara lain yaitu dengan menggunakan 4#'-O '.'3'. Program ini memungkinkan pelacakan sebuah program dengan menggunakan 0 komputer yang dihubungkan melalui serial port. 4engan cara ini, sebuah program dapat menggunakan memory kon,ensional secara optimal sementara 4#'-O ' menggunakan memory dari komputer yang lain.
091
-nemonic ; AAA +AS5)) Ad1!st <or AdditionA ersedia pada ; ?9?? keatas Synta/ ; AAA Pengaruh flag ; AH, 2H Hungsi ; -engatur format bilangan binerNhe/a ke bentuk B24 setelah dilakukan operasi penjumlahan dua bilangan B24. AAA hanya dapat dilakukan untuk bilangan sebesar 8 bit, maksimal he/a H dan diletakkan di register A1. Bila A1 bernilai lebih dari E, maka A1 akan dikurangi 19 dan 8 bit tinggi dari A1 akan dijadikan 9. Setelah itu AC akan ditambah dengan 1. 2H dan AH akan diset 1. 2ontoh; Bilangan B24 ? G @ F ... -O6 A1,?h -O6 AC,@h A44 A1,AC Y A3 F 9@9'h AAA Y A3 F 9A98h (adi bilangan 9' dijadikan B24 menjadi 18, dimana bilangan di A3 dibaca B24 18 ""> AC F 17A"@*, A1 F 8 -nemonic ; AAD +AS5)) Ad1!st <or Di:isionA ersedia pada ; ?9?? keatas Synta/ ; AA4 Pengaruh flag ; SH, PH, PH Hungsi ; -engkon,ersi bilangan B24 ke biner atau he/a. Adapun cara yang dilakukan adalah mengalikan AC dengan 19 dan menambahkan isi A1 dengan hasilkali AC. Casil pertambahan tersebut akan diletakkan di register A1 kemudian AC akan dinolkan. 2ontoh;
090
Ce/a dari B24 :B adalah ... -O6 AC,9: -O6 A1,9B AA4 Y A1F99B:h yaitu he/a dari B24 :B -nemonic ; AA3 +AS5)) Ad1!st <or 3!ltiplicationA ersedia pada ; ?9?? keatas Synta/ ; AAPengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; -engkon,ersi bilangan biner atau he/a ke B24. Adapun cara yang dilakukan adalah membagi A1 dengan 19, kemudian hasilnya dimasukkan ke register AC sedang sisanya ke register A1. 2ontoh; Bilangan B24 Y 10 O E F ... -O6 A1,10h -O6 B1,9Eh -.1 B1 Y A3 F 99A0h AAY A3 F 1990h Bilangan 1990h pada A3 dibaca sebagai desimal 1@0 ; " AC F 19h F 1@ " A1 F 90h F 0 -nemonic ; AAS +AS5)) Ad1!st <or S!btractionA ersedia pada ; ?9?? keatas Synta/ ; AAS Pengaruh flag ; AH, 2H Hungsi ; -engatur format bilangan binerNhe/a hasil pengurangan ke bentuk B24. AAS ini berlaku untuk hasil pengurangan yang tidak lebih dari 8 bit. (ika 8 Bit rendah dari A1 lebih besar dari E, maka A1 akan dikurangi dengan @ dan register AC akan dikurangi 1. 8 bit atas register A1 akan dijadikan nol sedangkan 8 bit rendahnya akan bernilai 9"E. 2ontoh; Bilangan B24 11 " : F ... -O6 A1,11h
09B
-O6 B1,:h S.B A1,B1 Y A3 F 9992 AAS Y A3 F HH9@ -nemonic ; AD5 +Add Dith 5arryA ersedia pada ; ?9?? keatas Synta/ ; A42 ujuan,Sumber Pengaruh flag ; OH, SH, PH, AH, PH Hungsi ; -enambahkan 5Sumber5, 5 ujuan5 dan 2arry Hlag 71Fon, 9Foff*, hasilnya diletakkan pada 5 ujuan5. !ntruksi ini biasanya digunakan setelah operasi pada pertambahan atau perkalian yang menyebabkan 2arry. -isalkan pertambahan yang melibatkan bilangan yang besar, seperti pada contoh diba+ah ini; 2ontoh; 10B8:@A?h G EAB24'H9 F ...... $edua operand di atas berukuran 8 byte. (elas sudah melebihi kapasitas register. 4i sinilah digunakan mnemonic A42. 2ontoh; -O6 A3,10B8h Y A3 F 10B8 -O6 B3,EAB2h Y B3 F EAB2 -O6 23,:@A?h Y B3 F :@A? -O6 43,94'H9h Y 43 F 4'H9 A44 23,43 Y 23 F B:@? 2H F 1 A42 A3,B3 Y A3 F A3GB3G2H F A2H1 Casil penjumlahan tertampung di A3;23 yaitu A2H1B:@?h. -nemonic ; ADD ersedia pada ; ?9?? keatas Synta/ ; A44 ujuan,Sumber Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; -enambahkan 5Sumber5 dan 5 ujuan5 kemudian hasilnya disimpan pada 5 ujuan5. Bila hasil penjumlahan tidak tertampung seluruhnya pada
098
5 ujuan5, maka 2H akan diset 1. 2ontoh; A44 A3,B3 A44 A1,VB:9W A44 VB:9W,A1 A44 AC,19h A44 VB:9W,19h Y (umlahkan 0 register Y (umlahkan register dengan isi memori Y (umlahkan isi memory dengan register Y (umlahkan register dengan immediate Y (umlahkan isi memori dengan immediate
-nemonic ; A$D ersedia pada ; ?9?? keatas Synta/ ; AD4 ujuan,Sumber Pengaruh flag ; OH, SH, PH, PH, 2H Hungsi ; -elakukan logika AD4 antara 5 ujuan5 dan 5Sumber5. Casil dari operasi AD4 diletakkan pada 5 ujuan5. !nstruksi AD4 umumnya digunakan untuk melihat kondisi suatu bit dengan menolkan bit"bit lainnya. 2ontoh; AD4 A1,99991999b Y A1F9999J999 (P Dol Y (ika bit ketiga A1F9, maka lompat -nemonic ; BO4$D +5hec2 Bo!nds O# Array )ndexA ersedia pada ; ?9?? keatas Synta/ ; BO.D4 ujuan,Sumber Pengaruh flag ; idak ada Hungsi ; .ntuk memastikan bah+a inde/ array bertanda negatif atau positif masih masuk dalam batas limit yang didefinisikan oleh 4ouble Word blok memory. -nemonic ; 5A** ersedia pada ; ?9?? keatas Synta/ ; 2A11 nama"procedure Pengaruh flag ; idak ada Hungsi ; -elompat dan mengerjakan intruksi pada procedure program. Pada saat instruksi 2all diberikan, maka processor akan melakukan ;
09:
" P.SC 2S ke stack bila procedure yang dipanggil bertipe Har. " P.SC !P ke stack. " -engganti nilai 2S dengan segmen dari procedure bila procedure tersebut bertipe Har. " -engganti nilai !P dengan offset dari procedure. 1akukan intruksi yang terdapat pada alamat baru72S;!P* sampai bertemu dengan intruksi #' , setelah itu; " POP !P " POP 2S bila procedure bertipe Har. " $embali ke program indukNpemanggil. 2ontoh; 12H';910: 2A11 DSP#O2 Y Push !P7F910?* ke stack, !PF19@@ 12H';910? ....... 12H';91:: 2A11 HSP#O2 Y Push 2S7F12H'*M!P7F91@9* ke stack Y 2SF1HHH,!PF91AE 12H';91@9 ....... 12H';19@@ DSP#O2 P#O2 D'A# ....... ....... #' Y Pop !P7F910?* DSP#O2 'D4P 1HHH;91AE HSP#O2 P#O2 HA# ....... ....... #' Y Pop !P7F91@9* M 2S7F12H'* HSP#O2 'D4P -nemonic ; 5BD +5on:ert Byte &o DordA ersedia pada ; ?9?? keatas Synta/ ; 2BW Hungsi ; -engubah isi regi ster A1 menjadi A3 dengan mengubah isi register AC menjadi 9 bila A1 benilai positif atau AC akan bernilai HH bila A1 negatif.
09@
2ontoh; -O6 A1,HHh -O6 B3,10BHh 2BW Y A3 F HHHH A44 A3,B3 Y A3 F 10BH G 7"1* F 10B' Pada bilangan bertanda, angka HHh pada A1 adalah "1 bagi Assembler bukannya 0:: desimal. -nemonic ; 5*5 +5lear 5arry <lagA ersedia pada ; ?9?? keatas Synta/ ; 212 Pengaruh flag ; 2H Hungsi ; -embuat carry flag menjadi 9. 2ontoh; .ntuk menjaga agar dalam operasi #2#, rotasi pertamanya yang masuk adalah 9 maka digunakan 212 dahulu. 212 #2# A3,1 -nemonic ; 5*D +5lear Direction <lagA ersedia pada ; ?9?? keatas Synta/ ; 214 Pengaruh flag ; 4H Hungsi ; -embuat direction flag berisi 9. Bila direction flag berisi 9 maka pembacaan string akan berlangsung dari memory rendah ke tinggi. Sebaliknya bila direction flag bernilai 1 maka string akan diproses dari memory tinggi ke rendah. 2ontoh; 214 Y Arah Operasi string ke kanan -O6 23,9Hh Y Bandingkan 1@ byte dari string #'P' 2-PSB Y sampai ada satu yang tidak sama
09A
-nemonic ; 5*) +5lear )nterr!pt <lagA ersedia pada ; ?9?? keatas Synta/ ; 21! Pengaruh flag ; !H Hungsi ; -embuat interrupt flag menjadi 9. Bila !H berisi 9 maka semua interupsi akan diabaikan oleh komputer, kecuali Donmaskable !nterrupt7D-!*. .mumnya 21! diberikan pada saat akan dilakukan proses yang fatal, dimana terjadinya interupsi akan menghancurkan proses tersebut. 2ontoh; $ita akan mengubah alamat sebuah stack, dengan mengubah SS dan SP. Selama SS dan SP diubah, interupsi tidak boleh terjadi. Cal ini dikarenakan pada saat terjadi interupsi, register 2S, !P dan Hlags disimpan pada stack sebagai alamat kembali nantinya. -O6 -O6 21! -O6 -O6 S ! A3,AlmStack 43,AlmOffset SP,43 SS,A3
-nemonic ; 535 +5omplement 5arry <lagA ersedia pada ; ?9?? keatas Synta/ ; 2-2 Pengaruh flag ; 2H Hungsi ; -engubah 2arry flag menjadi kebalikan dari isi semulanya, seperti dari 9 menjadi 1 dan sebaliknya. 2ontoh; Pada kebanyakan operasi, 2arry flag dijadikan sebagai tanda berhasil atau tidaknya operasi tersebut. Biasanya 2arry flag akan bernilai 9 bila operasi berhasil dan bernilai 1 bila operasi mengalami kegagalan. 4engan menggunakan perintah 2-2 disertai dengan A427pertambahan dengan carry flag*, anda dapat memanfaatkannya untuk menghitung banyaknya keberhasilan operasi
09?
yang dilakukan, seperti; -O6 23,2ounter 3O# A3,A3 .lang; P.SC A3 Operasi POP A3 2-2 A42 A3,9 1OOP .lang Pada hasil akhir dari proses ini register A3 akan berisi banyaknya operasi yang berhasil dilakukan. -nemonic ; 53P +5ompareA ersedia pada ; ?9?? keatas Synta/ ; 2-P operand1,operand0 Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; -embandingkan 5operand15 dengan 5operand05. Adapun cara yang dilakukan adalah dengan mengurangkan 5operand15 dengan 5operand05 7operand1" operand0*. 5Operand15 dan 5operand05 yang dibandingkan harus mempunyai tipe data yang sama, seperti byte dengan byte 7A1,AC,B1,BC,..* atau +ord dengan +ord 7A3,B3,23,..*. Perintah 2-P hanya mempengaruhi flags register tanpa merubah isi 5operand15 dan 5operand05. 2ontoh; .lang; 2-P 23,A3 (' '/it 1OOP .lang -nemonic ; 53PSB +5ompare Strings ByteA ersedia pada ; ?9?? keatas Synta/ ; 2-PSB Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; .ntuk membandingkan satu byte pada alamat 4S;S! dengan 'S;4!.
09E
(ika direction flag bernilai 1 maka setiap selesai perbandingan register S! dan 4! akan ditambah dengan 1, sebaliknya jika direction flag bernilai 9 maka setiap selesai perbandingan register S! dan 4! akan dikurang dengan 1. -nemonic ; 53PSD +5ompare Strings DordA ersedia pada ; ?9?? keatas Synta/ ; 2-PSW Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; .ntuk membandingkan satu +ord pada alamat 4S;S! dengan 'S;4!. (ika direction flag bernilai 1 maka setiap selesai perbandingan register S! dan 4! akan ditambah dengan 0, sebaliknya jika direction flag bernilai 9 maka setiap selesai perbandingan register S! dan 4! akan dikurang dengan 0. -nemonic ; 5DD +5on:ert Dord &o Do!ble0ordA ersedia pada ; ?9?? keatas Synta/ ; 2W4 Pengaruh flag ; idak ada Hungsi ; -engubah tipe +ord7A3* menjadi double +ord743*. Bila A3 positif maka 43 akan berisi 9999, bila A3 negatif maka 43 berisi HHHH. 2ontoh; Anda dapat memanfaatkan fungsi 2W4 ini untuk mendapatkan bilangan absolute. Absolut -A2#O Bil -O6 'S A3,19999999b Y Apakah A3 negatifJ (P Selesai Y La, selesai 2W4 Y 3O# A3,43 Y (adikan positif S.B A3,43 Y Selesai; 'D4-
019
-nemonic ; DAA +Decimal Ad1!st A#ter AdditionA ersedian pada ; ?9?? keatas Synta/ ; 4AA Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; -engubah hasil penjumlahan 0 bilangan bukan B24 pada register A1 menjadi bentuk B24. (ika 8 bit rendah dari A1 lebih besar dari E maka A1 akan dikurangi dengan 19 dan AH diset menjadi 1, sebaliknya jika 8 bit rendah A1 lebih kecil atau sama dengan E maka AH akan dijadikan 9. 4AA sebenarnya adalah sama dengan AAA kecuali dalam hal bah+a 4AA dapat mengatur baik bilangan ? bit maupun 8 bit pada A1, sementara AAA hanya 8 bit. 2ontoh; Bilangan B24 ; 0Ah G 8:h F ... -O6 AC,8:h -O6 A1,0Ah A44 A1,AC Y A1 F @2 4AA Y A1 F A0 -nemonic ; DAS +Decimal Ad1!st A#ter S!bstractionA ersedia pada ; ?9?? keatas Synta/ ; 4AS Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; -engubah hasil pengurangan 0 bilangan pada A1 menjadi bentuk B24. (ika 8 bit rendah dari A1 lebih besar dari E maka A1 akan dikurangi dengan @ dan AH diset menjadi 1, sebaliknya jika 8 bit rendah dari A1 lebih kecil atau sama dengan E maka AH akan dijadikan 9. 2ontoh; Bilangan B24; :9h " 0Bh F ... -O6 A3,:9h S.B A3,0Bh Y A3 F 9904 4AS Y A3 F 990A
011
-nemonic ; DE5 +DecrementA ersedia pada ; ?9?? keatas Synta/ ; 4'2 ujuan Pengaruh flag ; OH, SH, PH, AH, PH Hungsi ; .ntuk mengurangi 5 ujuan5 dengan 1. 5 ujuan5 dapat berupa register ? bit, 1@ bit, B0 bit maupun memory. Bila anda ingin mengurangi suatu register ataupun memory dengan 1, gunakanlah perintah 4'2 ini karena selain lebih cepat, perintah 4'2 juga menggunakan memory lebih sedikit dibandingkan dengan perintah S.B. 2ontoh; $ita dapat mengimplementasikan perintah 1oop dengan menggunakan 4'2. 4i ba+ah ini kita akan menjumlahkan bilangan B3 sampai 1. -isalnya bila B3 F : maka dijumlahkan :G8GBG0G1 F .... 3O# 1oop1 ; A44 4'2 2-P (DP A3,A3 A3,B3 B3 B3,9 1oop1
-nemonic ; D)V +Di:ideA ersedia pada ; ?9?? keatas Synta/ ; 4!6 Sumber Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; Bila 5sumber5 bertipe ? bit maka dilakukan pembagian A3 dengan 5Sumber5 7A3 N Sumber*. Casil pembagian akan disimpan pada register A1 sedangkan sisa pembagian akan disimpan pada regiser AC. (ika 5sumber5 bertipe 1@ bit maka dilakukan pembagian 43;A3 dengan 5Sumber5 743;A3 N Sumber*. Casil pembagian akan disimpan pada register A3 sedangkan sisa pembagian akan disimpan pada regiser 43. 2ontoh; .ntuk memeriksa apakah suatu bilangan merupakan kelipatan B atau bukan,
010
anda bisa membaginya dengan tiga. Bila merupakan kelipatan B, maka sisa pembagian akan 9, sebaliknya jika bukan kelipatan tiga, sisa pembagian tidak akan 9. -acro ini akan menjadikan A1F1 bila bilangan yang ditest merupakan kelipatan tiga dan sebaliknya akan bernilai 9. 1ipatB -A2#O Bil -O6 A3,Bil -O6 B3,B 4!6 B3 2-P A3,9 Y Apakah ada sisa pembagian J (' iga Y idak ada sisa , kelipatan B -O6 A1,9 iga ; -O6 A1,1 'D4-nemonic ; E$&E( +3a2e Stac2 <rameA ersedia pada ; ?9?? keatas Synta/ ; 'nter Operand1,operand0 pengaruh flag ; idak ada Hungsi ; .ntuk memesan tempat pada stack yang dibutuhkan oleh bahasa tingkat tinggi. -nemonic ; ES5 +EscapeA ersedia pada ; ?9?? keatas Synta/ ; 'S2 Operand1,Operand0 Pengaruh flag ; idak ada Hungsi ; Perintah ini digunakan terutama pada komputer yang mempunyai procesor lebih dari satu dan dirangkai secara paralel. Perintah 'S2 akan menyebabkan procesor yang sedang aktif dinonaktifkan sehingga procesor yang lain dapat digunakan. -nemonic ; 6*& +6altA ersedia pada ; ?9?? keatas Synta/ ; C1 Pengaruh flag ; idak ada
01B
Hungsi ; .ntuk menghentikan program atau membuat procesor dalam keadaan tidak aktif. Setelah mendapat perintah 'S2 ini, procesor harus mendapat interrupt dari luar atau direset untuk berjalan secara normal kembali. -nemonic ; )D)V +Signed Di:ideA ersedia pada ; ?9?? keatas Synta/ ; !4!6 Sumber Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; !4!6 digunakan untuk pembagian pada bilangan bertanda. Bila 5sumber5 bertipe ? bit maka dilakukan pembagian A3 dengan 5Sumber5 7A3 N Sumber*. Casil pembagian akan disimpan pada register A1 sedangkan sisa pembagian akan disimpan pada regiser AC. (ika sumber bertipe 1@ bit maka dilakukan pembagian 43;A3 dengan Sumber743;A3 N Sumber*. Casil pembagian akan disimpan pada register A3 sedangkan sisa pembagian akan disimpan pada regiser 43. 2ontoh; -O6 B1,19h -O6 A3,"19h !4!6 B1 Y A3 F 99HHh7"1* -nemonic ; )34* +Signed 3!ltiplyA ersedia pada ; ?9?? keatas Synta/ ; !-.1 Sumber $husus ?9B?@; !-.1 ujuan,Sumber !-.1 ujuan,Pengali,Sumber Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; !-.1 digunakan untuk perkalian pada bilangan bertanda. Bila 5sumber5 bertipe ? bit maka akan dilakukan perkalian pada register A1 dengan 5sumber5 kemudian hasilnya disimpan pada A3. Bila 5sumber5 bertipe 1@ bit maka akan dilakukan perkalian pada register A3 dengan 5sumber5 kemudian hasilnya disimpan pada 43;A3. 2ontoh;
018
-O6 A3,199h Y A3F199h -O6 B3,"0 Y B3FHHH'h !-.1 B3 Y 43FHHHHh, A3FH'99h -nemonic ; )$ +)np!t <rom PortA ersedia pada ; ?9?? keatas Synta/ ; !D Operand,DoPort Pengaruh flag ; idak ada Hungsi ; .ntuk mengambil data pada port. (ika 5Operand5 merupakan register A1 maka akan diambil data pada port sebanyak 1 byte, bila 5operand5 merupakan register A3 maka akan diambil data pada port sebanyak 1 +ord. 5DoPort5 mencatat nomor port yang akan dibaca datanya. 5DoPort5 bisa langsung diberi nilai bila nomor port diba+ah 0::. Bila nomor port melebihi 0:: maka 5DoPort5 harus berupa register 43 yang mencatat nomor port tersebut. 2ontoh; !nterrupt dari keyboard diatur oleh P!27Programmable !nterrupt 2ontroller* yang berada pada port 01h. (ika bit ke 1 dari port 01h bernilai 1, maka interupsi dari keyboard akan diabaikan. Do$ey -A2#O !D A1,01h O# A1,99999919b O. 01h,A1 'D4-nemonic ; )$5 +)ncrementA ersedia pada ; ?9?? keatas Synta/ ; !D2 ujuan Pengaruh flag ; OH, SH, PH, AH, PH Hungsi ; .ntuk menambah 5 ujuan5 dengan 1. Bila anda ingin menambah suatu register ataupun memory dengan 1, gunakanlah perintah !D2 ini karena selain lebih cepat, perintah !D2 juga menggunakan memory lebih sedikit dibandingkan dengan perintah A44. 2ontoh;
01:
.ntuk membuat suatu pengulangan, seperti pada perintah IHO# !;F1 O 19 4OI pada bahasa tingkat tinggi; 3O# A3,A3 .lang; 2-P A3,19 (' Selesai !D2 A3 (-P .lang -nemonic ; )$S +)np!t <rom Port &o StringA ersedia pada ; ?9?? keatas Synta/ ; !DS Operand,DoPort Pengaruh flag ; idak ada Hungsi ; .ntuk mengambil data dari 5DoPort5 yang dicatat oleh register 43 sebanyak 1 byte atau 1 +ord, sesuai dengan tipe 5operand5. (adi 5operand5 hanya berfungsi sebagai penunjuk besarnya data yang akan dibaca dari port. 4ata yang diambil dari port akan disimpan pada lokasi 'S;4!. (ika 4irection flag bernilai 97dengan 214* maka setelah intruksi !DS dijalankan register 4! akan ditambah secara otomatis, sebaliknya jika 4irection flag bernilai 17dengan S 4* maka register 4! akan dikurang secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah !DS ini. 2ontoh; -O6 43,10Bh -O6 23,B9 .lang; !DS A3,43 1OOP .lang -nemonic ; )$SB + )np!t String Byte <rom PortA ersedia pada ; ?9?? keatas Synta/ ; !DSB
01@
Pengaruh flag ; idak ada Hungsi ; .ntuk mengambil data dari nomor port yang dicatat oleh register 43 sebanyak 1 byte. 4ata yang diambil dari port akan disimpan pada lokasi 'S;4!. (ika 4irection flag bernilai 97dengan 214* maka setelah intruksi !DS dijalankan register 4! akan ditambah dengan 1 secara otomatis, sebaliknya jika 4irection flag bernilai 17dengan S 4* maka register 4! akan dikurang dengan 1 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah !DSB ini. 2ontoh; #'P !DSB -nemonic ; )$SD ersedia pada ; ?9?? keatas Synta/ ; !DSW Pengaruh Hlag ; idak ada Hungsi ; .ntuk mengambil data dari nomor port yang dicatat oleh register 43 sebanyak 1 Word. 4ata yang diambil dari port akan disimpan pada lokasi 'S;4!. (ika 4irection flag bernilai 97dengan 214* maka setelah intruksi !DS dijalankan register 4! akan ditambah dengan 0 secara otomatis, sebaliknya jika 4irection flag bernilai 17dengan S 4* maka register 4! akan dikurang dengan 0 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah !DSW ini. 2ontoh; #'P !DSW -nemonic ; )$& +)nterr!ptA ersedia pada ; ?9?? keatas Synta/ ; !D Do!nt Pengaruh flag ; !H, H Hungsi ; .ntuk membangkitkan soft+are interrupt yang bernomor 9 sampai 0::. Setiap terjadi suatu interupsi data flags, 2S dan !P akan disimpan pada
01A
stack. 4ata ini selanjutmya digunakan sebagai alamat kembali setelah komputer melakukan suatu rutin atau interrupt handler. -nemonic ; )$&O +)nterr!pt )# O:er#lo0A ersedia pada ; ?9?? keatas Synta/ ; !D O Pengaruh Hlag ; idak ada Hungsi ; (ika O,erflo+ flag bernilai 1, maka !D O akan melaksanakan interrupt 98h, sebaliknya jika O,erflo+ flag bernilai 9 maka interrupt 98h tidak akan dilaksanakan. !D O hampir sama dengan !D hanya !D O khusus untuk membangkitkan interrupt 98h jika OHF1. -nemonic ; )(E& +)nterr!pt (et!rnA ersedia pada ; ?9?? keatas Synta/ ; !#' Pengaruh Hlag ; OH, 4H, !H, H, SH, PH, AH, PH, 2H Hungsi ; 4igunakan untuk mengakhiri suatu interrupt handler. !#' akan mengambil !P, 2S dan Hlags yang disimpan pada stack pada saat terjadi suatu interupsi7!D *. -nemonic ; .A +.!mp )# Abo:eA ersedia pada ; ?9?? keatas Synta/ ; (A ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila 2HF9 dan PHF9. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte kecuali pada ?9B?@ yang mampu mencapai "B0A@? dan GB0A@A. (A identik dengan perintah (DB' yang biasanya digunakan setelah dilakukan suatu perbandingan dengan 2-P. 2atatan ; (A dan (DB' melakukan operasi pada bilangan tidak bertanda. 2ontoh;
01?
2-P A3,B3 (A Besar Pada perintah diatas, loncatan menuju label 5besar5 akan dilakukan bila pada perintah 2-P diatasnya register A3 lebih besar dari register B3. Perintah (A beroperasi pada bilangan tidak bertanda atau bilangan yang tidak mengenal tanda minus. -nemonic ; .AE +.!mp )# Abo:e or ER!alA ersedia pada ; ?9?? keatas Synta/ ; (A' ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila 2HF9. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (A' identik dengan perintah (DB yang biasanya digunakan setelah dilakukan suatu perbandingan dengan 2-P. 2atatan ; (A' dan (DB melakukan operasi pada bilangan tidak bertanda. 2ontoh; 2-P A3,B3 (A' BesarSama Pada perintah diatas, loncatan menuju label 5BesarSama5 akan dilakukan bila pada perintah 2-P diatasnya register A3 lebih besar atau sama dengan register B3. Perintah (A' beroperasi pada bilangan tidak bertanda atau bilangan yang tidak mengenal tanda minus. -nemonic ; .B +.!mp )# Bello0A ersedia pada ; ?9?? keatas Synta/ ; (B ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila 2HF1. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (B identik dengan
01E
perintah (DA' dan (2 . 2atatan ; (B dan (DA' melakukan operasi pada bilangan tidak bertanda. 2ontoh; 2-P A3,B3 (B $ecil Pada perintah diatas, loncatan menuju label 5$ecil5 akan dilakukan bila pada perintah 2-P diatasnya register A3 lebih kecil dibandingkan dengan register B3. -nemonic ; .BE +.!mp )# Belo0 or ER!alA ersedia pada ; ?9?? keatas Synta/ ; (B' ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila 2HF1 atau PHF1. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (B' identik dengan perintah (DA. 2atatan ; (B' dan (DA melakukan operasi pada bilangan tidak bertanda. 2ontoh; 2-P A3,B3 (B' $ecilSama Pada perintah diatas, loncatan menuju label 5$ecilSama5 akan dilakukan bila pada perintah 2-P diatasnya register A3 lebih kecil atau sama dengan register B3. -nemonic ; .5 +.!mp On 5arryA ersedia pada ; ?9?? keatas Synta/ ; (2 ujuan Pengaruh flag ; idak Ada Hungsi ; Sama dengan (B dan (DA'.
009
-nemonic ; .59Q +.!mp )# 59 K A ersedia pada ; ?9?? keatas Synta/ ; (23P ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila register 23F9. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. 2ontoh; -O6 AC,99 Y 1'A 43,Buffer Y -asukan string dari keyboard !D 01h Y -O6 23,BufferV1W Y 23 F banyaknya masukan string (23P dk Y (ika tidak ada, lompat ke 5 dk5 -nemonic ; .E +.!mp ER!alA ersedia pada ; ?9?? keatas Synta/ ; (' ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5 ujuan5 bila PHF1. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (' identik dengan (P. 2ontoh; 2-P A3,B3 (' Sama Pada perintah diatas, loncatan menuju label 5Sama5 akan dilakukan bila pada perintah 2-P diatasnya register A3 sama dengan register B3 yang menyebabkan Rero flag bernilai 1. -nemonic ; .' +.!mp )# 'reaterA ersedia pada ; ?9?? keatas
001
Synta/ ; (& ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila PHF9 dan SHFOH. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (& identik dengan perintah (D1'. 2atatan ; (& dan (D1' melakukan operasi pada bilangan bertanda. 2ontoh; 2-P A3,B3 (& Besar Pada perintah diatas, loncatan menuju label 5Besar5 akan dilakukan bila pada perintah 2-P diatasnya register A3 lebih besar dibandingkan dengan register B3. -nemonic ; .'E +.!mp )# 'reater or ER!alA ersedia pada ; ?9?? keatas Synta/ ; (&' ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila SHFOH. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (&' identik dengan perintah (D1. 2atatan ; (&' dan (D1 melakukan operasi pada bilangan bertanda. 2ontoh; 2-P A3,B3 (&' BesarSama Pada perintah diatas, loncatan menuju label 5BesarSama5 akan dilakukan bila pada perintah 2-P diatasnya register A3 lebih besar atau sama dengan register B3. -nemonic ; .* +.!mp )# *ess &hanA ersedia pada ; ?9?? keatas Synta/ ; (1 ujuan
000
Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila SH tidak sama dengan OH. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (1 identik dengan perintah (D&'. 2atatan ; (1 dan (D&' melakukan operasi pada bilangan bertanda. 2ontoh; 2-P A3,B3 (1 $ecil Pada perintah diatas, loncatan menuju label 5$ecil5 akan dilakukan bila pada perintah 2-P diatasnya register A3 lebih kecil dibandingkan dengan register B3. -nemonic ; .*E +.!mp )# *ess &han or ER!alA ersedia pada ; ?9?? keatas Synta/ ; (1' ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila PHF1 atau SH tidak sama dengan OH. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (1' identik dengan perintah (D&. 2atatan ; (1' dan (D& melakukan operasi pada bilangan bertanda. 2ontoh; 2-P A3,B3 (1' $ecilSama Pada perintah diatas, loncatan menuju label 5$ecilSama5 akan dilakukan bila pada perintah 2-P diatasnya register A3 lebih kecil atau sama dengan register B3.
00B
Synta/ ; (-P ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan lompatan menuju 5 ujuan5 yang dapat berupa suatu label maupun alamat memory. idak seperti lompatan bersyarat, perintah (-P dapat melakukan lompatan ke segment lain. 2ontoh; (-P Proses -nemonic ; .$A +.!mp )# $ot Abo:eA ersedia pada ; ?9?? keatas Synta/ ; (DA ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (B'. -nemonic ; .$AE +.!mp )# $ot Abo:e or ER!alA ersedia pada ; ?9?? keatas Synta/ ; (DA' ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (B. -nemonic ; .$B +.!mp )# $ot Bello0A ersedia pada ; ?9?? keatas Synta/ ; (DB ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (A'. -nemonic ; .$BE +.!mp )# $ot Bello0 or ER!alA ersedia pada ; ?9?? keatas Synta/ ; (DB' ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (A.
008
-nemonic ; .$5 +.!mp $ot 5arryA ersedia pada ; ?9?? keatas Synta/ ; (D2 ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (DB. -nemonic ; .$E +.!mp $ot ER!alA ersedia pada ; ?9?? keatas Synta/ ; (D' ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila PHF9. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (D' identik dengan perintah (DP. 2ontoh; 2-P A3,B3 (D' idakSama Pada perintah diatas, loncatan menuju label 5 idakSama5 akan dilakukan bila pada perintah 2-P diatasnya register A3 tidak sama dengan register B3. -nemonic ; .$' +.!mp )# $ot 'reaterA ersedia pada ; ?9?? keatas Synta/ ; (D& ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (1'. -nemonic ; .$'E +.!mp )# $ot 'reater or ER!alA ersedia pada ; ?9?? keatas Synta/ ; (D&' ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (1.
00:
-nemonic ; .$* +.!mp )# $ot *ess &hanA ersedia pada ; ?9?? keatas Synta/ ; (D1 ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (&'. -nemonic ; .$*E +.!mp )# $ot *ess or ER!alA ersedia pada ; ?9?? keatas Synta/ ; (D1' ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (&. -nemonic ; .$O +.!mp On $ot O:er#lo0A ersedia pada ; ?9?? keatas Synta/ ; (DO ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila OHF9. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. 2atatan ; (DO melakukan operasi pada bilangan bertanda. -nemonic ; .$P +.!mp On $o ParityA ersedia pada ; ?9?? keatas Synta/ ; (DP ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila PHF9. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (DP identik dengan perintah (PO. 2atatan ; (DP dan (PO melakukan operasi pada bilangan tidak bertanda.
00@
-nemonic ; .$S +.!mp On $o SignA ersedia pada ; ?9?? keatas Synta/ ; (DS ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila SHF9. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. 2atatan ; (DS melakukan operasi pada bilangan bertanda. -nemonic ; .$Q +.!mp On $ot QeroA ersedia pada ; ?9?? keatas Synta/ ; (DP ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (D'. -nemonic ; .O +.!mp On O:er#lo0A ersedia pada ; ?9?? keatas Synta/ ; (O ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila OHF1. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. 2atatan ; (O melakukan operasi pada bilangan bertanda. -nemonic ; .P +.!mp On ParityA ersedia pada ; ?9?? keatas Synta/ ; (P ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila PHF1. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. (P identik dengan perintah (P'.
00A
-nemonic ; .PE +.!mp On Parity E:enA ersedia pada ; ?9?? keatas Synta/ ; (P' ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (P. -nemonic ; .PO +.!mp On Parity OddA ersedia pada ; ?9?? keatas Synta/ ; (PO ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan (DP. -nemonic ; .S +.!mp On SignA ersedia pada ; ?9?? keatas Synta/ ; (S ujuan Pengaruh flag ; idak Ada Hungsi ; -elakukan suatu loncatan menuju 5tujuan5 bila SHF1. 5 ujuan5 dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi "10? dan G10A byte. 2atatan ; (S melakukan operasi pada bilangan bertanda. -nemonic ; .Q +.!mp On QeroA ersedia pada ; ?9?? keatas Synta/ ; (P ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan ('. -nemonic ; *A6< +*oad <lags )nto A6 (egisterA ersedia pada ; ?9?? keatas Pengaruh flag ; idak Ada Synta/ ; 1ACH
00?
Hungsi ; .ntuk mengcopykan 2H, PH, AH, PH dan SH yang terletak pada bit ke 9, 0, 8, @ dan A dari flags register menuju register AC pada bit yang sesuai79, 0, 8, @ dan A*. 2ontoh; 4engan fungsi ini, anda bisa menyimpan ? bit rendah dari flags register untuk menghindari perubahan akibat dari suatu proses, seperti; 1ACH Y Simpan flags pada AC P.SC A3 Y Dilai AC disimpan ke stack G""""""""G K Proses K G""""""""G POP A3 Y $eluarkan AC dari stack SACH Y -asukkan ke flag register -nemonic ; *DS +*oad Pointer 4sing DS (egisterA ersedia pada ; ?9?? keatas Synta/ ; 14S Operand,-emB0 Pengaruh flag ; idak Ada Hungsi ; .ntuk menyimpan 4ouble Word dari memory. 1@ bit rendah akan disimpan pada 5Operand5 sedangkan 1@ bit tingginya akan disimpan pada register 4S. 5-emB05 mencatat lokasi dari suatu memory yang didefinisikan dengan tipe 4ouble Word744*. 2ontoh; 4ata; (-P Proses abel 44 J,J,J Proses; 14S B3, abel Setelah intruksi diatas dijalankan, maka pasangan register 4S;B3 akan mencatat alamat dari ,ariabel 5 abel5.
-nemonic
00E
ersedia pada ; ?9?? keatas Synta/ ; 1'A Operand,-em1@ Pengaruh flag ; idak Ada Hungsi ; .ntuk mendapatkan alamat efektif atau offset dari 5-em1@5 dimana 5Operand5 merupakan suatu register 1@ bit. Perintah 1'A hampir sama dengan perintah OHHS' yang juga digunakan untuk mendapatkan offset dari suatu memory. Perintah 1'A lebih fleksibel untuk digunakan dibandingkan dengan perintah OHHS' karena dengan 1'A kita bisa memberikan tambahan nilai pada 5-em1@5. 2ontoh; 4ata ;(-P Proses $al I910B8:@A?EabcdI Proses; -O6 S!,19 1'A B3,$alVS!W 4engan perintah diatas, register B3 akan mencatat offset ke 19 dari $al. -nemonic ; *ES +*oad Pointer 4sing ES (egisterA ersedia pada ; ?9?? keatas Synta/ ; 1'S Operand,-emB0 Pengaruh flag ; idak Ada Hungsi ; .ntuk menyimpan 4ouble Word dari memory. 1@ bit rendah akan disimpan pada 5Operand5 sedangkan 1@ bit tingginya akan disimpan pada register 'S. 5-emB05 mencatat lokasi dari suatu memory yang didefinisikan dengan tipe 4ouble Word744*. 2ontoh; 4ata; (-P Proses abel 44 J,J,J Proses; 1'S B3, abel Setelah intruksi diatas dijalankan, maka pasangan register 'S;B3 akan mencatat alamat dari ,ariabel 5 abel5.
0B9
-nemonic ; *O5% +*oc2 &he B4SA ersedia pada ; ?9?? keatas Synta/ ; 1O2$ Operand Pengaruh flag ; idak Ada Hungsi ; Perintah ini digunakan terutama pada komputer yang mempunyai procesor lebih dari satu. Perintah 1O2$ mengunci suatu area terhadap pemakaian oleh mikroprocesor lainnya. 2atatan; Perintah 32C& selalu mengaktifkan 1O2$. -nemonic ; *ODSB +*oad A Byte <rom String )nto A*A ersedia pada ; ?9?? keatas Synta/ ; 1O4SB Pengaruh flag ; idak Ada Hungsi ; .ntuk mengcopy data 1 byte dari alamat 4S;S! ke register A1. -nemonic ; *OOP ersedia pada ; ?9?? keatas Synta/ ; 1OOP ujuan Pengaruh flag ; idak Ada Hungsi ; .ntuk melakukan suatu proses yang berulang 71ooping* dengan 23 sebagai counternya. Perintah 1OOP akan mengurangkan 23 dengan 1 kemudian dilihat apakah 23 telah mencapai nol. Proses looping akan selesai jika register 23 telah mencapai nol. Oleh karena inilah maka jika kita menjadikan 23F9 pada saat pertama kali, kita akan mendapatkan suatu pengulangan yang terbanyak karena pengurangan 9"1F"17HHHH*. 2atatan; 1OOP hanya dapat melakukan lompatan menuju 5 ujuan5 bila jaraknya tidak lebih dari "10? dan G10A byte. 2ontoh; 3O# 23,23 Y -elakukan pengulangan .lang; Y sebanyak HHHH kali 1OOP .lang Y
0B1
-nemonic ; *OOPE + *oop Dhile ER!alA ersedia pada ; ?9?? keatas Synta/ ; 1OOP' ujuan Pengaruh flag ; idak Ada Hungsi ; .ntuk melakukan pengulangan selama register 23 tidak sama dengan 9 dan PHF1. 1OOP' hanya dapat melakukan lompatan menuju 5 ujuan5 bila jaraknya tidak lebih dari "10? dan G10A byte. 1OOP' identik dengan 1OOPP. -nemonic ; *OOP$E +*oop Dhile $ot ER!alA ersedia pada ; ?9?? keatas Synta/ ; 1OOPD' ujuan Pengaruh flag ; idak Ada Hungsi ; .ntuk melakukan pengulangan selama register 23 tidak sama dengan 9 dan PHF9. 1OOPD' hanya dapat melakukan lompatan menuju 5 ujuan5 bila jaraknya tidak lebih dari "10? dan G10A byte. 1OOP' identik dengan 1OOPDP. -nemonic ; *OOP$Q +*oop Dhile $ot QeroA ersedia pada ; ?9?? keatas Synta/ ; 1OOPDP ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan 1OOPD'. -nemonic ; *OOPQ ersedia pada ; ?9?? keatas Synta/ ; 1OOPP ujuan Pengaruh flag ; idak Ada Hungsi ; !dentik dengan 1OOP'. -nemonic ; 3OV +3o:eA ersedia pada ; ?9?? keatas Synta/ ; -O6 ujuan,Sumber Pengaruh flag ; idak Ada
0B0
Hungsi ; .ntuk mengcopykan isi 5Sumber5 ke 5 ujuan5. Antara 5Sumber5 dan 5 ujuan5 harus mempunyai tipe data yang sama, seperti A1 dan B1, A3 dan B3. Pada perintah -O6 ini harus anda perhatikan bah+a; " Segment register tidak bisa langsung diisi nilainya, seperti; -O6 'S,9B?99h .ntuk masalah seperti ini anda bisa menggunakan register general purpose sebagai perantara, seperti; -O6 A3,9B?99h -O6 'S,A3 " #egister 2S sebaiknya tidak digunakan sebagai 5 ujuan5 karena hal ini akan mengacaukan program anda. " Pengcopyan data antar segment register tidak bisa digunakan, seperti; -O6 'S,4S .ntuk masalah seperti ini anda bisa menggunakan register general purpose atau stack sebagai perantara, seperti; -O6 A3,4S -O6 'S,A3 atau; P.SC 4S POP 'S " Pengcopyan data antar lokasi memory, seperti; -O6 A,B .ntuk masalah seperti ini anda bisa menggunakan suatu register sebagai perantara, seperti;
0BB
-O6 A3,B -O6 A,A3 -nemonic ; 3OVSD +3o:e String Byte By ByteA ersedia pada ; ?9?? keatas Synta/ ; -O6SB Pengaruh flag ; idak Ada Hungsi ; .ntuk mengcopy data 1 byte dari alamat 4S;S! ke alamat 'S;4!. Bila 4HF97214* maka setelah intruksi -O6SB dijalankan, register S! dan 4! akan ditambah dengan 1 sebaliknya jika 4HF17S 4* maka register S! dan 4! akan dikurang dengan 1. -nemonic ; 3OVSD +3o:e String Dord By DordA ersedia pada ; ?9?? keatas Synta/ ; -O6SW Pengaruh flag ; idak Ada Hungsi ; .ntuk mengcopy data 1 Word dari alamat 4S;S! ke alamat 'S;4!. Bila 4HF97214* maka setelah intruksi -O6SW dijalankan, register S! dan 4! akan ditambah dengan 0 sebaliknya jika 4HF17S 4* maka register S! dan 4! akan dikurang dengan 0. -nemonic ; 34* +3!ltiplyA ersedia pada ; ?9?? keatas Synta/ ; -.1 Sumber Pengaruh flag ; OH, 2H Hungsi ; Bila 5Sumber5 bertipe ? bit maka akan dilakukan perkalian antara 5Sumber5 dengan A1. Casilnya disimpan pada register A3. Bila 5Sumber5 bertipe 1@ bit maka akan dilakukan perkalian antara 5Sumber5 dengan A3. Casilnya disimpan pada pasangan register 43;A3. 2ontoh; -.1 BC -.1 B3 Y A3 F BC O A1 Y 43;A3 F B3 O A3
0B8
-nemonic ; $E' +$egateA ersedia pada ; ?9?? keatas Synta/ ; D'& Operand Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; .ntuk mengubah 5Operand5 menjadi negatif. 2ontoh; -O6 BC,1 Y BC F 91h D'& BC Y BC F HHh -nemonic ; $O& ersedia pada ; ?9?? keatas Synta/ ; DO Operand Pengaruh flag ; idak Ada Hungsi ; -embalikkan bit pada operand. (ika bit operand bernilai 9 akan dijadikan 1 sebaliknya jika 1 akan dijadikan 9. 2ontoh; -O6 A1,19919911b DO A1 Y A1 F 91191199b -nemonic ; O( ersedia pada ; ?9?? keatas Synta/ ; O# ujuan,Sumber Pengaruh flag ; OH, SH, PH, PH, 2H Hungsi ; -elakukan logika O# antara 5 ujuan5 dan 5Sumber5. Casil dari operasi O# diletakkan pada 5 ujuan5. !nstruksi O# umumnya digunakan untuk menjadikan suatu bit menjadi 1. 2ontoh; O# A1,99999991b Y (adikan bit ke 9 dari A1 menjadi 1 -nemonic ; O4& +O!tp!t to PortA ersedia pada ; ?9?? keatas Synta/ ; O. DoPort,Operand
0B:
Pengaruh flag ; idak ada Hungsi ; .ntuk memasukkan 1 byte atau 1 +ord dari 5operand5 ke 5DoPort5 sesuai dengan tipe data 5operand5. (ika 5Operand5 merupakan register A1 maka akan dikirimkan data pada port sebanyak 1 byte, bila 5operand5 merupakan register A3 maka akan dikirimkan data pada port sebanyak 1 +ord. 5DoPort5 bisa langsung diberi nilai bila nomor port diba+ah 0::. Bila nomor port melebihi 0:: maka 5DoPort5 harus berupa register 43 yang mencatat nomor port tersebut. -nemonic ; O4&S +O!tp!t String &o PortA ersedia pada ; ?9?? keatas Synta/ ; O. S DoPort,Operand Pengaruh flag ; idak ada Hungsi ; .ntuk mengirimkan data dari 5operand5 ke 5DoPort5 yang dicatat oleh register 43 sebanyak 1 byte atau 1 +ord, sesuai dengan tipe 5operand5. (adi 5operand5 hanya berfungsi sebagai penunjuk besarnya data yang akan dikirimkan menuju port. 4ata yang akan dikirimkan menuju port disimpan pada lokasi 'S;S!. (ika 4irection flag bernilai 97dengan 214* maka setelah intruksi O. S dijalankan register S! akan ditambah secara otomatis, sebaliknya jika 4irection flag bernilai 17dengan S 4* maka register S! akan dikurang secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah O. S ini. -nemonic ; O4&SB +O!tp!t String Byte &o PortA ersedia pada ; ?9?? keatas Synta/ ; O. SB Pengaruh flag ; idak ada Hungsi ; .ntuk memasukkan data dari lokasi 4S;S! ke nomor port yang dicatat oleh register 43 sebanyak 1 byte. (ika 4irection flag bernilai 97dengan 214* maka setelah intruksi O. SB dijalankan register S! akan ditambah dengan 1 secara otomatis, sebaliknya jika 4irection flag bernilai 17dengan S 4* maka register S! akan dikurang dengan 1 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah O. SB ini.
0B@
-nemonic ; O4&SD +O!tp!t String Dyte &o PortA ersedia pada ; ?9?? keatas Synta/ ; O. SW Pengaruh flag ; idak ada Hungsi ; .ntuk memasukkan data dari lokasi 4S;S! ke nomor port yang dicatat oleh register 43 sebanyak 1 +ord. (ika 4irection flag bernilai 97dengan 214* maka setelah intruksi O. SW dijalankan register S! akan ditambah dengan 0 secara otomatis, sebaliknya jika 4irection flag bernilai 17dengan S 4* maka register S! akan dikurang dengan 0 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah O. SW ini. -nemonic ; POP +Pop A Dord <rom Stac2A ersedia pada ; ?9?? keatas Synta/ ; POP ujuan Pengaruh flag ; idak ada Hungsi ; .ntuk mengambil data 1 +ord dari stack7SS;SP* dan disimpan pada 5 ujuan5. Setelah intruksi POP dijalankan register SP akan ditambah dengan 0. 2ontoh; P.SC 4S POP 'S -nemonic ; POPA +Pop All 'eneral P!rpose (egistersA ersedia pada ; ?9?? keatas Synta/ ; POPA Pengaruh flag ; idak ada Hungsi ; .ntuk mengambil ? +ord dari stack menuju register berturut" turut 4!, S!, BP, SP, B3, 43, 23 dan A3. 4engan P.SCA program anda akan berjalan lebih cepat dan efesian dibandingkan bila anda menyimpannya dengan cara;
0BA
4! S! BP SP B3 43 23 A3
-nemonic ; POP< +Pop <lags O## Stac2A ersedia pada ; ?9?? keatas Synta/ ; POPH Pengaruh flag ; OH, 4H, !H, H, SH, PH, AH, PH, 2H Hungsi ; .ntuk mengambil 1 +ord dari stack ke flags registers. Setelah intruksi POPH dijalankan register SP akan ditambah dengan 0. -nemonic ; P4S6 +P!sh Operand Onto Stac2A ersedia pada ; ?9?? keatas Synta/ ; P.SC Sumber Pengaruh flag ; idak ada Hungsi ; .ntuk menyimpan data 1 +ord dari 5Sumber5 ke stack7SS;SP*. 5Sumber5 merupakan operand yang bertipe 1@ bit. Setelah intruksi P.SC dijalankan register SP akan dikurang dengan 0. -nemonic ; P4S6< +P!sh <lags Onto Stac2A ersedia pada ; ?9?? keatas Synta/ ; P.SCH Pengaruh flag ; idak ada Hungsi ; .ntuk menyimpan flags registers ke stack. !ntruksi ini merupakan kebalikan dari intruksi POPH. Setelah intruksi P.SCH dijalankan register SP akan dikurang dengan 0.
0B?
-nemonic ; (5* +(otate &hro!gh 5arry *e#tA ersedia pada ; ?9?? keatas Synta/ ; #21 Operand,#eg Pengaruh flag ; OH, 2H Hungsi ; .ntuk memutar 5Operand5 sebanyak 5#eg5 kali ke kiri melalui 2H. Bit yang tergeser keluar dari kiri akan dimasukkan pada 2H dan nilai 2H akan dimasukkan pada bit terkanan dari 5Operand5. G""""G G""""""""""""""""G K 2H K=""G Operand K="G G"G""G G""""""""""""""""G K G""""""""""""""""""""""""""G Pada mikroprosesor ?9?? 5#eg5 haruslah berupa register 21 atau 23 bila perputaran yang dilakukan terhadap 5Operand5 lebih dari 1. 2ontoh; -O6 B1,99199119b Y -isalkan 2HF1 #21 B1,1 Y B1 F 91991191b 2HF9 -nemonic ; (5( +(otate thro!gh 5arry (ightA ersedia pada ; ?9?? keatas Synta/ ; #2# Operand,#eg Pengaruh flag ; OH, 2H Hungsi ; .ntuk memutar 5Operand5 sebanyak 5#eg5 kali ke kanan melalui 2H. Bit yang tergeser keluar dari kanan akan dimasukkan pada 2H dan nilai 2H akan dimasukkan pada bit terkiri dari 5Operand5. G""""""""""""""""G G""""G G>K Operand G""">K 2H K K G""""""""""""""""G G""G"G G""""""""""""""""""""""""""G
0BE
Pada mikroprosesor ?9?? 5#eg5 haruslah berupa register 21 atau 23 bila perputaran yang dilakukan terhadap 5Operand5 lebih dari 1. 2ontoh; -O6 B1,99199119b Y -isalkan 2HF1 #2# B1,1 Y B1 F 19919911b 2HF9
-nemonic ; (EP +(epeatA ersedia pada ; ?9?? keatas Synta/ ; #'P !nstruksi Pengaruh flag ; idak ada Hungsi ; -elakukan 5intruksi5 sebanyak 23 kali. !ntruksi #'P biasanya diikuti oleh !ntruksi yang berhubungan dengan operasi pada string. -nemonic ; (EPE +(epeat Dhile ER!alA ersedia pada ; ?9?? keatas Synta/ ; #'P' !ntruksi Pengaruh flag ; idak ada Hungsi ; -elakukan 5intruksi5 sebanyak 23 kali atau sampai Rero flag bernilai 1. !ntruksi #'P' biasanya diikuti oleh !ntruksi yang berhubungan dengan operasi pada string. 2ontoh; -O6 23,099 #'P' 2-PS String1,String0 !ntruksi diatas akan membandingkan string1 dengan string0 sebanyak 099 kali atau sampai ditemukan adanya ketidaksamaan antara String1 dan String0 yang membuat Rero flag bernilai 1.
089
-nemonic ; (EP$E +(epeat Dhile $ot ER!alA ersedia pada ; ?9?? keatas Synta/ ; #'PD' !nstruksi Pengaruh flag ; idak ada Hungsi ; -elakukan 5intruksi5 sebanyak 23 kali atau sampai Rero flag bernilai 9. !ntruksi #'PD' biasanya diikuti oleh !ntruksi yang berhubungan dengan operasi pada string. 2ontoh; -O6 23,099 #'PD' 2-PS String1,String0 !ntruksi diatas akan membandingkan string1 dengan string0 sebanyak 099 kali atau sampai ditemukan adanya kesamaan antara String1 dan String0 yang membuat Rero flag bernilai 9.
-nemonic ; (EP$Q +(epeat Dhile $ot QeroA ersedia pada ; ?9?? keatas Synta/ ; #'PDP !nstruksi Pengaruh flag ; idak ada Hungsi ; !dentik dengan #'PD'. -nemonic ; (EPQ +(epeat Dhile QeroA ersedia pada ; ?9?? keatas Synta/ ; #'PP !nstruksi Pengaruh flag ; idak ada Hungsi ; !dentik dengan #'P'.
-nemonic ; (E& +(et!rn <rom Proced!reA ersedia pada ; ?9?? keatas Synta/ ; #' VSiReW
081
Pengaruh flag ; idak ada Hungsi ; #' akan mengambil alamat pada stack untuk melakukan lompatan pada alamat tersebut. #' biasanya diletakkan pada akhir dari suatu procedure yang dipanggil dengan 2A11 71ihat 2A11*. Bila pada perintah #' diberi parameter, maka paramter itu akan digunakan sebagai angka tambahan dalam mengambil data pada stack. 2ontoh; #' 0
-nemonic ; (O* +(otate *e#tA ersedia pada ; ?9?? keatas Synta/ ; #O1 Operand,#eg Pengaruh flag ; OH, 2H Hungsi ; .ntuk memutar 5Operand5 sebanyak 5#eg5 kali ke kiri. Bit yang tergeser keluar dari kiri akan dimasukkan pada 2H dan pada bit terkanan dari 5Operand5. G""""G G""""""""""""""""G K 2H K=""G"G Operand K="G G""""G K G""""""""""""""""G K G"""""""""""""""""""""G Pada mikroprosesor ?9?? 5#eg5 haruslah berupa register 21 atau 23 bila perputaran yang dilakukan terhadap 5Operand5 lebih dari 1. 2ontoh; -O6 B1,99199119b Y -isalkan 2HF1 #O1 B1,1 Y B1 F 91991199b 2HF9 -nemonic ; (O( +(otate (ightA ersedia pada ; ?9?? keatas
080
Synta/ ; #O# Operand,#eg Pengaruh flag ; OH, 2H Hungsi ; .ntuk memutar 5Operand5 sebanyak 5#eg5 kali ke kanan. Bit yang tergeser keluar dari kanan akan dimasukkan pada 2H dan pada bit terkiri dari 5Operand5. G""""""""""""""""G G""""G G>K Operand G"G"">K 2H K K G""""""""""""""""G K G""""G G""""""""""""""""""""G Pada mikroprosesor ?9?? 5#eg5 haruslah berupa register 21 atau 23 bila perputaran yang dilakukan terhadap 5Operand5 lebih dari 1. 2ontoh; -O6 B1,99199119b Y -isalkan 2HF1 #O# B1,1 Y B1 F 99919911b 2HF9 -nemonic ; SA6< +Store A6 into <lag (egisterA ersedia pada ; ?9?? keatas Synta/ ; SACH Pengaruh flag ; SH, PH, AH, PH, 2H Hungsi ; .ntuk mengcopykan nilai AC pada ? bit rendah dari flag register, yaitu; 2H, PH, AH, PH dan SH. !ntruksi ini merupakan kebalikan dari !ntruksi 1ACH. -nemonic ; SA* +Arithmatic Shi#t *e#tA ersedia pada ; ?9?? keatas Synta/ ; SA1 Operand,#eg Pengaruh flag ; OH, SH, PH, PH, 2H Hungsi ; .ntuk menggerser 5Operand5 sebanyak 5#eg5 kali ke kiri71ihat SC1*.
08B
-nemonic ; SBB +S!bstract Dith 5arryA ersedia pada ; ?9?? keatas Synta/ ; SBB ujuan,Sumber Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; .ntuk mengurangkan 5Sumber5 dengan 5 ujuan5 dan 2arry Hlag 71Fon, 9Foff*, hasilnya diletakkan pada 5 ujuan5 7 ujuanF ujuan"Sumber"2H*. -nemonic ; S5ASB +Scan String <or ByteA ersedia pada ; ?9?? keatas Synta/ ; S2ASB Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; .ntuk membandingkan isi register A1 dengan data pada alamat 'S;4!. -nemonic ; S5ASD +Scan String #or DordA ersedia pada ; ?9?? keatas Synta/ ; S2ASW Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; .ntuk membandingkan isi register A3 dengan data pada alamat 'S;4!. -nemonic ; S6* +Shi#t *e#tA ersedia pada ; ?9?? keatas Pengaruh flag ; OH, SH, PH, PH, 2H Synta/ ; SC1 Operand,#eg Hungsi ; .ntuk menggeser bit dari 5operand5 sebanyak 5#eg5 kali ke kiri. Bila pergeseran yang dilakukan lebih dari 1 kali maka 5#eg5 harus berupa regisrer 21 atau 23. 2ontoh; -O6 B1,99999991b SC1 B1,1 Y B1F99999919b
088
4engan menggeser n kali kekiri adalah sama bila bilangan tersebut dikali dengan 0 pangkat n. -nemonic ; S6( +Shi#t (ightA ersedia pada ; ?9?? keatas Synta/ ; SC# Operand,#eg Pengaruh flag ; OH, SH, PH, PH, 2H Hungsi ; .ntuk menggeser bit dari 5operand5 sebanyak 5#eg5 kali ke kanan. Bila pergeseran yang dilakukan lebih dari 1 kali maka 5#eg5 harus berupa regisrer 21 atau 23. 2ontoh; -O6 B1,99999199b SC# B1,1 Y B1F99999919b 4engan menggeser n kali kekanan adalah sama bila bilangan tersebut dibagi dengan 0 pangkat n. -nemonic ; S&5 +Set 5arry <lagA ersedia pada ; ?9?? keatas Synta/ ;S 2 Pengaruh flag ; 2H Hungsi ; .ntuk menjadikan 2arry flag menjadi 1. -nemonic ; S&D +Set Direction <lagA ersedia pada ; ?9?? keatas Synta/ ;S 4 Pengaruh flag ; 4H Hungsi ; .ntuk menjadikan 4irection flag men jadi 1. !ntruksi ini merupakan kebalikan dari intruksi 214 7lihat 214*. -nemonic ; S&) +Set )nterr!pt <lagA ersedia pada ; ?9?? keatas
08:
Synta/ ;S ! Pengaruh flag ; !H Hungsi ; .ntuk membuat !nterrupt flag menjadi 1 agar interupsi dapat terjadi lagi. !ntruksi ini merupakan kebalikan dari intruksi 21! 7lihat 21!*. -nemonic ; S&OSB +Store A* A ersedia pada ; ?9?? keatas Synta/ ; S OSB Pengaruh flag ; idak ada Hungsi ; .ntuk mengcopykan isi register A1 pada alamat 'S;4!. (ika 4irection flag bernilai 97dengan 214* maka se telah intruksi S OSB dijalankan register 4! akan ditambah dengan 1 secara otomatis, sebaliknya jika 4irection flag bernilai 17dengan S 4* maka register 4! akan dikurang dengan 1 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah S OSB ini. -nemonic ; S&OSD +Store Dord in A9 at StringA ersedia pada ; ?9?? keatas Synta/ ; S OSW Pengaruh flag ; idak ada Hungsi ; .ntuk mengcopykan isi register A3 pada alamat 'S;4!. (ika 4irection flag bernilai 97dengan 214* maka se telah intruksi S OSW dijalankan register 4! akan ditambah dengan 0 secara otomatis, sebaliknya jika 4irection flag bernilai 17dengan S 4* maka register 4! akan dikurang dengan 0 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah S OSW ini. -nemonic ; S4B +S!bstractA ersedia pada ; ?9?? keatas Synta/ ; S.B ujuan,Sumber Pengaruh flag ; OH, SH, PH, AH, PH, 2H Hungsi ; .ntuk mengurangkan 5 ujuan5 dengan 5Sumber5. Casil pengurangan akan disimpan pada 5 ujuan5. 2ontoh;
08@
S.B B3,B3
Y B3F9
-nemonic ; &ES& ersedia pada ; ?9?? keatas Synta/ ; 'S Operand1,Operand0 Pengaruh flag ; OH, SH, PH, PH, 2H Hungsi ; .ntuk melakukan operasi AD4 antara 5Operand15 dan 5Operand05. Casil dari operasi AD4 hanya mempengaruhi flag register saja dan tidak mempengaruhi nilai 5operand15 maupun 5operand05. -nemonic ; DA)& ersedia pada ; ?9?? keatas Synta/ ; WA! Pengaruh flag ; idak ada Hungsi ; .ntuk menghentikan 2P. sampai adanya interupsi dari luar. !ntruksi ini bisanya digunakan untuk bekerja sama dengan 2oprosesor. -nemonic ; 956' +ExchangeA ersedia pada ; ?9?? keatas Synta/ ; 32C& Operand1,Operand0 Pengaruh flag ; idak ada Hungsi ; .ntuk menukar 5Operand15 dengan 5Operand05. 2ontoh; Potongan program di ba+ah akan mengatur agar A3 > B3 2-P A3,B3 (A' Selesai 32C& A3,B3 Selesai ; ..........
08A
-nemonic ; 9*A& +&ranslateA ersedia pada ; ?9?? keatas Synta/ ; 31A Pengaruh flag ; idak ada Hungsi ; .ntuk mengcopykan isi dari alamat 4S;VB3W ditambah dengan A1 ke A1 7A1F4S;VB3WGA1*. -nemonic ; 9O( ersedia pada ; ?9?? keatas Synta/ ; 3O# ujuan,Sumber Pengaruh flag ; idak ada Hungsi ; -elakukan logika 3O# antara 5 ujuan5 dan 5Sumber5. Casil dari operasi 3O# diletakkan pada 5 ujuan5. Hungsi 3O# yg paling populer adalah untuk menolkan suatu register. 4engan logika 3O# program akan berjalan lebih cepat dan efisien. 2ontoh; 3O# A3,A3 Y A3 akan bernilai nol setelah perintah ini
08?
)$&E((4P& -h Print Screen <!ngsi " -encetak seluruh isi layar ke printer. (egister )np!t " idak Ada. (egister O!tp!t "
idak Ada.
)$&E((4P& Bh %eyboard <!ngsi " !nterupsi 9E merupakan CardWare interupsi dari keyboard. Setiap penekanan tombol keyboard akan membangkitkan interupsi 9E. Candler dari interupsi 9E kemudian akan mengambil data dari tombol apa yang ditekan dari Port @9h yang berisi kode scan tombol. 4ari k ode scan ini kemudian akan diterjemahkan dalam kode AS2!! atau '/tended dan disimpan pada keyboard buffer untuk kemudian digunakan oleh interupsi lain. )$&E((4P& 1 h ; Ser:ice h Set Video 3ode <!ngsi " -engubah -ode 6ideo. (egister )np!t " (egister O!tp!t " idak Ada. AC F 99h A1 F nomor mode Pen1elasan " Setiap dilakukan pergantian mode akan menimbulkan efek 21S, kecuali nomor mode dijumlahkan dengan 10? atau bit ke"A pada A1 diset 1.
08E
)$&E((4P& 1 h ; Ser:ice 1h Set 5!rsor SiYe <!ngsi " -erubah ukuran kursor pada mode teks. (egister )np!t " (egister O!tp!t " AC F 91h 2C F a+al garis bentuk kursor 21 F akhir garis bentuk kursor )$&E((4P& 1 h ; Ser:ice ,h Set 5!rsor Position <!ngsi " -eletakkan kursor pada posisi tertentu. (egister )np!t " (egister O!tp!t " AC F 90h BC F nomor halaman tampilan 4C F nomor baris 7dimulai 99* 41 F nomor kolom 7dimulai 99*
idak Ada.
idak Ada.
)$&E((4P& 1 h ; Ser:ice 7h 5!rsor )n#ormation <!ngsi " -emperoleh !nformasi posisi kursor dan ukurannya. (egister )np!t " (egister O!tp!t " AC F 9Bh 2C F a+al garis bentuk kursor BC F nomor halaman tampilan 21 F akhir garis bentuk kursor 4C F nomor baris 41 F nomor kolom Pen1elasan " Setiap halaman tampilan memiliki kursornya sendiri" sendiri.
0:9
)$&E((4P& 1 h ; Ser:ice -h Select Acti:e Page <!ngsi " -erubah halaman tampilan aktif. (egister )np!t " (egister O!tp!t " AC F 9:h A1 F nomor halaman tampilan
idak Ada.
)$&E((4P& 1 h ; Ser:ice Gh Scroll 4p Dindo0 <!ngsi " -enggulung jendela ke atas. (egister )np!t " (egister O!tp!t " idak Ada. AC F 9@h A1 F jumlah baris untuk digulung BC F atribut untuk baris kosong 2C,21 F koordinat kiri atas jendela 4C,41 F koordinat kanan ba+ah jendela Pen1elasan " A1 diisi 99 akan mengosongkan keseluruhan jendela. )$&E((4P& 1 h ; Ser:ice Eh Scroll Do0n Dindo0 <!ngsi " -enggulung jendela ke ba+ah. (egister )np!t " (egister O!tp!t " idak Ada. AC F 9Ah A1 F jumlah baris untuk digulung BC F atribut untuk baris kosong 2C,21 F koordinat kiri atas jendela 4C,41 F koordinat kanan ba+ah jendela Pen1elasan " A1 diisi 99 akan mengosongkan keseluruhan jendela.
0:1
)$&E((4P& 1 h ; Ser:ice Bh Drite 5haracter And Attrib!te At 5!rsor Position <!ngsi " -encetak karakter dan atribut pada posisi kursor. (egister )np!t " (egister O!tp!t " idak Ada. AC F 9Eh A1 F kode AS2!! karakter BC F nomor halaman B1 F atribut karakter 23 F jumlah pengulangan pencetakan Pen1elasan " $arakter kontrol akan dicetak sebagai karakter biasa. )$&E((4P& 1 h ; Ser:ice Ah Drite 5haracter At 5!rsor Position <!ngsi " -encetak karakter pada posisi kursor. (egister )np!t " (egister O!tp!t " idak Ada. AC F 9Ah A1 F kode AS2!! karakter BC F nomor halaman 23 F jumlah pengulangan pencetakan Pen1elasan " $arakter kontrol akan dicetak sebagai karakter biasa, atribut yang digunakan akan sama dengan atribut yang lama. )$&E((4P& 1 h ; Ser:ice Eh &eletype O!tp!t <!ngsi " Output karakter sederhana. (egister )np!t " (egister O!tp!t " idak Ada. AC F 9'h A1 F kode AS2!! karakter BC F nomor halaman Pen1elasan " $arakter kontrol berpengaruh sesuai fungsinya. Pada #O- B!OS dengan tanggal antara 08N8N?1 ke atas umumnya register BC tidak berfungsi karena setiap output akan dicetak ke halaman aktif.
0:0
)$&E((4P& 1 h ; Ser:ice <h 'et 5!rrent Video 3ode <!ngsi " -endapatkan mode ,ideo aktif. (egister )np!t " (egister O!tp!t " AC F 9Hh A1 F mode ,ideo 7gambar :.1.* AC F jumlah karakter per kolom BC F nomor halaman tampilan Pen1elasan " (ika mode ,ideo diset dengan bit A on, maka A1 yang didapat juga akan berisi bit A on. %on#li2 " 4ri,er tampilan 6.!-A&' )$&E((4P& 1 h ; Ser:ice 11hCS!bser:ice h *oad 4ser Speci#ic 5haracter <!ngsi " -embuat karakter AS2!! baru. &erdapat pada " Sistem dilengkapi tampilan '&A, 6&A, dan -2&A. (egister )np!t " (egister O!tp!t " idak Ada AC F 11h A1 F 99h 23 F jumlah karakter akan diubah 43 F nomor karakter mulai diubah B1 F nomor blok untuk diubah BC F jumlah byte per karakter 'S;BP F buffer bentuk karakter )$&E((4P& 1 h ; Ser:ice 11hCS!bser:ice 7h Set Bloc2 Speci#ier <!ngsi " -emberikan identitas tabel karakter untuk ditampilkan. &erdapat pada " Sistem dilengkapi tampilan '&A, 6&A, dan -2&A. (egister )np!t " (egister O!tp!t " idak Ada AC F 11h A1 F 9Bh B1 F penanda tabel karakter )$&E((4P& 1 h ; Ser:ice 1,hCS!bser:ice 1 h 'et E'A )n#ormation
0:B
<!ngsi " -emperoleh karakteristik sistem ,ideo. &erdapat pada " Sistem dilengkapi tampilan '&A ke atas. (egister )np!t " (egister O!tp!t " AC F 10h BC F 99h monitor +arna B1 F 19h 91h monitor mono B1 F 99h 2ard @8 $B 91h 2ard 10? $B 90h 2ard 1E0 $B 9Bh 2ard 0:@ $B )$&E((4P& 1 h ; Ser:ice 17h Drite String <!ngsi " -encetak string ke 1ayar &erdapat pada " -esin ?90?@ ke atas dengan tampilan '&A ke atas. (egister )np!t " (egister O!tp!t " idak Ada. AC F 1Bh A1 F 99h BC F nomor halaman B1 F atribut untuk string 23 F jumlah karakter pada string 4C,41 F koordinat untuk memulai pencetakan 'S;BP F alamat string yang akan dicetak Pen1elasan " -emperlakukan karakter kontrol sesuai fungsinya. )$&E((4P& 1 h ; Ser:ice 1AhCS!bser:ice h 'et Display 5ombination <!ngsi " -emperoleh informasi tampilan &erdapat pada " Sistem dengan tampilan 6&A dan -2&A. (egister )np!t " (egister O!tp!t " AC F 1Ah A1 F 1Ah jika berhasil A1 F 99h B1 F kode tampilan aktif BC F kode tampilan kedua )$&E((4P& 1 h ; Ser:ice 1Bh
0:8
V'A State )n#ormation <!ngsi " -emperoleh informasi tampilan. &erdapat pada " Sistem dengan tampilan 6&A dan -2&A. (egister )np!t " (egister O!tp!t " AC F 1Bh A1 F 1Bh bila berhasil B3 F 9999h 'S;4! F alamat buffer @8 'S;4! F alamat buffer @8 byte informasi byte untuk diisi )$&E((4P& 1 h ; Ser:ice 8<hCS!bser:ice h VESA S!perVga )n#ormation <!ngsi " -emperoleh informasi 6'SA. &erdapat pada " Sistem dengan card tampilan 6'SA Super6ga. (egister )np!t " (egister O!tp!t " A3 F 8H99h A1 F 8Hh jika berhasil 'S;4! F alamat buffer 0:@ AC F 99h jika berhasil byte untuk diisi 'S;4! F alamat buffer 0:@ byte informasi )$&E((4P& 1Gh ; Ser:ice h 'et %eystro2e <!ngsi " -enunggu masukan keyboard. &erdapat pada " Semua mesin. (egister )np!t " (egister O!tp!t " AC F 99h (ika A1F9 maka AC F kode '/tended (ika A1=>9 maka A1 F $ode AS2!! AC F $ode Scan )$&E((4P& 1Gh ; Ser:ice 1h 5hec2 %eystro2e <!ngsi " -engecek isi keyboard buffer. &erdapat pada " Semua mesin.
0::
(egister O!tp!t " PHF9 bila buffer tidak kosong (ika A1F9 maka AC F kode '/tended (ika A1=>9 maka A1 F $ode AS2!! AC F $ode Scan PHF1 bila buffer kosong
)$&E((4P& 1Gh ; Ser:ice 1 h 'et Enhanced %eystro2e <!ngsi " -enunggu masukan keyboard. &erdapat pada " -esin A dengan keyboard 'nhanced. (egister )np!t " (egister O!tp!t " AC F 19h AC F kode scan A1 F kode AS2!! )$&E((4P& 1Gh ; Ser:ice 11h 5hec2 Enhanced %eystro2e <!ngsi " -engecek isi keyboard buffer. &erdapat pada " -esin A dengan keyboard 'nhanced. (egister )np!t " (egister O!tp!t " AC F 11h PHF9 bila buffer tidak kosong (ika A1F9 maka AC F kode '/tended (ika A1=>9 maka A1 F $ode AS2!! AC F $ode Scan PHF1 bila buffer kosong )$&E((4P& 1Bh Bootstrap *oader <!ngsi " -elakukan Warm Boot. (egister )np!t " idak Ada. (egister O!tp!t "
idak Ada.
0:@
)$&E((4P& 1Bh 5ontrol Brea2 6andler <!ngsi " !nterupsi ini terjadi setiap kali terjadi penekanan tombol 2trlGBreak. (egister )np!t " idak Ada. (egister O!tp!t " idak Ada. )$&E((4P& 15h &imer &ic2 <!ngsi " !nterupsi ini disediakan untuk digunakan oleh pemakai. !nterupsi 12h akan terjadi kurang lebih 1?,0 kali setiap detik. Anda bisa membuat program residen dengan memanfaatkan timer tick ini. (egister )np!t " idak Ada. (egister O!tp!t " idak Ada. )$&E((4P& ,1h ; Ser:ice 1h (ead 5haracter Dith Echo <!ngsi " .ntuk membaca masukan 1 karak ter dari keyboard dan menampilkannya ke layar. Hungsi ini dapat dihentikan oleh penekanan tombol 2trlGBreak. (egister )np!t " (egister O!tp!t " AC F 19h A1 F $ode AS2!! 5atatan " Berbeda dengan fungsi dari B!OS, untuk membaca karakter khusus yang mempunyai kode '/tended, anda harus membacanya dua kali dengan fungsi dari 4OS ini. )$&E((4P& ,1h ; Ser:ice ,h Drite 5haracter &o Standard O!tp!t <!ngsi " .ntuk mencetak satu buah karakter pada layar. (egister )np!t " (egister O!tp!t " idak ada AC F 90h 41 F $ode AS2!! )$&E((4P& ,1h ; Ser:ice Eh Direct 5haracter )np!t Ditho!t Echo <!ngsi " .ntuk membaca masukan 1 karakter dari keyboard. Hungsi ini tidak akan
0:A
menampilkan karakter yang ditekan pada layar, selain itu penekanan tombol 2trlGBreak juga akan diabaikan. (egister )np!t " (egister O!tp!t " AC F 9Ah A1 F $ode AS2!! )$&E((4P& ,1h ; Ser:ice =h 5haracter )np!t Ditho!t Echo <!ngsi " .ntuk membaca masukan 1 karakter dari keyboard. Hungsi ini tidak akan menampilkan karakter yang ditekan pada layar. Penekanan tombol 2trlGBreak akan menghentikan fungsi ini. (egister )np!t " (egister O!tp!t " AC F 9?h A1 F $ode AS2!! )$&E((4P& ,1h ; Ser:ice Bh Drite String &o Standard O!tp!t <!ngsi " .ntuk mencetak string ke layar. (egister )np!t " (egister O!tp!t " AC F 9Eh 4S;43 F String yang diakhiri dengan tanda 5T5.
idak ada
)$&E((4P& ,1h ; Ser:ice Ah )np!t String <!ngsi " .ntuk mendapatkan masukan string dari keyboard. (egister )np!t " (egister O!tp!t " AC F 9Ah Buffer terisi 4S;43 F Buffer Spesifikasi buffer; " Offset 99 mencatat maksimum karakter yang dapat dimasukkan. " Offset 91 banyaknya masukan dari keyboard yang telah diketikkan. ombol 2# tidak akan dihitung. " Offset 90 keatas, tempat dari string yang diketikkan disimpan. )$&E((4P& ,1h ; Ser:ice Bh 'et Stat!s
0:?
<!ngsi " -engecek isi keyboard buffer. (egister )np!t " (egister O!tp!t " AC F 9Bh A1 F 99 jika tidak ada karakter A1 F HHh jika ada karakter )$&E((4P& ,1h ; Ser:ice 5h 5lear B!##er dan (ead )np!t <!ngsi " .ntuk mengosongkan keyboard buffer, kemudian melaksanakan fungsi 4OS 91, 9@, 9A, 9? atau 9Ah. (egister )np!t " (egister O!tp!t " idak ada AC F 92h A1 F Hungsi yang akan dieksekusi setelah buffer dikosongkan 791,9@,9,9? atau 9Ah*. )$&E((4P& ,1h ; Ser:ice <h Open <ile 4sing <5B <!ngsi " -embuka file dengan cara H2B. (egister )np!t " (egister O!tp!t " AC F 9Hh A1 F 99h (ika sukses 4S;43 F H2B A1 F HHh (ika gagal )$&E((4P& ,1h ; Ser:ice 1 h 5loses <ile 4sing <5B <!ngsi " .ntuk menutup file dengan cara H2B. (egister )np!t " (egister O!tp!t " AC F 19h A1 F 99h (ika sukses 4S;43 F H2B A1 F HHh (ika gagal )$&E((4P& ,1h ; Ser:ice 17h Delete <ile 4sing <5B <!ngsi" -enghapus file dengan cara H2B. (egister )np!t " (egister O!tp!t "
0:E
)$&E((4P& ,1h ; Ser:ice 18h SeR!ential (ead <rom <5B <ile <!ngsi " .ntuk membaca file secara sekuensial. (egister )np!t " (egister O!tp!t " AC F 18h A1 F status 4S;43 F H2B )$&E((4P& ,1h ; Ser:ice 1-h SeR!ential Drite &o <5B <ile <!ngsi " .ntuk menulis file secara sekuential. (egister )np!t " (egister O!tp!t " AC F 18h A1 F Status 4S;43 F H2B )$&E((4P& ,1h ; Ser:ice 1Gh 5reate <ile 4sing <5B <!ngsi " .ntuk menciptakan sebuah file baru dengan cara H2B. (egister )np!t " (egister O!tp!t " AC F 1@h A1 F Status 4S;43 F H2B )$&E((4P& ,1h ; Ser:ice 1Eh (ename <ile 4sing <5B <!ngsi " .ntuk mengganti nama file dengan cara H2B. (egister )np!t " (egister O!tp!t " AC F 1Ah A1 F Status 4S;43 F H2B )$&E((4P& ,1h ; Ser:ice 1Ah
0@9
Set D&A <!ngsi " .ntuk merubah alamat 4 A. Secara default 4 A terletak pada PSP offset ke ?9h sebanyak 10? byte. (egister )np!t " (egister O!tp!t " idak ada AC F 1Ah 4S;43 F 1okasi 4 A yang baru )$&E((4P& ,1h ; Ser:ice ,1h (ead (andom (ecord <rom <5B <ile <!ngsi " .ntuk membaca record dari file H2B. (egister )np!t " (egister O!tp!t " AC F 01h A1 F Status 4S;43 F H2B 4 A F Casil pembacaan )$&E((4P& ,1h ; Ser:ice ,,h Drite random (ecord &o <5B <ile <!ngsi " untuk menulis record ke file H2B. (egister )np!t " (egister O!tp!t " AC F 00h A1 F Status 4S;43 F H2B 4 A F 4ata record )$&E((4P& ,1h ; Ser:ice ,7h 'et <ile SiYe <!ngsi " .ntuk mengetahui besarnya suatu file. (egister )np!t " (egister O!tp!t " AC F 0Bh A1 F Status 4S;43 F H2B )$&E((4P& ,1h ; Ser:ice ,8h Set (andom (ecord $!mber <or <5B <!ngsi " .ntuk memindahkan record untuk diakses oleh fungsi 01h dan 00h. (egister )np!t " (egister O!tp!t "
0@1
AC F 08h 4S;43 F H2B )$&E((4P& ,1h ; Ser:ice ,-h Set )nterr!pt Ve2tor <!ngsi " .ntuk merubah ,ektor interupsi ke suatu lokasi dengan merubah alamat a+al ,ektor interupsi. (egister )np!t " (egister O!tp!t " AC F 0:h A1 F Domor !nterupsi 4S;43 F 1okasi baru %on#li2 " Phar 1ap B?@ )$&E((4P& ,1h ; Ser:ice ,Eh (andom Bloc2 (ead <rom <5B <ile <!ngsi " .ntuk membaca sejumlah record dari suatu file. (egister )np!t " (egister O!tp!t " AC F 0Ah A1 F Status 23 F Banyaknya record yang 4 A F hasil pembacaan akan dibaca 23 F Banyaknya record yang 4S;43 F H2B berhasil dibaca )$&E((4P& ,1h ; Ser:ice ,=h (andom Bloc2 Drite &o <5B <ile <!ngsi " .ntuk menulis sejumlah record ke suatu file (egister )np!t " (egister O!tp!t " AC F 0?h A1 F Status 23 F Banyaknya record yang 23 F Banyaknya record yang akan ditulisi berhasil ditulis 4S;43 F H2B 4 A F 4ata dari record
0@0
)$&E((4P& ,1h ; Ser:ice ,<h 'et D&A Address <!ngsi " .ntuk mengetahui alamat dari 4 A yang digunakan. (egister )np!t " (egister O!tp!t " AC F 0Hh 'S;B3 F 1okasi 4 A )$&E((4P& ,1h ; Ser:ice 7 h 'et DOS Version <!ngsi " .ntuk mengetahui ,ersi 4OS yang sedang digunakan (egister )np!t " (egister O!tp!t " AC F B9h A1 F Angka mayor AC F Angka minor )$&E((4P& ,1h ; Ser:ice 71h &erminate And Stay (esiden <!ngsi " .ntuk meresidenkan suatu program. (egister )np!t " (egister O!tp!t " AC F B1h A1 F $ode return 43 F Besar memory dalam paragraf )$&E((4P& ,1h ; Ser:ice 77h Extended Brea2 5hec2ing <!ngsi " .ntuk menghidup dan matikan pengecekan tombol 2trlGBreak oleh fungsi 4OS. (egister )np!t " (egister O!tp!t " AC F BBh (ika input A1F9 A1 F 9 untuk mengambil keterangan 41F9 Off 2trlGBreak 41F1 On F 1 untuk merubah status 2trlGBreak 41 F 9 2trlGBreak dijadikan Off 41 F 1 2trlGBreak dijadikan On
0@B
)$&E((4P& ,1h ; Ser:ice 78h 'E& ADD(ESS O< )$DOS <*A' <!ngsi " .ntuk mendapatkan alamat dari BA4 7Bendera Aktif 4OS*. Dilai BA4 akan bertambah pada saat interupsi dari 4OS dijalankan dan akan berkurang saat interupsi dari 4OS selesai. 4engan melihat pada BA4 anda dapat mengetahui apakah interupsi dari 4OS sedang aktif atau tidak71ihat bagian residen*. (egister )np!t " (egister O!tp!t " AC F B8h 'S;B3 F Alamat BA4 )$&E((4P& ,1h ; Ser:ice 7-h 'et )nterr!pt Ve2tor <!ngsi " .ntuk mendapatkan alamat ,ektor interupsi dari suatu nomor interupsi. (egister )np!t " (egister O!tp!t " AC F B:h 'S;B3 F Alamat ,ektor interupsi A1 F Domor !nterupsi )$&E((4P& ,1h ; Ser:ice 75h 5reate <ile 6andle <!ngsi " .ntuk menciptakan sebuah file baru dengan metode Hile Candle. (egister )np!t " (egister O!tp!t " AC F B2h (ika 2HF9 maka A1 F -ode, dengan bit; A3FDomor file handle 9 file #ead only (ika 2HF1 maka 1 file Cidden A3F$ode kesalahan 0 file System B 6olume label 8 2adangan : file Archi,e 4S;43 F Dama file AS2!!P )$&E((4P& ,1h ; Ser:ice 7Dh Open Existing <ile <!ngsi " .ntuk membuka file yang telah ada dengan metode file handle.
0@8
(egister )np!t " (egister O!tp!t " AC F B4h (ika 2HF9 maka A1 F -ode, dengan bit; A3FDomor file handle 9 untuk #ead only (ika 2HF1 maka 1 untuk Write only A3F$ode kesalahan 0 untuk #eadNWrite 4S;43 F Dama file AS2!!P )$&E((4P& ,1h ; Ser:ice 7Eh 5lose <ile 6andle <!ngsi " .ntuk menutup file handle (egister )np!t " (egister O!tp!t " AC F B'h 2HF9 jika sukses B3 F Domor file handle 2HF1 jika gagal, maka A3F$ode kesalahan )$&E((4P& ,1h ; Ser:ice 7<h (ead <rom <ile Or De:ice 4sing <ile 6andle <!ngsi " .ntuk membaca data dari suatu file atau de,ice. (egister )np!t " (egister O!tp!t " AC F BHh 2HF9 jika sukses B3 F Domor file handle A3Fbyte yang berhasil dibaca 23 F Banyaknya byte yang 2HF1 jika gagal akan dibaca A3F$ode kesalahan 4S;43 F Alamat buffer )$&E((4P& ,1h ; Ser:ice 8 h Drite &o <ile Or De:ice 4sing <ile 6andle <!ngsi " .ntuk menulisi file atau de,ice. (egister )np!t " (egister O!tp!t " AC F 89h 2HF9 jika sukses B3 F Domor file handle A3Fbyte yang berhasil ditulisi 23 F Banyaknya byte yang 2HF1 jika gagal akan ditulisi A3F$ode kesalahan 4S;43 F Alamat data
0@:
)$&E((4P& ,1h ; Ser:ice 81h Delete <ile 4sing <ile 6andle <!ngsi " .ntuk menghapus file (egister )np!t " (egister O!tp!t " AC F 81h 2HF9 jika sukses 21 F Dama file AS2!!P 2HF1 jika gagal, maka A3Fkode kesalahan )$&E((4P& ,1h ; Ser:ice 8,h Set 5!rrent <ile Position <!ngsi " .ntuk memindahkan pointer dari suatu file. (egister )np!t " (egister O!tp!t " AC F 80h 2HF9 jika sukses A1 F -ode perpindahan; 2HF1 jika gagal 99 dari a+al file A3F kode kesalahan 91 dari posisi aktif 90 dari akhir file B3 F Domor file handle 23;43 F Banyaknya perpindahan )$&E((4P& ,1h ; Ser:ice 87h Set And 'et <ile Atrib!t <!ngsi " .ntuk mengetahui dan merubah atribut dari suatu file. (egister )np!t " (egister O!tp!t " AC F 8Bh (ika input A1F9, maka; A1 F 9 untuk mendapatkan atribut jika 2HF9 file 23 F atribut 1 untuk merubah atribut file jika 2HF1 23 F atribut baru dengan bit; A3 F $ode kesalahan 9 F #ead Only 1 F Cidden 0 F System : F Archi,e 4S;43 F Dama file AS2!!P )$&E((4P& ,1h ; Ser:ice 85h &erminate Dith (et!rn 5ode
0@@
<!ngsi " .ntuk menghentikan program dan mengembalikan kendali kepada 4OS. Hungsi ini lebih efektif untuk digunakan dibandingkan dengan interupsi 09h. (egister )np!t " (egister O!tp!t " idak ada AC F 82h A1 F $ode return )$&E((4P& ,1h ; Ser:ice -Gh (ename <ile <!ngsi " .ntuk mengganti nama file. Hungsi ini juga bisa memindahkan file ke directory lain. (egister )np!t " (egister O!tp!t " AC F :@h 2HF9 jika sukses 4S;43 F Dama file AS2!!P lama 2HF1 jika gagal 'S;B3 F Dama file AS2!!P baru A3F$ode kesalahan )$&E((4P& ,Eh &erminate And Stay (esiden <!ngsi " .ntuk meresidenkan program. (egister )np!t " (egister O!tp!t " 4S;43 F Batas alamat residen
0@A
*ampiran )) &abel %ode Scan %eyboard G"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""G K $O4' S2AD K G""""""""G"""""""""""G""""""""G"""""""""""G"""""""""G"""""""""""G K O-BO1 K S2AD $O4' K O-BO1 K S2AD $O4' K O-BO1 K S2AD $O4' K K K '$ADK1'PASK K '$ADK1'PASK K '$ADK1'PASK G""""""""G"""""G"""""G""""""""G"""""G"""""G"""""""""G"""""G"""""G K 'sc K 91 K ?1 K S K 1H K EH K HB K B4 K B4 K K 1 K 90 K ?0 K 4 K 09 K A9 K H8 K B' K B' K K 0 K 9B K ?B K H K 01 K A1 K H: K BH K BH K K B K 98 K ?8 K & K 00 K A0 K H@ K 89 K 29 K K 8 K 9: K ?: K C K 0B K AB K HA K 81 K 21 K K : K 9@ K ?@ K ( K 08 K A8 K H? K 80 K 20 K K @ K 9A K ?A K $ K 0: K A: K HE K 8B K 2B K K A K 9? K ?? K 1 K 0@ K A@ K H19 K 88 K 28 K K ? K 9E K ?E K Y K 0A K AA K Dum 1ockK 8: K 2: K K E K 9A K ?A K I K 0? K A? K Scrol K K K K 9 K 9B K ?B K Z K 0E K AE K 1ock K 8@ K 2@ K K " K 92 K ?2 KShif$iriK 0A K AA K Come K 8A K 2A K K F K 94 K ?4 K < K 0B K AB K S =?> K 8? K 2? K K Back K K K P K 02 K A2 K Pg.p K 8E K 2E K K Space K 9' K ?' K 3 K 04 K A4 K=">$eyPadK 8A K 2A K K ab K 9H K ?H K 2 K 0' K A' K=S>$eyPadK 8B K 2B K K U K 19 K E9 K 6 K 0H K AH K=:>$eyPadK 82 K 22 K K W K 11 K E1 K B K B9 K B9 K=S>$eyPadK 84 K 24 K K ' K 10 K E0 K D K B1 K B1 K=G>$eyPadK 8' K 2' K K # K 1B K EB K - K B0 K B0 K=1>$eyPadK 8H K 2H K K K 18 K E8 K = K BB K BB K=S>$eyPadK :9 K 49 K K L K 1: K E: K > K B8 K B8 K Pg4n K :1 K 41 K K . K 1@ K E@ K J K B: K B: K !ns K :0 K 40 K K ! K 1A K EA K Shif K K K 4el K :B K 4B K K O K 1? K E? K $anan K B@ K B@ K H11 K :A K 4A K K P K 1E K EE K PrtSc K BA K BA K H10 K :? K 4? K K [ K 1A K EA K 1ftAlt K B? K B? K #gtAlt K'9B? K'9B? K K \ K 1B K EB K Space K BE K BE K #gt2trl K'91B K'9E4 K K 'nter K 12 K E2 K2aps1ockK BA K BA K 'nter K'912 K'9E2 K K 1ft2tr1K 14 K E4 K H1 K BB K BB K =$eyPad>K K K K A K 1' K E' K H0 K B2 K B2 K K K K G""""""""G"""""G"""""G""""""""G"""""G"""""G"""""""""G"""""G"""""G
0@?
*ampiran ))) &abel %ode Extended %eyboard G"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""G K $O4' '3 'D4'4 K G""""""""""""""G"""""G""""""""""""""G"""""G"""""""""""""""G"""""G K K$O4' K K$O4' K K$O4' K K O-BO1 K=4'S>K O-BO1 K=4'S>K O-BO1 G""""""""""""""G"""""G""""""""""""""G"""""G"""""""""""""""G"""""G K ShiftG ab K 1: K H: K @B K 2trl G HA K 199 K K Alt G U K 1@ K H@ K @8 K 2trl G H? K 191 K K Alt G W K 1A K HA K @: K 2trl G HE K 190 K K Alt G ' K 1? K H? K @@ K 2trl G H19 K 19B K K Alt G # K 1E K HE K @A K Alt G H1 K 198 K K Alt G K 09 K H19 K @? K Alt G H0 K 19: K K Alt G L K 01 K Come K A1 K Alt G HB K 19@ K K Alt G . K 00 K 2ursol .p K A0 K Alt G H8 K 19A K K Alt G ! K 0B K Page .p K AB K Alt G H: K 19? K K Alt G O K 08 K 2ursol 1eft K A: K Alt G H@ K 19E K K Alt G P K 0: K 2ursol #ightK AA K Alt G HA K 119 K K Alt G A K B9 K 2ursol 4o+n K ?9 K Alt G H? K 111 K K Alt G S K B1 K Page 4o+n K ?1 K Alt G HE K 110 K K Alt G 4 K B0 K !nsert K ?0 K Alt G H19 K 11B K K Alt G H K BB K 4elete K ?B K 2trlG2ursol.lfK 11: K K Alt G & K B8 K Shif G H1 K ?8 K 2trlG2ursol.#gK 11@ K K Alt G C K B: K Shif G H0 K ?: K 2trlG'nd K 11A K K Alt G ( K B@ K Shif G HB K ?@ K 2trlGPage 4o+nK 11? K K Alt G $ K BA K Shif G H8 K ?A K 2trlGCome K 11E K K Alt G 1 K B? K Shif G H: K ?? K Alt G 1 K 109 K K Alt G P K 88 K Shif G H@ K ?E K Alt G 0 K 101 K K Alt G 3 K 8: K Shif G HA K E9 K Alt G B K 100 K K Alt G 2 K 8@ K Shif G H? K E1 K Alt G 8 K 10B K K Alt G 6 K 8A K Shif G HE K E0 K Alt G : K 108 K K Alt G B K 8? K Shif G H19 K EB K Alt G @ K 10: K K Alt G D K 8E K 2trl G H1 K E8 K Alt G A K 10@ K K Alt G - K :9 K 2trl G H0 K E: K Alt G ? K 10A K K H1 K :E K 2trl G HB K E@ K Alt G E K 10? K K H0 K @9 K 2trl G H8 K EA K Alt G 9 K 10E K K HB K @1 K 2trl G H: K E? K Alt G " K 1B9 K K H8 K @0 K 2trl G H@ K EE K Alt G I K 1B1 K G""""""""""""""G"""""G""""""""""""""G"""""G"""""""""""""""G"""""G
K=4'S>K
0@E