Anda di halaman 1dari 272

Pemrograman Pemrograman

B a h a s a Bahasa Assembl y A s s e m bly


Sto Sto
sto@poboxes.com

Pemrograman Dengan Bahasa Assembly Edisi Online Versi 1.

Pen!lis " Sto Editor " Ari# $opi

%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

Sto ,- .!n , 1 http"//000.1asa2om.com 0

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*.

45APA$ &E()3A %AS)6


Atas diselesaikannya buku ini, penulis ingin mengucapkan terima kasih kepada Suriyanto, #udi, Pieter, Carianto, Adi dan Sentosa yang telah meminjamkan buku"buku bacaan, Aripin yang telah meminjamkan printer CP, Wandy, o"je, Aliang, Aminandar, Petrick, Su+angdi dan Weng yang selalu mendukung, serta teman" teman seperjuangan di S -!$ B!DA D.SAD A#A, terutama yang sering menandatangani absen saya. 4iluar itu semua, saya juga sangat berterima kasih kepada Sdr. AriSubagijo yang telah banyak membantu, Staf serta pimpinan dari '1'3 -'4!A $O-P. !D4O.

(akarta, 0A Do,ember 1EE8 8

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.

1.1.1. B)*A$'A$ B)$E(


Sebenarnya semua bilangan, data maupun program itu sendiri akan diterjemahkan oleh komputer ke dalam bentuk biner. (adi pendefinisisan data dengan jenis bilangan apapun74esimal, oktaf dan he/adesimal* akan selalu diterjemahkan oleh komputer ke dalam bentuk biner. Bilangan biner adalah bilangan yang hanya terdiri atas 0 kemungkinan7Berbasis dua*, yaitu 9 dan 1. $arena berbasis 0, maka pengkor,ersian ke dalam bentuk desimal adalah dengan mengalikan suku ke"D dengan 0D. 2ontohnya; bilangan biner 91110 F 79 3 0B* G 71 3 00* G 71 3 01* G 71 3 09* F A19.

1.1.,. B)*A$'A$ DES)3A*


entunya jenis bilangan ini sudah tidak asing lagi bagi kita semua. Bilangan 4esimal adalah jenis bilangan yang paling banyak dipakai dalam kehidupan sehari"hari, sehingga kebanyakan orang sudah akrab dengannya. Bilangan desimal adalah bilangan yang terdiri atas 19 buah angka7Berbasis 19*, yaitu angka 9"E. 4engan basis sepuluh ini maka suatu angka dapat dijabarkan dengan perpangkatan sepuluh. -isalkan pada angka 10B19 F 71 3 190* G 70 3 191* G 71 3 199*.

1.1.7. B)*A$'A$ O%&A*


Bilangan oktal adalah bilangan dengan basis ?, artinya angka yang dipakai hanyalah antara 9"A. Sama halnya dengan jenis bilangan yang lain, suatu bilangan oktal dapat dikon,ersikan dalam bentuk desimal dengan mengalikan suku ke"D dengan ?D. 2ontohnya bilangan 10? F 71 3 ?1* G 70 3 ?9* F 1919.

1.1.8. B)*A$'A$ 6E9ADES)3A*


Bilangan he/adesimal merupakan bilangan yang berbasis 1@. 4engan angka yang digunakan berupa; 9,1,0,B,8,:,@,A,?,E,A,B,2,4,',H. 4alam pemrograman assembler, jenis bilangan ini boleh dikatakan yang paling banyak digunakan. Cal ini dikarenakan mudahnya pengkon,ersian bilangan ini dengan bilangan yang lain, terutama dengan bilangan biner dan desimal. $arena berbasis 1@, maka 1 angka pada he/adesimal akan menggunakan 8 bit.

1.,. B)*A$'A$ BE(&A$DA DA$ &)DA%


Pada assembler bilangan"bilangan dibedakan lagi menjadi 0, yaitu bilangan bertanda dan tidak. Bilangan bertanda adalah bilangan yang mempunyai arti plus7G* dan minus7"*, misalkan angka 1A dan "1A. Pada bilangan tidak bertanda, angka negatif7yang mengandung tanda I"I* tidaklah dikenal. (adi angka "1A tidak akan akan dikenali sebagai angka "1A, tetapi sebagai angka lain. $apan suatu bilangan perlakukan sebagai bilangan bertanda dan tidakJ Assembler akan selalu melihat pada Sign Hlag, bila pada flag ini bernilai 9, maka bilangan akan diperlakukan sebagai bilangan tidak bertanda, sebaliknya jika flag ini bernilai 1, maka bilangan akan diperlakukan sebagai bilangan bertanda. Pada bilangan bertanda bit terakhir 7bit ke 1@* digunakan sebagai tanda plus7G* atau minus7"*. (ika pada bit terakhir bernilai 1 artinya bilangan tersebut adalah bilangan negatif, sebaliknya jika bit terakhir bernilai 9, artinya bilangan tersebut adalah bilangan positif7&ambar 1.1*. G""""""""""""""""""""""""""""""""""""""""""""G K >>>> Bilangan ==== K G""""""""""""G"""""""""""""""G"""""""""""""""G K Biner K idak Bertanda K Bertanda G""""""""""""G"""""""""""""""G"""""""""""""""G K 9999 9191 K G : K G: K K 9999 9199 K G 8 K G8 K K 9999 9911 K G B K GB K K 9999 9919 K G 0 K G0 K K 9999 9991 K G 1 K G1 K K 9999 9999 K 9 K 9 K

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?@.

,.,. Organisasi 3emori Pada P5


-emori yang ada pada komputer perlu diatur sedemikian rupa sehingga mudah dalam pengaksesannya. Oleh sebab itu di kembangkanlah suatu metode yang efektif dalam pengorganisasiannya. Pada bagian ini akan dibahas mengenai pengorganisasian memori ini.

,.7. Pembagian 3emori


-emori komputer terbagi atas 1@ blok dengan fungsi"fungsi khusus yang sebagian besar adalah sebagai #A- 7#andom Access -emory* yang berfungsi sebagai penyimpan bagi hasil pengolahan pada komputer itu sendiri. .ntuk lebih jelasnya diberikan pembagian fungsi pada blok memori ini secara kasar pada gambar 0.1. """"""""""""""""""""""""""""""""""""""""""""""""""" block fungsi """"""""""""""""""""""""""""""""""""""""""""""""""" 9 #A1 #A0 #AB #A8 #A: #A@ #AA #A-

? #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

,.8. Pengalamatan 3emori Dengan Segment O##set


Sudah kita bahas bersama bah+a baik ?9?@ maupun mode real ?90?@ dapat mengalamatkan sampai 1 -B memori. etapi sebenarnya baik ?9?@ maupun ?90?@ adalah procesor 1@ bit. Banyaknya memori yang dapat dicatat atau dialamatkan oleh procesor 1@ bit adalah maksimal 01@ byte 7F@8 $B*. (adi bagaimana ?9?@ dan mode real ?90?@ mampu mengalamatkan sampai 1 -B memori J. Cal ini dapat dimungkinkan dengan adanya pengalamatan yang menggunakan sistem 09 bit +alaupun sebenarnya procesor itu hanya 1@ bit. 4engan cara ini dapat dialamatkan 009 byte 7F1 -B* memori. etapi masih tetap ada satu kendala dalam pengalamatan 09 bit ini. Laitu bah+a sesuai dengan tipenya procesor ini hanya mampu mengakses 1@ bit data pada satu kali akses time. Sebagai pemecahannya dikembangkanlah suatu metode pengalamatan 09 bit yang dimasukkan ke dalam format 1@ bit. Pada metode pengalamatan ini baik ?9?@ maupun mode real ?90?@ membagi ruang memori ke dalam segmen"segmen di mana besar 1 segmen adalah @8 $B 7F01@ byte*. (adi pada segmen 9999h7 anda 5h5 menunjukkan he/adesimal* terdapat @8 $B data, demikian pula dengan segmen 9991h dan seterusnya. Sekarang bagaimana caranya agar setiap data yang tersimpan dalam satu segmen yang besarnya @8 $B itu dapat diakses secara indi,idual. 2ara yang dikembangkan adalah dengan membagi"bagi setiap segmen menjadi bagian"bagian yang disebut offset. 4alam satu segmen terdapat 01@ offset yang diberi nomor dari 9999h sampai HHHHh. Domor offset selalu diukur relatif dari a+al suatu segmen.

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

,.-. %on:ersi Alamat


Alamat yang menggunakan sistem segmen;offset ini disebut sebagai alamat relatif karena sifat offset yang relatif terhadap segmen. Sedangkan alamat memori yang sebenarnya disebut alamat absolut. Berikut kita lihat cara pengkon,ersian alamat relatif ke absolut. Pengkon,ersian dapat dilakukan dengan menggeser nilai segmen 8 bit ke kiri dan kemudian dijumlahkan dengan nilai offset. Atau yang lebih sederhana adalah dengan mengalikan nilai segmen dengan 08 7F19h* dan kemudian dijumlahkan dengan nilai offset. 2ara ini dike mbangkan dari besarnya selisih segmen yang satu dengan yang berikutnya yang sebesar 1@ bit 7F19h*. Alamat relatif ; 1B:Ah;08@?h 1B:@h;08A?h

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

BAB ))) )$&E((4P&


7.1. PE$'E(&)A$ )$&E((4P&
!nterupsi adalah suatu permintaan khusus kepada mikroposesor untuk melakukan sesuatu. Bila terjadi interupsi, maka komputer akan menghentikan dahulu apa yang sedang dikerjakannya dan melakukan apa yang diminta oleh yang menginterupsi. Pada !B- P2 dan kompatibelnya disediakan 0:@ buah interupsi yang diberi nomor 9 sampai 0::. Domor interupsi 9 sampai 1Hh disediakan oleh #O- B!OS, yaitu suatu !2 didalam komputer yang mengatur operasi dasar komputer. (adi bila terjadi interupsi dengan nomor 9"1Hh, maka secara default komputer akan beralih menuju #O- B!OS dan melaksanakan program yang terdapat disana. Program yang melayani suatu interupsi dinamakan !nterrupt Candler.

7.,. VE%&O( )$&E(4PS)


Setiap interrupt akan mengeksekusi interrupt handlernya masing"masing berdasarkan nomornya. Sedangkan alamat dari masing" masing interupt handler tercatat di memori dalam bentuk array yang besar elemennya masing"masing 8 byte. $eempat byte ini dibagi lagi yaitu 0 by te pertama berisi kode offset sedangkan 0 byte berikutnya berisi kode segmen dari alamat interupt handler yang bersangkutan. (adi besarnya array itu adalah 0:@ elemen dengan ukuran elemen masing"masing 8 byte. otal keseluruhan memori yang dipakai adalah sebesar 1908 byte 70:@ / 8 F 1908* atau 1 $B dan disimpan dalam lokasi memori absolut 9999h sampai BHHh. Array sebesar 1 $B ini disebut !nterupt 6ector able 7 able 6ektor !nterupsi*. Dilai"nilai yang terkandung pada !nterupt 6ector able ini tidak akan sama di satu komputer dengan yang lainnya. !nterupt yang berjumlah 0:@ buah ini dibagi lagi ke dalam 0 macam yaitu; " !nterupt 99h " 1Hh 79 " B1* adalah interrupt B!OS dan standar di semua komputer baik yang menggunakan sistem operasi 4OS atau bukan. 1okasi !nterupt 6ector able"nya ada di alamat absolut 9999h"99AHh. " !nterupt 09h " HHh 7B0 " 0::* adalah interrupt 4OS. !nterrupt ini hanya ada pada komputer yang menggunakan sistem operasi 4OS dan !nterupt Candler"nya di" load ke memori oleh 4OS pada saat 4OS digunakan. 1okasi !nterupt 6ector able" nya ada di alamat absolut 9AHh"BHHh.

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 ;

8.,.1. Segmen (egister.


#egister yang termasuk dalam kelompok ini terdiri atas register 2S,4S,'S dan SS yang masing"masingnya merupakan register 1@ bit. #egister"register dalam kelompok ini secara umum digunakan untuk menunjukkan alamat dari suatu segmen. #egister 5S 72ode Segment* digunakan untuk menunjukkan tempat dari segmen yang sedang aktif, sedangkan register SS 7Stack Segment* menunjukkan letak dari segmen yang digunakan oleh stack. $edua register ini sebaiknya tidak sembarang diubah karena akan menyebabkan kekacauan pada program anda nantinya. #egister DS 74ata Segment* biasanya digunakan untuk menunjukkan tempat segmen dimana data"data pada program disimpan. .mumnya isi dari register ini tidak perlu diubah kecuali pada program residen. #egister ES 7'/tra Segment*, sesuai dengan namanya adalah suatu register bonus yang tidak mempunyai suatu tugas khusus. #egister 'S ini biasanya digunakan untuk menunjukkan suatu alamat di memory, misalkan alamat memory ,ideo. Pada prosesor ?9B?@ terdapat tambahan register segment 1@ bit, yaitu HS='/tra Segment> dan &S='/tra Segment>.

8.,.,. Pointer dan )ndex (egister.


#egister yang termasuk dalam kelompok ini adalah register SP,BP,S! dan 4! yang masing"masing terdiri atas 1@ bit. #egister" register dalam kelompok

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!.

8.,.7. 'eneral P!rpose (egister.


#egister yang termasuk dalam kelompok ini adalah register A3,B3,23 dan 43 yang masing"masing terdiri atas 1@ bit. #egister" register 1@ bit dari kelompok ini mempunyai suatu ciri khas, yaitu dapat dipisah menjadi 0 bagian dimana masing"masing bagian terdiri atas ? bit, seperti pada gambar 8.1. Akhiran 6 menunjukkan Cigh sedangkan akhiran * menunjukkan 1o+. GA3G GB3G G23G G43G G"G""G""G"G G"G""G""G"G G"G""G""G"G G"G""G""G"G K AC K A1 K K BC K B1 K K 2C K 21 K K 4C K 41 K G""""G""""G G""""G""""G G""""G""""G G""""G""""G 'ambar 8.1. 'eneral p!rpose (egister Secara umum register"register dalam kelompok ini dapat digunakan untuk berbagai keperluan, +alaupun demikian ada pula pe nggunaan khusus dari masing" masing register ini yaitu ; #egister A9 , secara khusus digunakan pada operasi aritmatika terutama dalam operasi pembagian dan pengurangan. #egister B9 , biasanya digunakan untuk menunjukkan suatu alamat offset dari suatu segmen. #egister 59 , digunakan secara khusus pada operasi looping dimana register ini menentukan berapa banyaknya looping yang akan terjadi. #egister D9 , digunakan untuk menampung sisa hasil pembagian 1@ bit. Pada prosesor ?9B?@ terdapat tambahan register B0 bit, yaitu 'A3,'B3,'23 dan '43.

1A

8.,.8. )ndex Pointer (egister


#egister !P berpasangan dengan 2S72S;!P* menunjukkan alamat dimemory tempat dari intruksi7perintah* selanjutnya yang akan dieksekusi. #egister !P juga merupakan register 1@ bit. Pada prosesor ?9B?@ digunakan register '!P yang merupakan register B0 bit.

8.,.-. <lags (egister.


Sesuai dengan namanya Hlags7Bendera* register ini menunjukkan kondisi dari suatu keadaan= ya atau tidak >. $arena setiap keadaan dapat digunakan 1 bit saja, maka sesuai dengan jumlah bitnya, Hlags register ini mampu memcatat sampai 1@ keadaan. Adapun flag yang terdapat pada mikroprosesor ?9?? keatas adalah ; " OH =O,erHlo+ Hlag>. (ika terjadi O,erHlo+ pada operasi aritmatika, bit ini akan bernilai 1. " SH =Sign Hlag>. (ika digunakan bilangan bertanda bit ini akan bernilai 1 " PH =Pero Hlag>. (ika hasil operasi menghasilkan nol, bit ini akan bernilai 1. " 2H =2arry Hlag>. (ika terjadi borro+ pada operasi pengurangan atau carry pada penjumlahan, bit ini akan bernilai 1. 9H 9' 94 92 9B 9A 9E 9? 9A 9@ 9: 98 9B 90 91 99 G""G""G""G""G""G""G""G""G""G""G""G""G""G""G""G""G K KD K !OP1KOHK4HK!HK HKSHKPHK KAHK KPHK K2HK G""G""G""G""G""G""G""G""G""G""G""G""G""G""G""G""G 'ambar 8.,. S!s!nan <lags (egister = == " PH =Parity Hlag>. 4igunakan untuk menunjukkan paritas bilangan. Bit ini akan bernilai 1 bila bilangan yang dihasilkan merupakan bilangan genap. " 4H =4irection Hlag>. 4igunakan pada operasi string untuk menunjukkan arah proses. " !H =!nterrupt 'nable Hlag>. 2P. akan mengabaikan interupsi yang terjadi jika bit ini 9. " H = rap Hlag>. 4igunakan terutama untuk 4ebugging, dengan operasi step by step.

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

BAB V 3E34*A) DE$'A$ ASSE3B*>


-.1. &E9& ED)&O(
.ntuk menuliskan source file untuk program assembly bisa anda gunakan berbagai editor, misalkan Side$ick, WordStar dan Word Perfect. Source file yang diketikkan harus berupa file AS2!!, file ini bisa anda hasilkan melalui WordStar dengan file IDOD 4O2.-'DI, atau dengan Side$ick. .ntuk meyakinkan bah+a source file yang anda buat adalah file AS2!!, bisa anda coba ketikkan perintah ype pada A>. Bil a file yang terlihat dengan perintah type sama persis dengan yang anda ketikkan pada editor, tanpa tambahan karakter"karakter yang acak, maka file tersebut adalah file AS2!!. Source file untuk assembly harus berektensi .AS-.

-.,. 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

-.8. PE(BEDAA$ P(O'(A3 5O3 DA$ E9E


Program dengan ektensi 2O- dan '3' mempunya berbagai perbedaan yang menyolok, antara lain ; P(O'(A3 5O3 " " 1ebih pendek dari file '3' " 1ebih cepat dibanding file '3' " Canya dapat menggunakan 1 segmen " .kuran file maksimum @8 $B 7ukuran satu segment* " sulit untuk mengakses data atau procedure yang terletak pada segment yang lain. " 199h byte pertama merupakan PSP7Program Segment Prefi/* dari program tersebut. " Bisa dibuat dengan 4'B.& P(O'(A3 E9E " " 1ebih panjang dari file 2O" 1ebih lambat dibanding file 2O" Bisa menggunakan lebih dari 1 segmen " .kuran file tak terbatas sesuai dengan ukuran memory. " mudah mengakses data atau procedure pada segment yang lain. " idak bisa dibuat dengan 4'B.&

-.-. BE$&4% A$'%A


Assembler mengiRinkan penggunaan beberapa bentuk angka , yaitu ; 1. DES)3A* .ntuk menuliskan angka dalam bentuk desimal, bisa digunakan tanda I4I pada akhir angka tersebut atau bisa juga tidak diberi tanda sama sekali, contoh ; 0E? D atau 0E? saja.

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

-.=. PE()$&A6 3OV


Perintah -O6 digunakan untuk mengcopy nilai atau angka menuju suatu register,,ariabel atau memory. Adapun synta/ untuk perintah -O6 ini adalah ; 3OV &!1!anCAsal Sebagai contohnya ; 3OV A*CB J mas!22an nilai B pada A*. 3OV A6CA* J nilai A*KB dan A6KB 3OV A9CB J A9KA6LA* hingga A6K dan A*"KB Pada baris pertama7 3OV A*CB *, kita memberikan nilai E pada register A1. $emudian pada baris kedua7 3OV A6CA* * kita mengcopykan nilai register A1 untuk AC. (adi setelah operasi ini register A1 akan tetap bernilai E, dan register

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.

-.B. PE()$&A6 )$&


4idalam pemrograman assambler, kita akan banyak sekali menggunakan interupsi untuk membantu kita dalam mengerjakan suatu pekerjaan. .ntuk menghasilkan suatu interupsi digunakan perintah !D dengan synta/; )$& Do!nt 4engan Do!nt adalah nomor interupsi yang ingin dihasilkan. Sebagai contohnya bila kita ingin menghasilkan interupsi 01h, bisa dituliskan dengan; )$& ,1h , maka interupsi 01h akan segera terjadi.

0B

BAB V) 3E3B4A& P(O'(A3 5O3


G.1. 3ODE* P(O'(A3 5O3
.ntuk membuat program .2O- yang hanya menggunakan 1 segment, bisa anda buat dengan model program seperti gambar @.1. Bentuk yang digunakan disini adalah bentuk program yang dianjurkan7!deal*. 4ipilihnya bentuk program ideal dalam buku ini dikarenakan pertimbangan dari berbagai keunggulan bentuk program ideal ini seperti, prosesnya lebih cepat dan lebih mudah digunakan oleh berbagai bahasa tingkat tinggi yang terkenal7 urbo Pascal dan 2*. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" .3ODE* S3A** .5ODE O(' 1 6 1abel1 ; .3P 1abel0 G"""""""""""""""""""""G K '-PA 4A A P#O&#A- K G"""""""""""""""""""""G 1abel0 ; G"""""""""""""""""""""G K '-PA P#O&#AG"""""""""""""""""""""G K

)$& 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.

G.1.1 .3ODE* S3A**


anda directi,e ini digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan oleh program kita. Supaya lebih jelas model"model yang bisa digunakan adalah ; ; &)$> (ika program anda hanya menggunakan 1 segment seperti program 2O-. -odel ini disediakan khusus untuk program 2O-. ; S3A** (ika data dan code yang digunakan oleh program kurang dari ukuran 1 segment atau @8 $B. ; 3ED)43 (ika data yang digunakan oleh program kurang dari @8 $B tetapi code yang digunakan bisa lebih dari @8 $B.

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:

BAB E 3E$5E&A% 64(4<


E.1. 3E$5E&A% 64(4<
Bila dihasilkan interupsi 01h apa yang akan dikerjakan oleh komputer J. (a+abnya, ada banyak sekali kemungkinan. Pada saat terjadi interupsi 01h maka pertama"tama yang dilakukan komputer adalah melihat isi atau nilai apa yang terdapat pada register AC. -isalkan bila nilai AC adalah 0 maka komputer akan mencetak sebuah karakter, berdasarkan kode AS2!! yang terdapat pada register 41. Bila nilai pada register AC bukanlah 0, pada saat dilakukan interupsi 01h maka yang dikerjakaan oleh komputer akan lain lagi. 4engan demikian kita bisa mencetak sebuah karakter yang diinginkan dengan meletakkan angka 0 pada register AC dan meletakkan kode AS2!! dari karakter yang ingin dicetak pada register 41 sebelum menghasilkan interupsi 01h. JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJ J P(O'(A3 " A .AS3 J J <4$'S) " 3E$5E&A% %A(A&E( J J IAI DE$'A$ )$& ,1 J JKKKKKKKKKKKKKKKKKKKKKKKKKKStoKJ .3ODE* S3A** .5ODE O(' 1 h Proses " 3OV A6C ,h J $ilai ser:is nt!2 menceta2 2ara2ter 3OV D*CIAI J D* K %ara2ter AS5)) yang a2an diceta2 )$& ,1h J 5eta2 2ara2ter NN )$& , h J Selesai N 2embali 2e DOS E$D Proses Program E.1. 3enceta2 seb!ah 2ara2ter Setelah program A.1. anda ketik compile"lah dengan menggunakan AS-.'3' dengan perintah ; 5"?@tasm a &!rbo Assembler Version ,. Borland )nternational Assembling #ile" a .AS3 Error messages" $one Darning messages" $one Passes" 1 (emaining memory" 7 G2 5"?@dir a .F Vol!me in dri:e 5 is Sto Directory o# 5"? A A AS3 OB. , #ile+sA - G =;18;B8 7"-Gp 1EB =;18;B8 11",8p G=- bytes 5opyright +cA 1B==C 1BB

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.

E.,. 3E$5E&A% %A(A%&E( BESE(&A A&()B4&


Sebuah karakter disertai dengan +arna tentunya akan lebih menarik. .ntuk itu anda bisa menggunakan interupsi ke 19h dengan aturan pemakaiannya ; !DP. AC F 9Eh A1 F $ode AS2!! dari karakter yang akan dicetak BC F Domor halaman79 untuk halaman 1* B1 F Atribut atau +arna dari karakter yang akan dicetak 23 F Banyaknya karakter tersebut akan dicetak Setelah semua register dimasukkan nilainya maka lakukanlah interupsi 19h. Perlu anda perhatikan bah+a interupsi ini mencetak karakter tanpa menggerakkan kursor.

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.

E.7. PE$'4*A$'A$ DE$'A$ *OOP


Perintah 1OOP digunakan untuk melakukan suatu proses yang berulang" ulang. Adapun synta/ dari perintah ini adalah ; *OOP &!1!an ujuan dapat berupa suatu label yang telah didefinisikan, contoh; 3OV 59C7 J Banya2nya peng!langan yang dila2!2an 4lang " )$& 1 h J &empat ter1adinya peng!langan *OOP 4lang J *ompat 2e label I4langI Pada proses pengulangan dengan perintah 1OOP, register 23 memegang suatu peranan yang khusus dimana register ini dijadikan sebagai counterNpenghitung terhadap banyaknya looping yang boleh terjadi. Setiap ditemui perintah 1OOP, maka register 23 akan dikurangi dengan 1 terlebih dahulu, kemudian akan dilihat apakah 23 sudah mencapai 9. Proses looping akan selesai bila nilai

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

E.8. 3E$5E&A% BEBE(APA %A(A%&E(


.ntuk mencetak beberapa karakter, bisa anda gunakan proses looping. Sebagai contoh dari penggunaan looping ini bisa dilihat pada program A.B. JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJ J P(O'(A3 " AB5 .AS3 J J <4$'S) " 3E$5E&A% 1G B4A6 J J %A(A%&E( 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*CIAI J D*K2ara2ter IAI ata! D*K81h 3OV 59C1 h J Banya2nya peng!langan yang a2an 4lang " )$& ,1h J 5eta2 2ara2ter NN )$5 D* J &ambah D* dengan 1 *OOP 4lang J *ompat 2e 4lang E$D )$& , h Proses Program E.7. Peng!langan dengan perintah *OOP

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

BAB V))) OPE(AS) A()&3A&)%A


=.1. OPE(AS) PE($A3BA6A$ =.1.1. ADD
.ntuk menambah dalam bahasa assembler digunakan perintah ADD dan AD5 serta )$5 . Perintah A44 digunakan dengan synta/ ; ADD &!1!anCAsal Perintah A44 ini akan menambahkan nilai pada ujuan dan Asal. Casil yang didapat akan ditaruh pada ujuan, dalam bahasa pascal sama dengan instruksi &!1!an"K&!1!an L Asal . Sebagai contohnya ; 3OV A6C1-h J A6"K1-h 3OV A*C8 J A*"K8 ADD A6CA* J A6"KA6LA*C 1adi A6K1Bh Perlu anda perhatikan bah+a pada perintah A44 ini antara ujuan dan Asal harus mempunyai daya tampung yang sama, misalnya register AC7? bit* dan A17? bit*, A371@ bit* dan B371@ bit*. -ungkin ada yang bertanya"tanya, apa yang akan terjadi bila ujuan tempat hasil penjumlahan disimpan tidak mencukupi seperti pertambahan 10B8h dengan H001h. 1,78 h Biner ;;@ 1 1 11 1 <,,1 h Biner ;;@ 1111 1 1 1 ;;;;;;;;;; L ;;;;;;;;;;;;;;;;;;;;; L 1 8-- h 1 1 1 1 1 1 Pada pertambahan diatas dapat dilihat bah+a pertambahan bilangan 10B8 dengan H001 akan menghasilkan nilai 198::. Supaya lebih jelas dapat anda lihat pada pertambahan binernya dihasilkan bit ke 1A, padahal register terdiri atas 1@ bit saja. Operasi pertambahan yang demikian akan menjadikan carry flag menjadi satu, 2ontoh ; 3OV A9C1,78h J $)lai A9"K1,78h dan carryK 3OV B9C <,,1h J $ilai B9"K<,,1h dan carryK ADD A9CB9 J $ilai A9 men1adi 8--h dan carryK1

=.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.

=.1.8. P(O'(A3 PE$A3BA6A$ DA$ DEB4'


Setelah apa yang telah kita pelajari, marilah sekarang kita menjadikannya sebuah program dengan semua contoh yang telah diberikan. JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJ J P(O'(A3 " &A3BA6.AS3 J J <4$'S) " 3E*)6A& PE$A3BA6A$ J J >A$' D)*A%4%A$ J J O*E6 BE(BA'A) J J PE()$&A6 J JKKKKKKKKKKKKKKKKKKKKKKKKKKKStoKJ .3ODE* S3A** .5ODE O(' 1 h Proses " 3OV A6C1-h J A6"K1-h 3OV A*C8 J A*"K8 ADD A6CA* J A6"KA6LA*C 1adi A6K1Bh 3OV A9C1,78h J $)lai A9"K1,78h dan carryK 3OV B9C <,,1h J $ilai B9"K<,,1h dan carryK ADD A9CB9 J A9"KA9LB9C 1adi nilai A9K 8--h 3OV A9C1,78h J A9 K 1,78h 5< K 3OV B9CBAB5h J B9 K BAB5h 5< K 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 )$5 A* )$& , h E$D Proses J A*"KA*L1C nilai pada A* ditambah 1

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;<>.

=.,. OPE(AS) PE$'4(A$'A$ =.,.1. S4B B8

.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:

)$& , h E$D &Data

J %embali 2e DOS Program =.,. 3eng!rang2an ang2a yang menyebab2an Borro0

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

=.7. OPE(AS) PE(%A*)A$


.ntuk perkalian bisa digunakan perintah -.1 dengan synta/; 34* S!mber Sumber disini dapat berupa suatu register ? bit7-is;B1,BC,..*, register 1@ bit7-is; B3,43,..* atau suatu ,aribel. Ada 0 kemungkinan yang akan terjadi pada perintah -.1 ini sesuai dengan jenis perkalian ? bit atau 1@ bit. Bila Sumber merupakan ? bit seperti 34* B6 maka komputer akan mengambil nilai yang terdapat pada BC dan nilai pada A1 untuk dikalikan. Casil yang didapat akan selalu disimpan pada register A3. Bila sumber merupakan 1@ bit

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.

B.,. &)PE DA&A


4idalam assembler kita bisa menyimpan data dengan berbagai tipe data yang berbeda"beda. $ita dapat memberikan nama pada data tersebut, untuk memudahkan dalam pengaksesan data tersebut. Adapun tipe data yang terdapat pada assembler dapat anda lihat pada gambar E.1. """""""""""""""""""""""""""""""""""""""""" DA-A .$.#AD """"""""""""""""""""""""""""""""""""""""""

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

B.7. PE$>)3PA$A$ DA&A DA*A3 3E3O(>


Sebelum kita melangkah lebih jauh, marilah kita lihat dahulu bagaimana komputer menyimpan suatu nilai didalam memory. .ntuk itu ketikkanlah program

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?:@*.

B.8. 3E$''4$A%A$ PO)$&E(


$ini kita sudah siap untuk melihat bagaimana memindahkan data dari ,ariabel maupun register yang berbeda tipe datanya, dengan menggunakan pointer. .ntuk itu digunakan perintah P # dengan format penulisan ; &ipeData P&( operand

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

Program B.8. 3enamp!ng nilai , register dalam 1 :ariabel

8:

BAB 9 3A$)P4*AS) B)& DA$ *O')%A


1 .1. 'E(BA$' $O&
Operator DO akan mengin,ers suatu nilai seperti yang terlihat pada gambar 19.1. G"""""G""""""""""G K A K Dot 7A* K G"""""G""""""""""G K 9 K 1 K K 1 K 9 K G"""""G""""""""""G 'ambar 1 .1. &abel Operator $O& Operasi Dot di dalam assembler, digunakan dengan synta/ ; $O& &!1!anCS!mber Casil dari operasi not ini akan disimpan pada &!1!an , sebagai contoh, instruksi $O& A*C7<h akan menghasilkan nilai 29h bagi A1. -ungkin masih ada pembaca yang bingung dengan operasi ini. Baiklah untuk lebih jelasnya kita lihat operasi di atas secara per bit. B H G""G"GG""G"G Bilangan ; 9911 1111 2 9 G""G"GG""G"G Dot ; 1199 9999

1 .,. 'E(BA$' A$D


Operator AD4 akan menghasilkan nilai nol bila salah satu operandnya bernilai nol. 4an hanya akan bernilai satu bila kedua operandnya bernilai satu. G"""""G"""""G""""""""""G K A K B K A AD4 B K G"""""G"""""G""""""""""G K 9 K 9 K 9 K

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 .8. 'E(BA$' 9O(


Operator 3O# akan menghasilkan nol untuk dua nilai yang sama nilainya dan satu untuk yang berbeda. G"""""G"""""G""""""""""G K A K B K A 3O# 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 9 K G"""""G"""""G""""""""""G 'ambar 1 .8. &abel Operator 9O( Operasi 3O# di dalam assembler, digunakan dengan synta/ ; 9O( &!1!anCS!mber Casil dari operasi 3O# ini akan disimpan pada &!1!an , sebagai, contoh instruksi ; 3OV A9C A1,h 9O( A9CA9 Casil operasi 3O# diatas pasti akan menghasilkan nilai 9 bagi register A3. )ngatlah" Setiap bilangan yang di 9O( dengan bilangan yang sama pasti menghasilkan bilangan 9.

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*.

1 .G. S6* + Shi#t *e#t A


Operator SC1 akan menggeser operand1 ke kiri sebanyak operand0 secara per bit. $emudian bit kosong yang telah tergeser di sebelah kanannya akan diberi nilai nol. Operator SC1 digunakan dengan synta/ ; S6* Operand1COperand, Supaya lebih jelas bisa anda lihat pada gambar 19.:. Operand0 harus digunakan register 21 bila pergeseran yang dilakukan lebih dari satu kali. G"""""""""""""""""""""G =""""" K K ="""""" 9 G"""""""""""""""""""""G 'ambar 1 .-. Operasi S6* 3OV A9C7<h 3OV 5*C7 S6* A9C5* J 'eser 7 bit 2e 2iri Akan menghasilkan nilai H?h pada register A3. Operasi detilnya dapat dilihat di ba+ah ini. BHh ; 9911 1111 SC1 1 ; 9111 1119 7FA'h* SC1 0 ; 1111 1199 7FH2h* SC1 B ; 1111 1999 7FH?h* !nstruksi ;

1 .E. S6( + Shi#t (ight A


Operator SC# akan menggeser operand1 ke kanan sebanyak operand0 secara per bit dan menambahkan nilai nol pada bit yang tergeser seperti halnya pada operator SC1. Operator SC# digunakan dengan synta/ ;

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

BAB 9) ADD(ESS)$' 3ODES


11.1. PE$DA64*4A$
Pada bab"bab sebelumnya kita telah lihat, bagaimana perintah 5-O65 mengcopykan suatu nilai kepada suatu register atau ,ariabel. $ita bisa mengcopykan nilai pada suatu register, ,ariabel ataupun lokasi memory dengan berbagai cara. Secara umum banyaknya cara yang dapat digunakan dapat dibagi menjadi A, seperti pada gambar 11.1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ADD(ESS)$' 3ODE <O(3A& SE'3E$& (E')S&E( ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1. )mmediate Data &ida2 Ada ,. (egister (egister &ida2 Ada 7. Direct Displacement DS *abel DS 8. (egister )ndirect SB9T DS SBPT SS SS)T DS SD)T DS -. Base (elati:e SB9TLDisplacement DS SBPTLDisplacement SS G. Direct )ndexed SD)TLDisplacement DS SS)TLDisplacement DS E. Base )ndexed SB9TSS)TLDisplacement DS SB9TSD)TLDisplacement DS SBPTSS)TLDisplacement SS SBPTSD)TLDisplacement SS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 'ambar 11.1. Addressing 3odes Perlu anda perhatikan bah+a ada juga pengcopyan data yang terlarang, yaitu ; 1. Pengcopyan data antar segment register, seperti; 3OV DSCES .ntuk memecahkan hal ini, anda bisa menggunakan register general purpose

: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.

11.,. )33ED)A&E ADD(ESS)$'


Pengcopyan data yang tercepat ialah yang dinamakan dengan !mmediate Addressing dan #egister Addressing. !mmediate Addressing adalah suatu pengcopyan data untuk suatu register ?,1@ atau B07?9B?@* bit langsung dari suatu angka. 2ontohnya ; 3OV A9C- h 3OV EA9C11,,7788h U= 7=G@ !mmediate Addressing dapat juga mendapatkan nilainya melalui suatu constanta yang telah didefinisikan dengan perintah 'U., seperti ;

:0

A EO4 GEh J J 3OV A9CA Perintah diatas akan mengcopykan nilai @Ah untuk register A3.

11.7. (E')S&E( ADD(ESS)$'


#egister Addressing adalah suatu proses pengcopyan data antar register. Pengcopyan antar register ini harus digunakan register yang berukuran sama, seperti A1 dan BC, 23 dan A3. 2ontah perintahnya; 3OV A9C59 #egister Addressing dapat juga dapat juga hanya terdiri atas sebuah register seperti pada perintah )$5 59 . J/KKKKKKKKKKKKKKKKKKKKKKKK?J J P(O'(A3 " ADD(1.AS3 J J A4&6O( " Sto J J <4$'S) " PE(%A*)A$ J J DE$'A$ = 7=G J J?KKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .7=G J 4nt!2 prosesor = 7=G .5ODE O(' 1 h Proses " 3OV EA9C1,78-GE=h J )mmediate Addressing 3OV ED9C7711,,88h J )mmediate Addressing 3OV EB9CED9 J (egister Addressing 34* EB9 J (egister Addressing E$D Proses Program 11.1. Per2alian pada = 7=G Aturan perkalian pada pada ?9B?@ ini sama dengan perkalian yang telah kita bicarakan didepan. Pada prosesor ?9B?@ digunakan register"register B0 bit, seperti 'A3 ,'B3 dan '43 pada contoh program 11.1. .ntuk menggunakan kelebihan pada komputer ?9B?@ ini kita harus menambahkan directi,e .7=G .

11.8. D)(E5& ADD(ESS)$'


Secara umum 4irect Addressing ialah suatu pengcopyan data pada suatu register dan simbol. 2ontoh;

: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.

11.-. (E')S&E( )$D)(E5& ADD(ESS)$'


#egister !ndirect Addressing biasanya digunakan untuk mengakses suatu data yang banyak dengan mengambil alamat efekti,e dari data tersebut. #egister"register yang bisa digunakan pada addressing ini adalah B3,BP,S! dan 4!. etapi bila anda memrogram pada prosesor ?9B?@74engan menambahkan directi,e .B?@* maka semua register general purpose bisa dipakai. .ntuk mendapatkan alamat efekti,e dari suatu data bisa digunakan perintah 1'A71oad 'ffecti,e Addres* dengan synta/ ; *EA (egCData .ntuk mengakses data yang ditunjukkan oleh register (eg , setelah didapatkannya alamat efekti,e harus digunakan tanda kurung siku 7I ST I*. (ika pada perintah pengaksesannya tidak disebutkan segmennya, maka yang digunakan adalah segment default. Seperti bila digunakan register B3 sebagai penunjuk offset, maka segment 4S yang digunakan. Sebalikkan bila digunakan register BP sebagai penunjuk offset, maka segment SS yang digunakan. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J P(O'(A3 " ()D.AS3 J J A4&6O( " Sto J J <4$'S) " 3E$'A%SES DA&A J J 3E*A*4) A*A3A& J J E<E%&)VE J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses %al DB IAB5DE<I Proses" *EA B9C%al J Ambil O##set %al 3OV 59C, 4lang" 3OV D*CSB9T J 2ode AS5)) yang ingin diceta2 3OV A6C ,h J $ilai ser:is nt!2 menceta2 2ara2ter

: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.

11.G. BASE (E*A&)VE ADD(ESS)$'


(enis addressing ini biasanya digunakan untuk mengakses suatu tabel dengan mengambil alamat efekti,enya. Alamat efekti,e dari tabel tersebut nantinya digunakan sebagai patokan untuk mengakses data yang lain pada tabel tersebut. #egister yang digunakan sebagai penunjuk alamat efekti,e ini adalah register B3,BP,S! dan 4!. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J P(O'(A3 " B(A .AS3 J J A4&6O( " Sto J J <4$'S) " 3E$'A%SES DA&A 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 &abel DD 11hC- hC AhC18hC-Ah Proses" *EA B9C&abel 3OV A9C&abel ADD ADD ADD ADD A9CSB9TL, A9CSB9TL8 A9CSB9LGT A9CSB9L=T

)$& , h E$D &Data Program 11.7. Proses Base (elati:e Addressing

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

)$& , h E$D &Data

J SelesaiC 2embali 2e DOS NN

Program 11.8. 3enceta2 2alimat dengan Base (elati:e Addressing

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.

11.E. D)(E5& )$DE9ED ADD(ESS)$'


4irect !nde/ed Addressing mengambil alamat efekti,e dari suatu data dan mengakses data dengan menggunakan register 4! atau S!. Sebagai contohnya akan kita lihat tanggal dikeluarkannya #O- B!OS komputer. anggal dikeluarkannya #O- B!OS pada setiap komputer terdapat pada alamat mulai H999h;HHH:h sampai H999h;HHH2h. Pada daerah ini akan terdapat ? byte 7? huruf* yang berisi tanggal dikeluarkannya #O- B!OS. anggal yang tercantum menggunakan format penulisan tanggal Amerika, misalnya 98N9BNAB artinya 18 -aret 1EAB. J/KKKKKKKKKKKKKKKKKKKKKKKKKK?J J P(O'(A3 " V(B)OS.AS3 J J A4&6O( " Sto J J <4$'S) " 3E*)6A& VE(S) J J B)OS %O3P4&E( J J J

:?

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

Program 11.-. 3elihat Versi (O3 B)OS

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.

11.=. BASED )$DE9ED ADD(ESS)$'


(enis addressing ini biasanya digunakan untuk mengakses suatu record

: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

J , byte J 1 byte J 8 byte D4P +U@A

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

BAB 9)) 3E$5E&A% %A*)3A&


1,.1. 3E$5E&A% %A*)3A& DE$'A$ <4$'S) DOS
.ntuk mencetak kalimat, bisa digunakan interupsi 01 fungsi E dengan aturan; !DP. AC FE 4S;43 F Alamat String tersebut 2A A AD F $arakter I X I dijadikan tanda akhir tulisan JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJ J Program" 2al .asm J J Oleh " Sto J J <!ngsi " 3enceta2 String J J dengan )nt ,1 ser:is B J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ .3ODE* S3A** .5ODE O(' 1 h &data " .3P Proses %al DB IP(OSES PE$5E&A%A$ S&()$' IC17C1 CIXI %al1 DB ID)BE*A%A$' &A$DA X &)DA% B)SA D)5E&A% I Proses" 3OV A6C Bh J Ser:is 2e B 3OV D9CO<<SE& %al J Ambil Alamat O##set %al )$& ,1h J 5eta2 per2ara2ter sampai tanda X *EA D9C%al )$& ,1h J Ambil Alamat O##set %al J 5eta2 per2ara2ter sampai tanda X

*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.

1,.,. %A(A%&E( %O$&(O*


Pada program 10.1. kita telah menggunakan 0 buah karakter kontrol, yaitu 1971H* dan 1B72#*. $arakter kontrol yang tersedia untuk operasi pada ,ideo yang sering digunakan terdapat :, yaitu 9A, 9?, 9E, 19 dan 1B7&ambar 10.1*. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 5ODE $A3A <4$'S) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E Bel 3emberi2an s!ara BEEP = Bac2space+BSA 3emindah2an 2!rsor 1 2olom 2e bela2ang B 6orisontal &ab 3emindah2an 2!rsor = 2olom 2e 2anan 1 *ine <eed+*<A 3emindah2an 2!rsor 1 baris 2e ba0ah 17 5arriage (et!rn+5(A 3emindah2an 2!rsor men!1! a0al baris ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 'ambar 1,.1. %ara2ter %ontrol >ang Sering Dig!na2an Selain dari karakter kontrol pada gambar 10.1, masih terdapat karakter" karakter kontrol lain, yang sebagian besar digunakan untuk keperluan komunikasi komputer dengan periferalnya. $arakter kontrol yang tersedia pada AS2!! secara lengkap bisa anda lihat pada gambar 10.0. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 5ODE $A3A V 5ODE $A3A ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; $!l V 1G Data *in2 Escape 1 Start O# 6eading V 1E De:ice 5ontrol , Start O# &ext V 1= $egati:e Ac2no0ledge 7 End O# &ext V 1B Synchrono!s )dle 8 End O# &ransmission V , End O# &ransmission Bloc2 - EnR!iry V ,1 5ancel

@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))

1,.7. 3E$5E&A% %A*)3A& DE$'A$ A&()B4&$>A


Pada bagian sebelumnya kita mencetak kalimat dengan fungsi 4OS yang mencetak kalimat tanpa atribut. .ntuk mencetak kalimat dengan atributnya bisa digunakan fungsi dari B!OS, melalui interupsi 19h. Adapun yang harus anda persiapkan adalah; register A3 diisi dengan 1B99h, B1 diisi dengan atribut yang ingin ditampilkan, BC diisi dengan halaman tampilan, 41 diisi dengan posisi 3 tempat kalimat tersebut akan tercetak sedangkan 4C diisi dengan posisi L"nya. $arena fungsi ini tidak mengenal batas tulisan 5T5 seperti interupsi 01h ser,is E, maka kita harus mengisikan 23 dengan banyaknya karakter dalam kalimat. #egister 'S;BP digunakan untuk mencatat alamat dari kalimat yang ingin dicetak. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " A&&(;%*3.AS3 J J A!thor " Sto J J <!ngsi " 3enceta2 2alimat disertai J J atrib!tnya J J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;J J )$& 1 h J J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;J J )np!t " J J A9 K 17 h J J B* K Atrib!t J J B6 K 6alaman tampilan J J D* K Posisi 9 J J D6 K Posisi > J J 59 K Pan1ang 2alimatUdalam 2ara2ter@J J ES"BP K Alamat a0al string J J J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses

@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.

1,.8. PE$'A&4(A$ A&()B4&


Atribut atau +arna menggunakan 1 byte memory, yang akan menandakan +arna tulisan dan +arna dasar dari karakter yang akan tercetak. Byte atribut ini digunakan dengan masing"masing bitnya, dimana setiap bit mencatat +arnanya masing"masing. Adapun spesifikasinya adalah; Darna Dasar Darna &!lisan L;;;;L;;;;L L;;;;L;;;;L Bit;2e E G - 8 7 , 1 W W W W W W W W B* ( ' B ) ( ' B 5atatan" B* K Blin2 ata! ber2edip ( K 3erah ' K 6i1a! B K Bir! ) K )ntensitas 0arna .ntuk menghidupkan +arna yang diinginkan anda tinggal menjadikan bit tersebut menjadi satu. Sebagai contohnya bila and a menginginkan +arna tulisan Biru dengan +arna dasar Cijau, maka anda tinggal menghidupkan bit ke 9 dan : atau dengan angka 99199991b701h*. .ntuk menjadikannya berintensitas tinggi dan berkedip anda juga tinggal menjadikan bit ke B dan A menjadi satu719191991b*. Bila anda menghidupkan bit ke 9,1 dan 0 menjadi satu dan mematikan bit" bit lainnya maka anda akan mendapatkan campuran dari ketiga +arna tersebut7Putih* untuk +arna tulisan dan +arna hitam untuk +arna dasar. !nilah

@:

+arna normal yang biasa digunakan, yaitu +arna dengan atribut A.

@@

BAB 9))) BA$D)$'%A$ DA$ *O3PA&


17.1. *O3PA& &A$PA S>A(A&
Perintah (-P7(ump*, sudah pernah kita gunakan, dimana perintah ini digunakan untuk melompati daerah data program. Perintah (-P digunakan dengan synta/; .3P &!1!an Perintah (-P ini dikategorikan sebagai .nconditional (ump, karena perintah ini tidak menyeleksi keadaan apapun untuk melakukan suatu lompatan. Setiap ditemui perintah ini maka lompatan pasti dilakukan. Selain dari perintah jump tanpa syarat, masih banyak perintah (ump yang menyeleksi suatu keadaan tertentu sebelum dilakukan lompatan. Perintah jump dengan penyeleksian kondisi terlebih dahulu biasanya diikuti dengan perintah untuk melihat kondisi, seperti membandingkan dengan perintah 52-P572ompare*.

17.,. 3E3BA$D)$'%A$ DE$'A$ 53P


Perintah 2-P72ompare* digunakan untuk membandingkan 0 buah operand, dengan synta/; 53P Operand1COperand, 2-P akan membandingkan operand1 dengan operand0 dengan cara mengurangkan operand1 dengan operand0. 2-P tidak mempengaruhi nilai Operand1 dan Operand0, perintah 2-P hanya akan mempengaruhi flags register sebagai hasil perbandingan. Adapun flag"flag yang terpengaruh oleh perintah 2-P ini adalah; " OH akan 1, jika operand1 lebih kecil dari operand0 pada operasi bilangan bertanda. " SH akan 1, bila operand1 lebih kecil dari operand0, pada operasi bilangan bertanda. " PH akan 1, jika operand1 nilainya sama dengan operand0. " 2H akan 1, jika operand1 lebih kecil dari operand0 pada operasi bilangan tidak bertanda. Perlu anda ingat bah+a 2-P tidak dapat membandingkan antar 0 lokasi memory.

17.7. *O3PA& >A$' 3E$')%4&) 53P


Perintah 2-P yang hanya mempengaruhi flag register, biasanya diikuti dengan perintah lompat yang melihat keadaan pada flags register ini. (enis perintah lompat yang biasanya mengikuti perintah 2-P, terdapat 10 buah seperti pada gambar 1B.1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Perintah *ompat V %ondisi ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .A U.!mp )# Abo:e@ V *ompatC 1i2a Operand1 @ Operand, V !nt!2 bilangan tida2 bertanda .' U.!mp )# 'reater@ V *ompatC 1i2a Operand1 @ Operand,

@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.

17.8. *O3PA& BE(S>A(A&


Pada gambar 1B.1. anda telah melihat sebagian dari perintah lompat bersyarat. $ini akan kita lihat lompat bersyarat lainnya yang tersedia, seperti pada gambar 1B.0. idak seperti lompat tanpa syarat, 1ompat bersyarat hanya dapat melompat menuju label yang berjarak "10? sampai G10A byte dari tempat lompatan. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Perintah *ompat V %ondisi ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .A U.!mp )# Abo:e@ V *ompatC 1i2a Operand1 @ Operand, V !nt!2 bilangan tida2 bertanda .' U.!mp )# 'reater@ V *ompatC 1i2a Operand1 @ Operand, 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 .5 U.!mp 5arry@ V *ompatC 1i2a 5arry #lagK1

@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

BAB 9)V S&A5%


18.1. APA )&4 S&A5% P
Bila kita terjemahkan secara bebas, stack artinya adalah ItumpukanI. Stack adalah bagian memory yang digunakan untuk menyimpan nilai dari suatu register untuk sementara. Operasi" operasi pada assembler yang langsung menggunakan stack misalnya pada perintah P.SC, POP, P.SH dan POPH. Pada program 2O- yang hanya terdiri atas satu segment, dimanakah letak dari memory yang digunakan untuk stack J. Seperti pasangan 2S;!P yang menunjukkan lokasi dari perintah selanjutnya yang akan dieksekusi, pada stack digunakan pasangan SS;SP untuk menunjukkan lokasi dari stack. .ntuk itu marilah kita lihat dengan debug; 5"?@deb!g ;r A9K B9K 59K D9K SPK<<EE BPK S)K D)K DSK7187 ESK7187 SSK7187 5SK7187 )PK 1 $V 4P E) P* $Q $A PO $5 7187" 1 < DB < ;R 4ari percobaan ini dapat kita lihat bah+a SS menunjukkan angka yang sama dengan 2S7B18B* atau dengan kata lain 2S dan SS berada pada satu segment. #egister !P yang menunjukkan lokasi stack bernilai HHH' atau dengan kata lain stack terletak pada akhir segment. $arena inilah pada program 2O- sebaiknya anda jangan sembarangan mengubah data pada akhir segment, karena hal ini akan mengacaukan program. Bila kita gambarkan letak dari stack akan tampak seperti gambar 18.1 L;;;;;;;;;;;;;;L V *eta2 Dari V 5S")PWV Program V V V L;;;;;;;;;;;;;;L V Area %osong V SS"SPWL;;;;;;;;;;;;;;L V &empat Stac2 V L;;;;;;;;;;;;;;L 'ambar 18.1. *o2asi Stac2

A0

18.,. 5A(A %E(.A S&A5%


Seperti yang telah dikatakan, bah+a stack digunakan sebagai tempat penampung sementara nilai dari suatu register. Supaya lebih jelas lihatlah cara kerja dari program 18.1. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " $S&A5%.AS3 J J A!thor " Sto J J <!ngsi " 3enceta2 2alimat , 2ali J J dengan operasi yang mirip J J dengan stac2 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 3OV Stac2sCD9 3OV A6C B )$& ,1h *EA D9C'anti )$& ,1h 3OV D9CStac2s )$& ,1h Exit " )$& , h E$D &Data Program 18.1. 3enceta2 2alimat , 2ali

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

18.7. P4S6 DA$ POP


Stack dapat kita bayangkan sebagai sebuah tabung yang panjang. Sedangkan nilai pada register dapat dibayangkan berbentuk koin yang dapat dimasukkan dalam tabung tersebut. .ntuk memasukkan nilai suatu register pada stack, digunakan perintah push dengan synta/; P4S6 (eg1GBit Sebagai contohnya pada perintah; 3OV A9C1, 3OV B9C77 3OV 59CBB P4S6 A9 J Simpan nilai A9 pada stac2 P4S6 B9 J Simpan nilai B9 pada stac2 P4S6 59 J Simpan nilai 59 pada stac2 -aka pada stack akan tampak seperti; ==== &br180.P!3 >>>>> 'ambar 18.,. Penyimpanan $ilai Pada Stac2 4ari gambar 18.0. dapat anda lihat bah+a nilai yang terakhir dimasukkan7EE* akan terletak pada puncak tabung stack. .ntuk mengambil keluar koin nilai pada tabung stack, digunakan perintah pop dengan synta/; POP (eg1GBit Perintah POP akan mengambil koin nilai pada stack yang paling atas dan dimasukkan pada #eg1@Bit. 4ari sini dapat anda lihat bah+a data ya ng terakhir dimasukkan akan merupakan yang pertama dikeluarkan. !nilah sebabnya operasi stack dinamankan *)<O 71ast !n Hirst Out*. Sebagai contohnya, untuk mengambil nilai dari register A3, B3 dan 23 yang disimpan pada stack harus dilakukan pada register 23 dahulu barulah B3 dan A3, seperti; POP 59 J Ambil nilai pada p!nca2 stac2C mas!22an 2e 59 POP B9 J Ambil nilai pada p!nca2 stac2C mas!22an 2e B9 POP A9 J Ambil nilai pada p!nca2 stac2C mas!22an 2e A9 Perhati2an"

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

18.8. P4S< DA$ POP<


P.SH dan POPH, sama halnya dengan perintah P.SC dan POP. Perintah P.SH digunakan untuk menyimpan nilai dari flags register pada stack sedangkan POPH digunakan untuk mengambil nilai pada stack dan disimpan pada flags register. $edua perintah ini digunakan tanpa operand; P4S6< J Simpan nilai <lags pada stac2 POP< J Ambil nilai pada stac2 Perintah P.SCH dan POPH digunakan untuk menyelamatkan kondisi dari flag terhadap perubahan. P.SCH dan POPH biasanya digunakan pada operasi yang sangat mementingkan nilai pada flag ini, seperti pada operasi aritmatika.

A@

BAB 9V 3AS4%A$ DA() %E>BOA(D


$eyboard merupakan sarana bagi kita untuk berkomunikasi dengan program. Pada bagian ini akan kita lihat bagaimana caranya untuk menanggapi masukan dari keyboard. etapi sebelumnnya anda tentunya harus mengerti sedikit mengenai beberapa hal penting yang berkaitan dengan keyboard itu.

1-.1. %ODE S5A$ DA$ AS5))


Prosesor pada keyboard mendeteksi setiap penekanan maupun pelepasan tombol pada keyboard. Prosesor ini menterjemahkan setiap sinyal yang terjadi berdasarkan posisi tertentu menjadi apa yang dinamakan kode Scan. 4engan demikian tombol 5A5 dan 5B5 akan mempunyai kode Scan yang berbeda karena posisinya memang berbeda. 1ain halnya untuk tombol 5A5=A besar> dan 5a5=a kecil> yang terdapat pada posisi yang sama, akan mempunyai kode Scan yang sama. $ode Scan ini biasanya tidak berguna bagi kita. $ita biasanya hanya menggunakan kode AS2!! dan '/tended yang merupakan hasil terjemahan dari kode scan oleh keyboard handler. $ode AS2!! adalah kode yang melambangkan suatu karakter baik berupa huruf,angka, maupun simbol"simbol grafik. -isalkan angka 515 akan dilambangkan dengan kode AS2!! 8E. .ntuk kode AS2!! ini bisa anda lihat pada lampiran.

1-., APA )&4 %ODE E9&E$DED P


$ode AS2!! telah menyediakan sebanyak 0:@ karakter dengan beberapa karakter kontrol, misalnya X19 untuk pindah baris dan X1B untuk 'nter yang akan menggerakkan kursor kesamping kiri. etapi fungsi yang telah disediakan ini tidak mampu untuk menampilkan ataupun mendeteksi tombol fungsi misalnya H1, H0, HB dan Come. ombol kombisasi juga tidak dapat dideteksi oleh karakter AS2!! , misalnya penekan tombol shif disertai tombol H1, penekanan 2trl disertai tombol Come, dan lain"lain. Penekanan terhadap tombol"tombol fungsi dan tombol kombinasi akan menghasilkan kode AS2!! 9=nil>. $arena alasan diatas maka diciptakanlah suatu kode yang dinamakan sebagai kode '3 'D4'4. $ode '/tended ini dapat mendeteksi penekanan terhadap tombol"tombol fungsi maupun tombol kombinasi. .ntuk kode e/tended bisa anda lihat pada lampiran.

1-.7. 3AS4%A$ SA&4 %A(A%&E(


!nterupsi dari B!OS, yaitu interupsi 1@h ser,is 9 dapat digunakan untuk mendapatkan masukan satu karakter dari keyboard. Casil dari pembacaan karakter fungsi ini akan diletakkan pada register A3. Bila terjadi penekanan pada tombol biasa maka byte rendah dari A3=A1>, akan menunjukkan kode AS2!! dari tombol tersebut dan byte tnggi dari A3=AC> akan berisi kode Scan dari tombol tersebut. Bila yang ditekan adalah tombol khusus7e/tended* yang akan menghasilkan kode AS2!! 9 maka byte rendah dari register A3=A1> akan menghasilkan kode AS2!! 9 dan byte tinggi dari A3=AC> akan akan berisi kode e/tended dari tombol

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.

1-.8. 3E$DE&E%S) PE$E%A$A$ SE3BA(A$' &O3BO*


4engan fungsi 11h dari interupsi 1@h, kita bisa mendeteksi terhadap penekanan tombol,sama halnya seperti yang dilakukan oleh fungsi keypressed pada bahasa pascal. Hungsi ini akan mendeteksi keyboard buffer, bila pada keyboard buffer terdapat suatu tombol maka ia akan membuat Rerro flags menjadi nol=9> dan register A1 berisi kode AS2!! dari karakter tersebut sedangkan register AC akan berisi kode Scan dari tombol tersebut. Sebaliknya jika pada keyboard buffer tidak ada karakter maka Rerro flags akan bernilai satu =1>. $eyboard buffer adalah suatu penampung yang digunakan untuk menampung setiap penekanan tombol pada keybaord. 4aya tampung normal dari keyboard buffer adalah 1: karakter. (ika keyboard buffer telah penuh, speaker akan mengeluarkan tanda berupa suara beep. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " %E>P(ESS.AS3 J J A!thor " Sto J J <!ngsi " 3engece2 apa2ah ada J J tombol yang dite2an J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J )$&E(4PS) 1Gh J JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJ J )np!t" O!tP!t" J J A6 K 1 .i2a Ada tombol yang dite2an J J Q< K dan J J A* K 2ode AS5)) J J A6 K Scan 5ode J J J J .i2a &ida2 ada pene2anan &ombol J J Q< K 1 J J J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses %al DB I&e2an sembarang tombol !nt!2 berhenti N I DB 17C1 CIXI Proses " 3OV A6C1 J Ser:is !nt!2 mengece2 b!##er 2eyboard )$& 1Gh J *a2sana2an N .$Q E9)& J .i2a ada tombol yang dite2anC lompat

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

Program 1-.,. 3emb!at #!ngsi %eypressed

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.

1-.-. 3AS4%A$ %A*)3A& DA() %E>BOA(D


Pada program"program sebelumnya kita hanya bisa mendapatkan masukan satu karakter pada keybaord, bagaimana jika diinginkan masukan berupa suatu kalimatJ .ntuk itu 4OS telah menyedikannya. !nterupsi 01h ser,is ke 9Ah, digunakan untuk mendapatkan masukan dari keyboard lebih dari satu karakter. Adapun aturan pemakainya adalah; !DP. O. P. AC F 9Ah Buffer yang berisi string 4S;43F Buffer hasil masukan dari keyboard .ntuk menggunkan fungsi ini anda harus menyediakan sebuah buffer untuk menampung hasil masukan dari keyboard. Anda bisa membuat sebuah buffer seperti; B!##er DB 9C>CQ D4P+PA Pada byte pertama yang kita gambarkan sebagai H9H , digunakan sebagai tanda dari banyaknya karakter yang dapat dimasukkan dari keyboard ditambah 1. Seperti bila anda memberikan nilai 0B, maka karakter maksimum yang dapat dimasukkan adalah 00 karakter, karena satu karakter lagi digunakan khusus oleh tombol 'nter794h*. Pada byte kedua yang kita gambarkan sebagai H>H ,digunakan oleh fungsi ini sebagai indikator banyaknya karakter yang telah diketikkan oleh user7 ombol 'nter=94h> tidak akan dihitung*. Anda bisa memberikan tanda HPH untuk byte kedua ini, karena nilainya akan diisi secara otomatis nantinya. Pada byte ketiga yang kita gambarkan sebagai HQH inilah yang nantinya merupakan a+al dari masukan string akan ditampung. Anda harus menyediakan banyaknya byte yang dibutuhkan, sesuai dengan byte pertama7 H9H *.

?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

Program 1-.7. 3as!2an string dari %eyboard

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

BAB 9V) P(O5ED4(E


Procedure merupakan suatu alat bantu yang sangat berguna. 4engan procedure suatu program yang besar bisa diselesaikan dengan lebih mudah. Proses pencarian kesalahanpun akan lebih mudah bila digunakan procedure.

1G.1. 3E3B4A& P(O5ED4(E


.ntuk membuat procedure bisa anda gunakan bentuk seperti pada gambar 1@.1. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" DamaP P(O5 $EA( N <A( G"""""""""G K Program K G"""""""""G (E& DamaP E$DP """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 'ambar 1G.1. 3odel Proced!re 5DamaP5 adalah nama dari procedure yang kita definisikan sendiri. .ntuk memudahkan nama untuk procedure bisa anda definisikan sesuai dengan fungsi dari procedure tersebut, seperti 21S untuk procedure yang tugasnya menghapus layar. 4ibelakang kata 5P#O25 anda harus memilih bentuk dari procedure tersebut, yaitu 5D'A#5 atau 5HA#5. Bentuk 5D'A#5 digunakan jika procedure tersebut nantinya dipanggil oleh program yang letaknya masih satu segment dari procedure tersebut. Pada program 2O- yang terdiri atas satu segment, kita akan selalu menggunakan bentuk 5D'A#5. Sebaliknya bentuk 5HA#5 ini digunakan bila procedure dapat dipanggil dari segment lain. Bentuk ini akan kita gunakan pada program '3'. Perintah 5#' 7#eturn*5 digunakan untuk mengembalikan $ontrol program pada sipemanggil procedure. Pada bentuk D'A# perintah #' ini akan memPOP atau mengambil register !P dari stack sebagai alamat loncatan menuju program pemanggil procedure. Sedangkan pada bentuk 5HA#5 perintah #' akan mengambil

?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.

1G.,. 3E$''4$A%A$ P(O5ED4(E


Sebagai contoh dari pemakaian procedure akan kita lihat pada program 1@.1 yang mencetak karakter dengan procedure. JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJ J P(O'(A3 " P(O5W%A(.AS3 J J <4$'S) " 3E$5E&A% %A(A&E( J J DE$'A$ P(O5ED4(E J J J JKKKKKKKKKKKKKKKKKKKKKKKKKKStoKJ .3ODE* S3A** .5ODE O(' 1 h Proses " 5A** 5eta2W%ar J Panggil 5eta2W%ar )$& , h 5eta2W%ar P(O5 $EA( 3OV A6C ,h 3OV D*CISI )$& ,1h J 5eta2 2ara2ter (E& J %embali 2epada si pemanggil 5eta2W%ar E$DP J E$D Proced!res E$D Proses Program 1G.1 3engg!na2an Proced!re

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.

JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJ J P(O'(A3 " P(O5W%A1.AS3 J J <4$'S) " 3E$5E&A% %A(A&E( J

?:

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.

?@

BAB 9V)) 3A5(O


-acro hampir sama dengan procedure, yang dapat membantu anda dalam membuat program yang besar. 4engan -acro anda tidak perlu menggunakan perintah 52A115 dan anda juga bisa menggunakan parameter dengan mudah. Suatu ciri dari pemrograman bahasa tingkat tinggi%

1E.1. 3E3B4A& 3A5(O


-acro adalah lebih mudah dibuat daripada procedure. .ntuk membuat -acro bisa anda gunakan bentuk seperti pada gambar 1A.1. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Dama- 3A5(O VP1,P0,,W G""""""""""""G K Program K G""""""""""""G E$D3 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 'ambar 1E.1. 3odel 3acro 5P15 dan 5P05 adalah parameter yang bisa anda gunakan pada macro. Parameter ini berbentuk optional, artinya bisa digunakan ataupun tidak. Supaya lebih jelas bisa anda lihat pada program -A21 yang menggunakan macro ini untuk mencetak karakter. 5eta2W%ar 3A5(O %ar 3OV 59C7 3OV A6C , 3OV D*C%ar 4lang " )$& ,1h J 5eta2 %ara2ter *OOP 4lang E$D3 J End 3acro J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;J J Program " 3A51.AS3 J J <!ngsi " 3engg!na2an 3acro J J 4nt!2 menceta2 J J h!r!# ISSSI J J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;J .3ODE* S3A** .5ODE O(' 1 h Proses" 5eta2W%ar ISI J 5eta2 6!r!# S )$& , h E$D Proses Program 1E.1. 3engg!na2an 3acro

?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.

1E.,. *ABE* PADA 3A5(O


Pada macro anda bisa menggunakan label seperti biasa. etapi anda harus ingat, karena setiap pemanggilan -acro akan menyebabkan seluruh isi macro tersebut disisipkan pada program, maka pada macro yang didalamnya menggunakan label hanya dapat dipanggil sebanyak satu kali. Bila anda menggunakanya lebih dari satu kali maka akan terjadi 5 FFErrorFF Symbol already de#ined else0here" 4*A$' 5 karena dianggap kita menggunakan label yang sama. .ntuk menghindari hal itu, gunakanlah directif 1O2A1. 4engan directif 1O2A1 assembler akan membedakan label tersebut setiap kali terjadi pemanggilan terhadapnya. 5eta2W%ar 3A5(O %ar *O5A* 4lang J *abel I4langI 1adi2an *ocal 3OV 59C7 3OV A6C , 3OV D*C%ar 4lang" )$& ,1h J 5eta2 %ara2ter *OOP 4lang E$D3 J End 3acro J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;J J Program " 3A5,.AS3 J J <!ngsi " 3engg!na2an 3acro J J 4nt!2 menceta2 J J h!r!# IPPP555I J J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;J .3ODE* S3A** .5ODE O(' 1 h Proses" 5eta2W%ar IPI J 5eta2 6!r!# P 5eta2W%ar I5I J 5eta2 6!r!# 5 )$& , h E$D Proses

??

Program 1E.,. 3engg!na2an Perintah *O5A*

1E.7. P4S&A%A 3A5(O


Bila kita sering menggunakan suatu fungsi seperti mencetak kalimat pada setiap program yang kita buat, tentu saja akan sangat membosankan karena setiap kali kita harus membuat fungsi yang sama. 4engan macro anda bisa menghindari hal tersebut dengan membuat suatu pustaka macro. Pustaka tersebut bisa anda simpan dengan suatu nama, misalnya Ipustaka.mcrI. Hile yang tersimpan adalah dalam bentuk AS2!!, tanpa perlu di compile. J/KKKKKKKKKKKKKKKKKKKKKKKK?J J Program " P4S&A%A.35( J J?KKKKKKKKKKKKKKKKKKKKKKKK/J 5eta2W%ar 3A5(O %ar J 3acro !nt!2 menceta2 3OV A6C , J %ara2ter 3OV D*C%ar )$& ,1h E$D3 5eta2W%lm 3A5(O %lm J 3acro !nt!2 menceta2 *EA D9C%lm J 2alimat 3OV A6C B )$& ,1h E$D3 Program 1E.7. P!sta2a.35(

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

)$& , h &Data Program 1E.8. 3engg!na2an P!sta2a.35(

Setelah program 1A.8. anda jalankan, maka pada layar akan ditampilkan; PE$''4$AA$ P4S&A%A 3A5(O >

1E.8. 3A5(O A&A4 P(O5ED4(E P


Banyak pro dan kontra mengenai macro dan procedure ini. Sebagian orang menganggap macro akan merugikan program, tetapi banyak juga yang menganggap macro adalah pemecahan yang tepat dalam pemrograman assembler yang terkenal sulit untuk digunakan. $ini apa yang akan anda pakai J -acro ataukah procedure J .ntuk itu marilah kita lihat dahulu perbedaan antara procedure dan macro ini. " Procedure tidak memperpanjang program, karena hanya muncul sekali saja pada program. " -acro akan muncul pada program setiap terjadi pemanggilan terhadap macro, sehingga macro akan memperpanjang program. " .ntuk menggunakan procedure anda harus memanggilnya dengan perintah 2A11 dan dalam procedure diakhiri dengan #' . " -acro bisa anda gunakan dengan memanggil langsung namanya dan pada macro tidak perlu diakhiri dengan #' . " Procedure akan memperlambat program, karena setiap pemanggilan terhadap procedure, komputer harus melakukan lompatan. " -acro tidak memperlambat program karena komputer tidak perlu melakukan lompatan. " Pada procedure anda tidak bisa menggunakan parameter secara langsung. Bila anda ingin menggunakan parameter bisa dengan melalui stack atau register. " -acro dengan mudah bisa menggunakan parameter, suatu ciri bahasa tingkat tinggi. " -acro lebih mudah dibuat dan digunakan daripada procedure. Setelah melihat perbedaan"perbedaan tersebut, kapankah kita menggunakan procedure dan kapankah menggunakan macro J " (ika fungsi tersebut jarang dipanggil, gunakanlah 3A5(O karena macro tidak memperlambat proses.

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

BAB 9V))) OPE(AS) PADA *A>A(


1ayar dapat dikatakan merupakan media yang menarik untuk dibahas, karena pada layar ini tampilan program bisa dijadikan semenarik mungkin. Pada bagian ini yang paling penting dan harus anda kuasai adalah bagian yang menerangkan mengenai memory layar yang digunakan sebagai data ditampilkan gambarNteks dilayar.

1=.1. 3E3O(> *A>A(


Pada layar disediakan suatu buffer atau memory yang mencatat tentang apa yang akan ditampilkan dilayar. $omputer akan membaca data pada memory layar untuk memperbaharui tampilan pada layar yang dilakukan kurang lebih A9 kali setiap detiknya. 2epatnya penulisan kembali gambar pada layar ini dinamakan sebagai 5refresh rate5. Pada layar monitor monokrom7tidak ber+arna*, alamat memory yang digunakan sebagai buffer digunakan lokasi memory dimulai pada alamat B999h;9999. Pada monitor ber+arna digunakan lokasi memory mulai alamat B?99h;9999. .ntuk pembahasaan kita selanjutnya akan selalu digunakan alamat buffer layar ber+arna7B?99h*.

1=.,. &A3P)*A$ &E%S PADA *A>A(


Pada modus teks, setiap saat komputer akan selalu melihat pada alamat B?99h;9999 sebanyak satu byte untuk menampilkan karakter AS2!! pada posisi kolom 9 da n baris 9. $emudian alamat B?99h;9991 digunakan sebagai atribut dari posisi kolom 9 dan baris 9. Alamat B?99h;9990 digunakan sebagai data untuk menampilkan karakter AS2!! pada posisi kolom 1 dan baris 9. 4an alamat B?99h;999B digunakan sebagai data untuk menampilkan atribut dari posisi kolom 1 baris 9. 4emikian seterusnya memory layar digunakan71ihat gambar 1?.1*. === &br1?1.P!3 >>> 'ambar 1=.1. Pengg!naan 3emory *ayar 4nt!2 3enampil2an &e2s Dan Atrib!tnya 4ari sini sudah dapat kita ketahui bah+a sebuah karakter pada saat ditampilkan dimonitor menggunakan 0 byte, dimana byte pertama digunakan untuk kode AS2!!"nya dan byte berikutnya digunakan untuk atribut dari karakter tersebut. $arena pada mode default, layar teks dibagi menjadi ?9 kolom dan 0:

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

J 6it!ng o##set baris J Simpan hasilnya pada B9

J 6it!ng o##set 2olom J &ambah2an hasilnya pada B9

3OV A*C%ar J A*K2ara2ter yang a2an ditampil2an 3OV A6CAttr J A6KAtrib!t yang a2an ditampil2an 3OV ES"SB9TCA* J &ampil2an %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.

1=.,.1 3E3B4A& P(O'(A3 (O$&O%


Pada bagian ini akan kita lihat, bagaimana caranya menggeser tulisan dengan mengakses memory layar secara langsung dengan program rontok. Program rontok adalah program yang akan membersihkan layar dengan cara menjatuhkan atau merontokkan huruf pada layar satu persatu. Delay 3A5(O P4S6 59 9O( 59C59 *oop1" *OOP *oop1 POP 59 E$D3 J 3acro ini dig!na2an !nt!2 J men!nda programC dan J hanya mela2!2an looping

'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 %embali2an sem!a register yang dig!na2an

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.

1=.7. 3E$''4*4$' *A>A( %EA&AS A&A4 %EBADA6


B!OS menyediakan suatu fungsi yang dapat digunakan untuk mengulung layar dengan batasan yang kita tentukan. Adapun aturan pemakaian dari interupsi ini adalah; !DP. ; AC F 4iisi dengan @ untuk menggulung layar keatas, untuk menggulung layar keba+ah diisi dengan A. A1 F Banyaknya pergeseran yang akan dilakukan. (ika diisi dengan nol, maka seluruh isi +indo+ akan dihapus. 2C F Posisi baris kiri atas +indo+ 21 F Posisi kolom kiri atas +indo+ 4C F Posisi baris kanan ba+ah +indo+ 41 F Posisi kolom kanan ba+ah +indo+ BC F Atribut yang akan mengisi hasil penggulungan +indo+ Setelah semuanya anda persiapkan laksanakanlah interupsi 19h. Anda bisa membersihkan layar dengan fungsi ini dengan meletakkan 9 pada register A1, dan membuat +indo+ pada posisi 9,9 dan AE,08. DE*A> 3A5(O *O5A* 4lang P4S6 59 9O( 59C59 4lang" *OOP 4lang POP 59 E$D3 J 3acro !nt!2 men!nda program

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.

1=.8. 3E3)$DA6%A$ POS)S) %4(SO(


.ntuk memindahkan posisi kursor, sama halnya dengan perintah &O O3L pada pascal, bisa anda gunakan interupsi dari B!OS. !nterupsi yang digunakan adalah interupsi 19h dengan aturan pemakaian; !DP. ; AC F 0 4C F Posisi Baris799"08* 41 F Posisi $olom799"AE* BC F Calaman layar79Fdefault* Adapun contoh dari pemakaian fungsi ini dalam bentuk macro adalah; 'O&O9> 3A5(O 9C> 3OV A6C , 9O( B9CB9 3OV D6C> 3OV D*C9 )$& 1 h

EE

E$D3

1=.-. 3E$5A() POS)S) %4(SO(


Sama halnya dengan fungsi Where3 dan WhereL dalam pascal, didalam assembler anda juga bisa mengetahui posisi dari kursor. .ntuk itu telah tersedia interupsi 19h dari B!OS dengan aturan pemakaian; !DP. ; O. P. ; AC F 9B 4C F Posisi Baris BC F Calaman 1ayar79Fdefault* 41 F Posisi $olom Adapun contoh pemakaian fungsi ini dalam bentuk macro bisa anda lihat sebagai berikut; DherePos 3A5(O 9C> 3OV A6C 7 3OV B6C 3OV 9CD* 3OV >CD6 E$D3

1=.G. 3E3B4A& 3E$4 SO(O&


4e+asa ini, menu"menu yang disajikan oleh program yang besar hampir semuanya dalam bentuk menu sorot. $ini dengan sedikit pengetahuan mengenai memory layar akan kita buat suatu menu sorot yang sederhana. -enu ini bisa dikembangkan atau digunakan untuk program yang anda buat. 5ls 3A5(O J 3acro !nt!2 menghap!s layar 3OV A9C G h 9O( 59C59 3OV D9C1=8<h 3OV B6C1 J Atrib!t 6i1a! diatas hitam )$& 1 h E$D3 J 3acro !nt!2 memindah2an 2!rsor

'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 &ampil2an 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

1=.E. 6A*A3A$ *A>A(


elah kita bahas bah+a pada normalnya satu layar akan menggunakan 8999 byte memory. etapi memory yang disediakan untuk layar ini sebenarnya malah beberapa kali lipat lebih banyak dari 8999 byte, karenanya terciptalah apa yang dinamakan IpagingI atau halaman tampilan layar. Banyaknya halaman tampilan ini sangat ber,ariasi karena tergantung jumlah memory yang tersedia dan jumlah memory yang digunakan oleh satu halaman tampilan. .ntuk alamat a+al dari masing"masing halaman tampilan bisa anda lihat pada gambar 1?.:. G""""""""""G""""""""""""""G K Calaman K ?9 3 0: K G""""""""""G""""""""""""""G K 9 K B?99;9999h K K 1 K B?99;1999h K K 0 K B?99;0999h K K B K B?99;B999h K K 8 K B?99;8999hO K K : K B?99;:999hO K K @ K B?99;@999hO K K A K B?99;A999hO K G""""""""""G""""""""""""""G $et ; O tidak berlaku pada 2&A 'ambar 1=.-. Alamat A0al 6alaman &ampilan .ntuk mengakses memory halaman tampilan yang lain pada modus teks, rumus yang telah kita buat terdahulu bisa anda perbaharui menjadi; O##set %ara2terK +Baris F 1G AL+%olom F ,A L +6alamanF1 hA O##set Atrib!t K +Baris F 1G AL+%olom F ,AL1L+6alamanF1 hA

1=.=. 3E(4BA6 6A*A3A$ &A3P)*A$


Secara default halaman tampilan yang digunakan adalah halaman tampilan ke 9, yang beralamat a+al pada B?99;9999h. .ntuk merubah halaman tampilan yang aktif ini bisa anda gunakan ser,is : dari interupsi 19h. Adapun aturan pemakaian ser,is ini adalah; !DP. ; AC F :

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

Program 1=.-. 6alaman *ayar

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

1=.B. 3E(4BA6 BE$&4% %A(A%&E(


Pada modus teks, karakter"karakter tersusun atas titik"titik yang disebut sebagai pi/el. Pi/el"pi/el yang membentuk karakter" karakter ini disimpan dalam tabel. pada '&A terdapat 8 buah tabel, sedangkan pada 6&A terdapat ? buah tabel karakter7-asing" masing ? $B*. $arakter"karakter yang ditampilkan pada layar monitor diambil dari tabel"tabel yang membentuk karakter ini. Secara default tabel yang akan digunakan adalah tabel ke nol79*. Bila monitor anda adalah monitor '&A keatas, maka bentuk karakter bisa diubah dengan mengubah isi dari tabel yang menyusun karakter"karakter ini. .ntuk itu B!OS telah menyediakan interupsi 19h, ser,ice 11h, subser,is 99 untuk keperluan ini. Adapun aturan dari pemakaiannya adalah; !DP. ; AC F 11h A1 F 99h 23 F (umlah bentuk karakter yang akan diganti 43 F $ode AS2!! karakter a+al yang akan diganti B1 F Domor tabel karakter yang diubah BC F (umlah byte perkarakter 'S;BP F Alamat buffer pola karakter J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " 3AP.AS3 J J A!thor " Sto J J <!ngsi " 4nt!2 mer!bah bent!2 2ara2ter J J yang biasa dig!na2an. J J 6!r!# IAIC a2an di!bah bent!2nya J J men1adi berbent!2 pedang N J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses &abel DB 11 b J WW DB 11 b J WW DB 1 11 1b J W WW W DB 11111111b J WWWWWWWW DB 1 11 1b J W WW W DB 11 b J WW DB 11 b J WW DB 11 b J WW DB 11 b J WW DB 11 b J WW DB 11 b J WW DB 11 b J WW DB 11 b J WW DB 11 b J WW DB 11 b J WW DB 1 b J W Proses " 3OV 3OV 3OV 3OV A9C11 h J Ser:is D9CIAI J %ara2ter AS5)) a0al yang a2an diganti 59C1 J Banya2nya 2ara2ter yang a2an diganti B*C J $omor blo2 pem!atan 2ara2ter

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.

1=.1 . 3ODE *A>A(


Suatu subsistem ,ideo bisa memiliki lebih dari satu mode ,ideo, tetapi hanya satu mode yang dapat aktif pada satu saat. Banyaknya mode ,ideo yang terdapat pada suatu jenis subsistem tergantung pada adapter yang dipakai. -akin canggih adapter yang dipakai, makin banyak pula mode ,ideo yang didukungnya. .ntuk lebih jelasnya mengenai mode ,ideo ini dapat dilihat pada gambar 1?.A. G""""""G""""""""G"""""""""G"""""""""""G""""""""""G""""""""""G K -ode K eksN K (umlah K #esolusi K Sistem K (umlah K K K &rafik K WarnaN K K 6ideo K Calaman K K K K -ono K K K ampilan K G""""""G""""""""G"""""""""G"""""""""""G""""""""""G""""""""""G K 99h K K &ray K 893 0: K 2-'6 K ? K K 91h K K 1@ K 893 0: K 2-'6 K ? K K 90h K K &ray K ?93 0: K 2-'6 K ? K K 9Bh K K 1@ K ?93 0: K 2-'6 K ? K K 98h K & K 8 K B093099 K 2-'6 K 1 K

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?

BAB 9)9 OPE(AS) PADA S&()$'


1B.1. )$&(4%S) PADA S&()$'
Apa itu string J String adalah suatu jenis data yang terdiri atas kumpulan karakter, angka, maupun simbol. Pada operasi string register S! dan 4! memegang suatu peranan yang khusus. #egister S!7Source !nde/* digunakan untuk mencatat alamat dari sumber string yang akan dimanipulasi sedangkan register 4!74estination !nde/* digunakan untuk mencatat alamat atau tempat hasil dari manipulasi string. Operasi pada string secara lengkap bisa anda lihat pada tabel 1E.1. L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L V )$&(4%S) A(&) V L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;L V 5*D 5lear Direction <lag V V S&D Set Direction <lag V V V V 53PS 5ompare String V V 53PSB 5ompare String 1 Byte V V 53PSD 5ompare String 1 Dord V V 53PSD 5ompare String 1 Do!ble Dord U= 7=G \ = 8=G@V V V V *ODS *oad String V V *ODSB *oad String 1 Byte &o A* V V *ODSD *oad String 1 Dord &o A9 V V *ODSD *oad String 1 Do!ble Dord &o EA9 U= 7=G \ V V = 8=G@ V V 3OVS 3o:e String V V 3OVSB 3o:e String 1 Byte V V 3OVSD 3o:e String 1 Dord V V 3OVSD 3o:e String 1 Do!ble Dord U= 7=G \ = 8=G @ V V V V (EP (epeat V V (EPE (epeat )# ER!al V V (EPQ (epeat )# Qero V V (EP$E (epeat )# $ot ER!al V V (EP$Q (epeat )# $ot Qero V

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

1B.,. PE$'5OP>A$ DA$ A(A6 P(OSES OPE(AS) S&()$'


Sama halnya dengan perintah -O6, pada string digunakan perintah -O6S7-o,e String* untuk mengcopy data dari 4S;S! menuju 'S;4!. Pasangan 4S;S! mencatat alamat dari sumber string sedangkan 'S;4! mencatat alamat hasil dari operasi string. Setiap kali terjadi operasi string7-O6S* maka register S! dan 4! akan berkurang atau bertambah sesuai dengan direction flag. Anda bisa menaikkan nilai S! dan 4! pada setiap proses dengan perintah 21472lear 4irection Hlag* dan S 47Set 4irection Hlag* untuk menurunkan nilai S! dan 4! pada setiap proses. Pada saat program dijalankan, secara otomatis direction flag akan menunjuk pada proses menaik. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J P(O'(A3 " S&()$'1.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 4lang " 3OVS ES"B!##erC%alimat J Pindah2an data pada

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

1B.7. PE$'4*A$'A$ PADA S&()$'


Pada program 1E.1. kita masih menggunakan pengulangan yang primitif.

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

)$& , h E$D &Data Program 1B.,. Pengg!naan perintah (EP

1B.7. PE(BA$D)$'A$ PADA S&()$'


Pada dasarnya perbandingan string sama dengan pengcopyan string. Pada perbandingan string juga terdapat bentuk 2-PS yang dapat berupa

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*.

1B.8. OPE(AS) S5A$ PADA S&()$' 11B

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

Program 1B.8. Operasi Scan pada String

Bila program 1E.8. dijalankan, maka pada layar akan ditampilkan; %ara2ter IsI yang dicari tida2 2etem! N

1B.-. 3E$'A3B)* S&()$'


1O4S merupakan bentuk umum untuk mengambil string dari lokasi memory 4S;VS!W menuju A1, A3 atau 'A3. Sama halnya dengan operasi string lainnya, 1O4S juga akan diterjemahkan oleh assembler ke dalam bentuk 1O4SB74S;VS!W ke

118

A1*, 1OSW74S;VS!W ke A3* atau 1O4S474S;VS!W ke 'A3=?9B?@>*.

1B.G. 3E$')S) S&()$'


S OS merupakan bentuk umum untuk mengisi string dari A1,A3 atau 'A3 menuju 'S;V4!W. Sama halnya dengan operasi string lainnya, S OS juga akan diterjemahkan oleh assembler ke dalam bentuk S OSB7A1 ke 'S;V4!W*, S OSW7A3 ke 'S;V4!W* atau S OS47'A3 ke 'S;V4!W *. (ika 4irection flag bernilai 97dengan 214* maka setelah intruksi S OS 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 S OS ini.

11:

BAB 99 3E$5E&A% A$'%A


, .1. 3ASA*A6 DA*A3 3E$5E&A% A$'%A
Pada assembler, untuk mencetak suatu angka tidaklah semudah mencetak angka pada bahasa tingkat tinggi. Cal ini dikarenakan baik oleh B!OS maupun 4OS tidak disediakan fungsinya. -isalkan kita mempunyai suatu angka A, untuk mencetaknya kita harus menerjemahkan ke dalam kode AS2!! :: dahulu barulah mencetaknya. 4emikian halnya bila ingin mencetak angka 10A, maka kita juga harus menterjemahkannya dalam kode AS2!! 8E, :9 dan :: untuk kemudian dicetak. Selanjutnya akan kita lihat, bagaimana caranya untuk mencetak angka dalam bentuk desimal maupun he/adesimal.

, .,. 3E$5E&A% A$'%A DA*A3 BE$&4% DES)3A*


2ara yang paling banyak dilakukan oleh programmer assembler, untuk mencetak angka dalam bentuk desimal adalah dengan membagi angka tersebut dengan 19. $emudian sisa pembagiannya disimpan dalam stack. Pada saat pencetakan, angka"angka yang disimpan dalam stack akan diambil satu persatu untuk dicetak. -isalkan anda mempunyai angka B8:, maka hasil pembagian dengan 19 sebanyak B kali akan menghasilkan sisa berturut"turut :, 8 dan B. Sisa pembagian ini kemudian disimpan pada stack. $arena sifat stack yang 1!HO =1ast !n Hirst Out>, maka pada saat pengambilan angka pada stack untuk dicetak akan diambil berturut"turut angka B8: %. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " 5D;A$'%A.AS3 J J A!thor " Sto J J <!ngsi " 3enceta2 ang2a yang bernilai J J antara sampai G--7- dalam J J #ormat desimal J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses &estWAng2a DD G--7- J Ang2a yang a2an diceta2 Proses" 3OV A9C&estWAng2a 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

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-

, .7. 3E$5A() DA$ 3E$A3P)*%A$ B)*A$'A$ P()3A


Apa itu bilangan primaJ Bilangan prima adalah bilangan yang hanya habis dibagi oleh dirinya sendiri dan 1. 2ontoh dari bilangan prima ini adalah 0, B, :, dan sebagainya. Secara matematika, untuk mengetest apakah suatu bilangan adalah prima atau bukan, adalah dengan cara pembagian. -isalkan kita ingin mengetahui apakah angka A adalah prima atau bukan, kita akan mencoba untuk membaginya dengan @, :, 8,..0. ernyata semua sisa pembagiannya adalah tidak nol atau tidak habis dibagi. Sebagai kesimpulannya, angka A adalah prima. Pada program 09.0. akan anda lihat bagaimana mencari dan menapilkan semua angka prima yang terletak antara angka 9 sampai 1999. $ita akan menggunakan program 09.1. untuk menampilkan angka prima yang telah berhasil dicari. 5eta2W%lm 3A5(O %lm 3OV A6C B *EA D9C%lm )$& ,1h E$D3 J 3acro !nt!2 menceta2 2alimat

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.

, .8. 3E$5E&A% A$'%A DA*A3 BE$&4% 6E9ADES)3A*


.ntuk mencetak angka dalam bentuk he/adesimal, adalah lebih mudah daripada mencetak angka delam bentuk desimal. Cal ini dikarenakan sifat dari he/adesimal yang setiap angkanya terdiri atas 8 bit. .ntuk itu anda bisa membuat suatu tabel untuk he/adesimal yang terdiri atas angka 9 sampai H. $emudian ambillah angka yang ingin dicetak secara 8 bit untuk digunakan sebagai penunjuk dalam mencetak angka tersebut. 5eta2 3A5(O 3OV D*C&abelW6exSB9T J 3A5(O !nt!2 3OV A6C , J menceta2 )$& ,1h J h!r!# 2e B9 pada tabelW6ex E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " 56;A$'%A.AS3 J J A!thor " Sto J J <!ngsi " 3enceta2 ang2a yang bernilai antara J J sampai ,-- U<<h@ dalam #ormat J J hexadesimal J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data " .3P Proses &abelW6ex DB I 1,78-GE=BAB5DE<I &estWAng2a DB ,-- J Ang2a yang a2an diceta2 ,--K<<h Proses"

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

BAB 99) PE$'A%SESA$ PO(& DA$ PE$'A%&)<A$ SPEA%E(


,1.1. PO(&
Port bila diterjemahkan secara bebas, artinya adalah pelabuhan atau terminal, yang merupakan tempat keluar masuk. Pengertian port dalam komputer juga tidak jauh berbeda. Port merupakan tempat komputer berhubungan dengan alat"alat lain7dunia luar*. .ntuk periferal yang dihubungkan dengan komputer seperti disk"dri,e, keyboard, monitor, mouse, printer dan speaker biasanya akan diberi nomor portnya masing"masing. Pengontrolan kerja dari periferal yang dihubungkan dengan komputer biasanya dilakukan melalui portnya. Oleh !B-, alat"alat yang digunakan pada komputer P2 telah diberi nomor portnya masing"masing7&ambar 01.1.* G"""""""""""""""""""""""""""""G"""""""""""G"""""""""""G K Peralatan K P2N3 K A K G"""""""""""""""""""""""""""""G"""""""""""G"""""""""""G K 4-A 2ontroler 7?0BAA":* K 999"99H K 999"91H K K !nteerupt 2ontroler 7?0E:A* K 909"901 K 909"9BH K K imer K 989"98B K 989"9:H K K PP! ?0::A": K 9@9"9@B K """ K K $eyboard 7?980* K """ K 9@9"9@H K K #eal ime 2lock 7-218@?1?* K """ K 9A9"9AH K K 4-A Page #egister K 9?9"9?B K 9?9"9EH K K !nterrupt 2ontroler 07?0:EA*K """ K 9A9"9BH K K 4-A 2ontroller 0 7?0BAA":* K """ K 929"94H K K -ath2o K """ K 9H9"9H1 K K -ath2o K """ K 9H?"9HH K K Card 4ri,e 2ontroler K B09"B0H K 1H9"1H? K K &ame Port for (oysticks K 099"09H K 099"09A K K '/pansion .nit K 019"01A K """ K K 1P 0 K """ K 0A?"0AH K K 2O-0 K 0H?"0HH K 0H?"0HH K K Prototype 2ard K B99"B1H K B99"B1H K K DetWork 2ard K """ K B@9"B@' K K 1P 1 K BA?"BAH K BA?"BAH K K -4A M Parallel !nterface K BB9"BBH K BB9"BBH K

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

,1.,. PE$'A%SESA$ PO(&


.ntuk melihat nilai pada suatu port digunakan perintah; )$ (egC$oPort 5#eg5 harus merupakan register A1 atau A3 sedangkan 5DoPort5 merupakan nomor port yang akan diakses. Perintah !D akan mengcopykan nilai pada 5DoPort5 ke dalam 5#eg5. Perintah !D akan mengcopykan nilai pada port sebanyak 1 byte bila digunakan regiser A1 atau 1 +ord bila digunakan register A3. Domor Port yang ingin diakses bisa dituliskan secara langsung jika nomor Port tersebut diba+ah 0::7HHh*. Bila nomor port diatas HHh, maka nomor port tersebut harus dimasukkan ke dalam register 43. .ntuk memasukkan nilai pada suatu port, digunakan perintah; O4& $oPortC(eg Perintah O. ini sama dengan perintah !D hanya perintah O. digunakan untuk mengirimkan 1 byte7bila #egFA1* atau 1 +ord7bila #egFA3* pada port. Sama halnya dengan perintah !D, bila nomor port yang diakses melebihi 0::, harus digunakan register 43. 2ontoh ; )$ A*CG h J ambil nilai 1 byte pada port G h O4& G hCA* J mas!22an nilai A* pada port G h Pada dasarnya pengaksesan Port sama dengan pengaksesan memory, tetapi harus diingat bah+a alamat Port dan memory adalah lain. (adi misalkan alamat Port @9h dan alamat memory @9h adalah lain. Walupun keduanya mempunyai nilai yang sama tetapi sebenarnya alamat keduanya tidak ada hubungan sama sekali. Pengaksesan Port sebenarnya tidaklah sesederhana yang dibayangkan oleh banyak orang. $arena Port berhubungan langsung dengan perangkat keras komputer maka kita harus mengetahui dengan jelas cara mengaksesnya. Ada Port yang cuma bisa ditulisi atau dibaca. .ntuk Port yang mempunyai hubungan dua arah atau untuk baca tulis biasanya mempunyai suatu lagi Port yang digunakan sebagai Port pengontrol. Port pengontrol ini berfungsi untuk mengatur modus dari operasi yang akan dilakukan terhadap alat tersebut. 1ebih jauh dari pengaksesan Port ini tidak

100

bisa penulis ungkapkan disini karena hal tersebut sangat tergantung dari jenis perangkat kerasnya.

,1.7. PE$'A%&)<A$ SPEA%E(


.ntuk membunyikan speaker, suka atau tidak anda harus mengakses port. Cal ini dikarenakan sampai saat ini tidak adanya fasilitas dari 4OS maupun B!OS untuk membunyikan speaker. Pada bagian ini akan kita lihat teknik"teknik pemrograman dari speaker supaya dapat menghasilkan suatu frek+ensi atau nada.

,1.8. 3E$'A%&)<%A$ SPEA%E( SE5A(A *A$'S4$'


Port @1h merupakan suatu !NO port yang digunakan untuk berbagai keperluan, diantaranya oleh speaker pada bit 9 dan 1. $edua bit ini dihubungkan pada speaker melalui gerbang logika 5AD45 sehingga untuk mengaktifkan suara pada speaker ini maka bit ke 9 dan 1 dari port @1h ini harus bernilai 1. !ngatlah, pengaktifan pada speaker ini jangan sampai mengganggu bit lainnya. ===== &br010.P!3 >>>>>> 'ambar ,1.,. S2ema (ang2aian Spea2er pada P5 (ead2ey 3A5(O 3OV A6C )$& 1Gh E$D3 J 3acro !nt!2 J men!ngg! mas!2an dari 2eyboard

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

Program ,1.1. 3enga2ti#2an spea2er

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.

,1.-. PE$'O$&(O*A$ <(E%DE$S) 3E*A*4) &)3E(


.ntuk menghasilkan suatu frek+ensi yang tidak terpengaruh oleh kecepatan komputer, bisa dilakukan dengan memrogram timer = pe+aktu> yang digunakan oleh speaker ini. Hrek+ensi yang dihasilkan dengan menggunakan tetapan +aktu akan lebih mudah dihasilkan dan lebih tepat. P! =Programmable !nter,al imer> merupakan suatu timer yang dapat diprogram. $eluaran dari P! ini digunakan antara lain oleh detik jam +aktu7!#U9* dan #A- dinamik untuk me"refresh dirinya. $eluaran ketiga 7O. 0* dari P! untuk menghasilkan sinyal gelombang persegi yang digunakan oleh speaker. $arena frek+ensi yang dihasilkan oleh P! ini dapat diatur melalui soft+are maka dapat dimanfaatkan untuk membentuk nada pada speaker. .ntuk memrogram timer=P! > ini, pertama"tama kita harus mengirimkan nilai B@h pada port 8Bh. Pengiriman nilai ini akan menyebabkan port 80h siap untuk menerima nilai 1@ bit untuk dijadikan tetapan perhitungan=counter>. .ntuk nilai counter yang diberikan pada port 8Bh ini digunakan rumus ; 5o!nter K 1,7-8 h / 6Y CRF=frek+ensi ingin 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

Program ,1.,. Pengontrolan spea2er dan timer

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:

BAB 99)) P(O'(A3 BE(PA(A3E&E(


,,.1. APA )&4 PA(A3E&E( P
Program format, copy dan delete dari 4os tentunya sudah tidak asing lagi bagi kita. -isalkan pada program copy, untuk mengcopy suatu file yang bernama SS.AS- pada dri,e B; menuju dri,e 2; dengan nama .AS- dapat kita tuliskan dengan; Parameter 1 Parameter 0 G"""G""""GG"""G""""G 5OP> B"SS.AS3 5"&&.AS3 Lang dimaksud dengan parameter program adalah semua tulisan yang terdapat dibelakang kata copy7B;SS.AS- dan 2; .AS-*. B;SS.AS- dikatakan sebagai parameter pertama sedangkan 2; .AS- dikatakan sebagai parameter kedua.

,,.,. <)*E 5O$&(O* B*O5%


-asih ingatkah anda, pada setiap program 2O- kita selalu menyediakan 199h byte kosong dengan perintah O#& 199h. 199h byte kosong kosong ini dinamakan sebagai PSP atau Program Segment Prefi/ dan digunakan oleh 4OS untuk mengontrol jalannya program kita. Salah satu pengontrolan yang dilakukan, ialah terhadap paramater program. PSP sebenarnya masih dibagi"bagi lagi menjadi bagian"bagian yang tugasnya berbeda"beda. Salah satu bagian yang mengatur terhadap parameter program adalah yang dinamakan sebagai H2B7Hile 2ontrol Block*. H2B ini terdiri atas 0 bagian, yaitu H2B1 dan H2B0. H2B1 bertugas menampung parameter pertama dari pr ogram, dan berada pada offset :2h sampai @Bh71@ Byte*. Sedangkan H2B0 bertugas menampung parameter kedua dari program, dan berada pada offset @2h sampai ABh71@ Byte*. !ngatlah, bila anda menjalankan sebuah program pada prompt 4os maka yang terakhir dimasukkan pastilah karakter 'nter794h*. 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 J 3acro !nt!2 menceta2 2alimat

J 3acro !nt!2 menceta2 2ara2ter

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 " <,,,

,,.7. DA&A &(A$S<E( A(EA


4engan H2B kita hanya mampu mengambil 0 parameter dari program. Bagaimana jika parameter yang dimasukkan lebih dari 0J. .ntuk itu anda harus mengakses bagian lain dari PSP yang dinamakan sebagai 4 A atau 4ata ranfer Area. 4 A mencatat semua parameter yang dimasukkan pada program. 4 A terletak mulai pada offset ke ?9h sampai HHh dari PSP. Bila anda

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 3acro !nt!2 menceta2 2ara2ter

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

Bila program 00.0. dijalankan seperti;

10?

5"?@D&A P111 P,,, P777 Parameter program " P111 Parameter program " P,,, Parameter program " P777

10E

BAB 99))) OPE(AS) PADA <)*E


,7.1. PE$A$'A$A$ <)*E
Pada 4os ,ersi 1.9 penanganan file dilakukan melalui H2B. System ini muncul, sebagai hasil dari kompabilitas dengan 2PN-. ernyata penanganan file melalui H2B ini banyak kendalanya, seperti kemampuan manampung nama file yang hanya 11 karakter. $arena hanya mampu menampung 11 karakter maka nama untuk directory tidak akan tertampung sehingga 4os ,ersi a+al tidak bisa menangani adanya directory. Penanganan file melalui H2B ini sudah ketinggalan Raman dan telah banyak ditinggalkan oleh programmer"programmer. $arena itu maka pada buku ini, kita hanya akan membahasnya sekilas. Pada 4os ,ersi 0.9 diperkenalkan suatu bentuk penanganan file yang baru. Penanganan file ini dinamakan Hile Candle yang mirip dengan fungsi pada .D!3. 4engan file handle penanganan terhadap directory dengan mudah dilakukan. Operasi file yang dilakukan dengan file handle harus dibuku7Open* terlebih dahulu, selain itu file handle bekerja dengan apa yang dinamakan dengan AS2!!P. AS5))Q atau AS2!!GPero byte adalah suatu teknik penulisan string yang diakhiri dengan byte nol79* atau karakter Dull. 2ontohnya dalam penulisan nama file; Dama 4B I4A A.4A I,9 =""""" AS2!!P

,7.,. 3E3B4A& <)*E BA(4


.ntuk menciptakan suatu file baru, dapat digunakan fungsi B2h dari intrupsi 01h. Adapun aturan dari pemakaian interupsi ini adalah dengan memasukkan nilai ser,is B2h pada AC, pasangan register 4S;43 menunjuk pada nama file AS2!!P yang akan diciptakan, 23 diisi dengan atribut file atau maksud dari pembukaan file tersebut dengan spesifikasi nomor Bit; " 9 untuk Hile #ead Only, yaitu file yang dibuka hanya untuk dibaca. " 1 untuk Hile Cidden, yaitu file yang disembunyikan. (enis file ini tidak akan ditampilkan pada proses 4!# dari 4OS. " 0 untuk Hile System, yaitu file yang akan otomatis dijalankan pada saat BOO . (enis file ini biasanya berkaitan erat dengan mesin komputer dan biasanya ditandai dengan ektensi SLS. " B untuk 6olume label. " 8 untuk Dama subdirectory. " : untuk Hile Archi,e, yaitu suatu bentuk file normal.

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

,7.7. 3E3B4%A <)*E >A$' &E*A6 ADA


.ntuk membuka suatu file yang telah ada, digunakan fungsi B4h dari interupsi 01h. Adapun aturan dari pemakaiannya adalah; !DP. ; AC F B4h A1 F ujuan pembukaan file; " 99 hanya untuk dibaca 7#ead Only* " 91 hanya untuk ditulisi 7Write Only* " 90 untuk ditulis dan dibaca 7#eadNWrite* 4S;43 F Dama file dengan AS2!!P

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

,7.8. 3E$4&4P <)*E


.ntuk menutup suatu file yang telah dibuka, dapat digunakan fungsi ke B'h dari interupsi 01h. Hungsi ini akan menutup file yang dibuka dengan B4h. .ntuk menggunakannya isilah AC dengan B'h dan B3 dengan nomor handle file tersebut. Adapun contoh dari macro untuk menutup suatu file yang terbuka adalah; 5lose 3A5(O 6andle P4S6 B9 3OV A6C7Eh 3OV B9C6andle )$& ,1h POP B9 E$D3 Sebenarnya tidak semua file yang telah dibuka harus ditutup dengan interupsi khusus. Bila anda mengakhiri program tidak dengan interupsi 09h tetapi dengan fungsi 82h dari interupsi 01h, maka penutupan file yang terbuka

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.

,7.-. 3E3BA5A <)*E


Pembacaan file handle dapat dilakukan melalui fungsi BHh dari interupsi 01h. Adapun aturan dari pemakaian fungsi ini adalah; !DP. ; AC F BHh 23 F Banyaknya data7dalam byte* yang ingin dibaca B3 F Domor Hile handle 4S;43 F Alamat buffer tempat hasil pembacaan akan disimpan O. P. ; (ika berhasil, maka 2H F 9 dan A3 F (umlah byte yang telah dibaca. Bila A3F9 atau A3 = 23 artinya akhir file telah dicapai. (ika tidak berhasil, maka 2H F 1 dan A3 F kode kesalahan Adapun contoh dari penggunaannya dalam macro adalah; (ead 3A5(O 6andleC$!mberCB!##er P4S6 B9 P4S6 59 P4S6 D9 3OV A6C7<h 3OV B9C6andle 3OV 59C$!mber *EA D9CB!##er )$& ,1h POP D9 POP 59 POP B9 E$D3

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.

,7.G. 3E$4*)S PADA <)*E


.ntuk menulisi file dapat digunakan fungsi 89h dari interupsi 01h. Adapun aturan dari pemakaian fungsi ini adalah; !DP. ; AC F 89h B3 F Domor Hile Candle 23 F Banyaknya data7dalam byte* yang akan dituliskan 4S;43 F Alamat dari data yang akan ditulis ke file O. P. ; (ika berhasil, maka 2H F 9 dan A3 F (umlah byte yang berhasil dituliskan. (ika tidak berhasil, maka 2H F 1 dan A3 F kode kesalahan Adapun contoh macro dari penggunaan fungsi ini adalah; Drite 3A5(O 6andleC$!mberCB!##er P4S6 B9 P4S6 59 P4S6 D9 3OV A6C8 h 3OV B9C6andle 3OV 59C$!mber *EA D9CB!##er )$& ,1h POP D9 POP 59 POP B9 E$D3

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)&

B!##er *ABE* B>&E &Data Program ,7.1. 3engcopy <ile

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.

,7.E. 3E$'6AP4S <)*E


.ntuk menghapus suatu file, dapat digunakan fungsi ke 81h dari interupsi 01h. Adapun aturan dari pemakaian fungsi ini adalah; !DP. ; AC F 81h 4S;43 F Dama file7AS2!!P* yang akan dihapus O. P. ; (ika berhasil, maka 2H F 9 (ika tidak berhasil, maka 2H F 1 dan A3 F kode kesalahan Perlu anda ketahui, fungsi ini tidak mendukung karakter khusus seperti IJI dan IOI dari 4os. 4engan demikian fungsi ini hanya mampu menghapus 1 buah file setiap saat. Delete 3A5(O $ama 3OV A6C81h J Ser:is !nt!2 menghap!s #ile *EA D9C$ama J DS"D9 men!n1!2 pada nama #ile )$& ,1h E$D3 J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " 6AP4S.AS3 J J A!thor " Sto J J <!ngsi " 3enghap!s #ileC seperti perintahJ J delete dari Dos. J J?KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/J .3ODE* S3A** .5ODE O(' 1 h &Data ".3P Proses Error DB I SorryC <ile anda tida2 bisa dihap!s NIC17C1 DB I Anda har!s mengg!na2an parameter IC17C1 DB I seperti" IC17C1

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 &ampil2an 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&

,7.=. 3E3)$DA6%A$ PE$4$.4%+PO)$&E(A <)*E


Pada file terdapat pointer7penunjuk* yang berguna untuk menunjukkan suatu lokasi tertentu pada file. 4engan fungsi 80h dari 4os, penunjuk file ini dapat dipindah"pindahkan. Adapun aturan dari penggunaan fungsi ini adalah; !DP. ; AC F 80h B3 F Candle 23 F Offset Ci7tinggi* yang menunjukkan besarnya perpindahan 43 F Offset 1o7rendah* yang menunjukkan besarnya perpindahan A1 F -ode perpindahan, dengan nilai; 99 untuk berpindah dari a+al file 91 untuk berpindah terhadap posisi sekarang 90 untuk berpindah dari akhir file O. P. ; (ika berhasil, maka 2H F 9 dan 43;A3 F menunjuk pada posisi baru (ika tidak berhasil, maka 2H F 1 dan A3 F kode kesalahan Adapun contoh macro dari penggunaan fungsi ini adalah;

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

,7.B. 3E$'A&4( A&()B4& <)*E


Seperti yang telah kita ketahui, pada file terdapat suatu byte yang digunakan sebagai atribut dari file tersebut. Atribut ini menentukan jenis dari file tersebut7lihat sub bab 0B.0*. 4OS menyediakan fungsi ke 8Bh untuk mengatur atribut file. Adapun aturan dari pemakaian fungsi ini adalah; !DP. ; AC F 8Bh A1 F -ode, dengan spesifikasi 99 untuk melihat atribut dari suatu file 91 untuk mengubah atribut dari suatu file 4S;A3 F Dama file dalam bentuk AS2!!P 23 F Atribut, dengan spesifikasi Domor bit; " 9 untuk Hile #ead Only " 1 untuk Hile Cidden " 0 untuk Hile System " B untuk 6olume label. " 8 untuk Dama subdirectory. " : untuk Hile Archi,e O. P. ; (ika berhasil, maka 2H F 9 dan 23 menunjukkan atribut dari file, jika mode pada A1F9 (ika tidak berhasil, maka 2H F 1 dan A3 F kode kesalahan 5eta2W%al 3A5(O %al J 3acro !nt!2 menceta2 2alimat

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

Program ,7.7. 3elihat Atrib!t <ile

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.

,7.1 . 3E$'4BA6 $A3A <)*E


.ntuk mengganti nama suatu file, dapat digunakan fungsi ke :@h dari 4os. Adapun aturan dari pemakaian fungsi ini adalah; !DP. ; AC F :@h 4S;43 F Dama file lama 7AS2!!P* 'S;4! F Dama file baru 7AS2!!P* O. P. ; (ika berhasil, maka 2H F 9 (ika tidak berhasil, maka 2H F 1 dan A3 F kode kesalahan

,7.11. %ODE %ESA*A6A$ DOS


Pada bab ini, kita telah banyak menyinggung mengenai kode kesalahan. $ode kesalahan umumnya dilaporkan dalam register A3 setelah suatu operasi mengalami kesalahan7'rror*. Adapun arti dari kode kesalahan ini, bisa anda lihat pada gambar 0B.1.

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

BAB 99)V P(O'(A3 (ES)DE$


,8.1. VE%&O( )$&E(4PS)
Pada bab B telah dibahas mengenai pengertian dasar interupsi, bila anda sudah lupa, bacalah kembali sebelum membaca bagian ini. Pada bagian ini akan kita lihat lebih lanjut khusus mengenai ,ektor interupsi. Seperti yang telah dikatakan, setiap interupsi menggunakan 8 byte memory sebagai alamat a+al interupsi, yaitu alamat yang akan dituju setiap terjadi interupsi. $eempat byte ini dicatat pada !nterrupt 6ektor able yang terdapat pada memory rendah, 9999;9999 sampai 9999;9BHHh. 4engan demikian, interupsi 99 akan menggunakan alamat 9999;9999"9999;999B, interupsi 91 akan menggunakan alamat 9999;9998"9999;999A, dan seterusnya. .ntuk mencari alamat a+al dari suatu nomor interupsi digunakan rumus; Alamat A0al K 8 F $omor;)nter!psi Sebagai contohnya, setiap kali kita menekan tombol PrtScr untuk mencetak isi layar pada printer akan selalu terjadi interupsi 9:. $omputer kemudian akan menuju alamat a+al interupsi 9:, yaitu 9999;9909 78O9:F09*. 4ari alamat a+al ini kemudian akan dilihat isi dari keempat byte, yaitu pada alamat 9999;9909 " 9999;990B. $eempat byte ini mencatat alamat 2S70 byte* dan !P70 byte*, yaitu alamat yang akan dituju oleh komputer selanjutnya. -isalkan isi dari keempat byte ini adalah B099h;94?Bh, artinya komputer akan melompat pada alamat tersebut dan menjalankan program yang terdapat pada alamat tersebut sampai bertemu dengan perintah !#' . Program inilah yang disebut sebagai !nterrupt Candler 9:, yaitu program yang akan dilaksanakan setiap kali terjadi interupsi 9:. Secara default program yang akan dilaksanakan terdapat pada B!OS, dimana program tersebut akan mencetak tampilan pada layar ke printer.

,8.,. 3E$DAPA&%A$ A*A3A& VE%&O( )$&E(4PS)


.ntuk melihat isi dari alamat a+al suatu ,ektor interupsi dapat digunakan dua cara. 2ara pertama, adalah dengan membaca secara langsung keempat byte alamat a+al yang mencatat alamat berturut"turut Offset 1o, Offset Ci, Segment 1o dan Segment Ci dari interrupt handler. 2ara kedua adalah dengan menggunakan interupsi 01h fungsi B:h. 2ara kedua lebih mudah untuk digunakan, oleh sebab itu akan kita gunakan pada program"program selanjutnya. .ntuk menggunakan fungsi ke B:h ini, isilah AC den gan B:h dan A1 dengan nomor ,ektor interupsi sebelum dilaksanakan interupsi 01h. Casil dari

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.

,8.7. 3E(4BA6 VE%&O( )$&E(4PS)


Secara default, nomor interupsi 99h"AHh akan menjalankan program yang terdapat #O- B!OS, dan nomor interupsi 09h"HHh akan menjalankan program yang disediakan oleh 4OS. !nterrupt Candler yang disediakan oleh B!OS ini tidak bisa dihapus secara SoftWare dan selalu tersedia pada setiap komputer. Sedangkan !nterrupt Candler yang disediakan oleh 4OS akan tersedia pada saat sistem operasi 4OS telah masuk kedalam memory komputer. Suatu interrupt handler bisa saja diganti, misalkan kita menginginkan penekanan tombol PrtScr tidak mencetak isi layar tetapi mem"BOO komputer sama halnya dengan penekanan tombol 2trlGAltG4el. $arena !nterrupt handler yang asli, baik dari B!OS maupun 4OS tidak bisa dihapus maka cara yang digunakan untuk merubah interrupt handler adalah dengan mengganti isi dari !nterrupt 6ektor able. .ntuk mengganti atau mengarahkan suatu nomor interupsi dapat secara langsung atau menggunakan fungsi 0:h dari interupsi 01h. .ntuk menggunakan fungsi ini, isilah AC dengan 0:h, A1 dengan nomor interupsi yang akan diganti ,ektornya, pasangan 4S;43 berisi alamat yang akan dituju pada saat terjadi interupsi tersebut. 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

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

Program ,8.1. 3engganti #!ngsi PrtScr men1adi 5trlLBrea2

Bila progrm 08.1. dijalankan, maka tombol PrtScr sudah tidak akan berfungsi seperti biasanya, tetapi berfungsi seperti penekanan tombol 2trl Break.

,8.8. APA )&4 P(O'(A3 (ES)DE$ P


Pada +aktu kita menyalakan komputer, ia mencari sistem operasi di dri,e A; ataupun 2; ,kemudian memasukkannya kedalam memori ba+ah. Selanjutnya sistem akan terus berada disitu dan apabila kita menjalankan program aplikasi misalnya game maka program tersebut akan disimpan di atas sistem operasi, sehingga sistem operasi tetap ada +alaupun kita sedang menjalankan game tersebut. !nilah yang disebut residen, yaitu program yang tetap tinggal di memori. 4alam contoh kita ini bila game tadi telah selesai maka ia akan lenyap dari memori dan bila kita menjalankan program aplikasi lainnya, misalnya WS maka tempat memori yang digunakan oleh game kita akan digunakan oleh WS. !ni adalah contoh dari program yang tidak residen karena ia hanya sementara +aktu berada di memori. 2ontoh program residen yang terkenal misalnya Side$ick, Print7dos* dan 4oskey. 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 OP'#A !D& SLS '- K K OP'#A !D& SLS '- K G""""""""""""""""""G G""""""""""""""""""G 'ambar ,8.1. Peta (A3 tanpa program (esiden

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.

,8.-. 3ODE* P(O'(A3 (ES)DE$


4alam pembuatan program residen, kita dapat membaginya dalam 0 bagian pokok, yaitu ; " )nitialiYe section , yaitu bagian dari program yang bertugas meresidenkan residen section. Bagian ini sendiri tidak residen, dan pada bagian inilah suatu ,ektor interupsi diubah. " (esiden section , yaitu bagian program yang akan menetap pada memory. Program ini akan tetap tinggal pada memory sampai dihilangkan, atau sampai komputer direset. Pada program sebelumnya, kita selalu mengakhiri program dengan interupsi 09h yang akan mengembalikan kontrol program sepenuhnya pada 4OS. Pada program residen, program akan selalu kita akhiri dengan interupsi 0Ah ataupun

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

,8.G. P(O'(A3 (ES)DE$ PE(&A3A


Pada program berikut akan kita lihat bagaimana membelokkan merubah ,ektor interupsi PrtScr menuju program kita. 4engan cara yang sama anda bisa membelokkan ,ektor interupsi yang lain, dan membuat suatu handler yang baru untuknya. J/KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK?J J Program " (ES1.AS3 J J A!thor " Sto J

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.

,8.E. 3E$'4$5) 5APS *O5%


Pada alamat 89h;1Ah terdapat data tentang status tombol keyboard dimana

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.

,8.=. &)PE DA&A )S&)3EDA


Pada assembler terdapat suatu tipe data yang istime+a, yaitu pendefinisian data melalui perintah 1AB'1, dengan synta/; $ama *ABE* &ipeData Pendefinisian data dengan 4B, 4W, 44, 4H, 4U dan 4 akan menyebabkan assembler menyediakan suatu tempat khusus. -isalkan anda mendefinisikan suatu data dengan 5A 4W J5, maka assembler akan menyediakan 0 byte di memory untuknya. Anda hanya dapat menggunakan 0 byte pada memory melalui ,ariabel 5A5. 4engan penggunaan label, assembler akan menyediakan memory dimulai dari lokasi pendefinisiannya sampai sebatas memory anda. Selain itu penggunaan 1abel tidak menggunakan memory khusus. Pada program 08.8, program 2O- yang dihasilkan menggunakan memory 0@ byte. Bila pe nggunaan label dihilangkan dan pengisian angka untuk ,ariabel A,B dan 2 dilakukan secara langsung, memory yang digunakan oleh pada program 08.8. juga 0@ byte%.

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

)$& , h E$D &Data Program ,8.8. Pengg!naan *ABE*

$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

,8.B. 3E3A$'')* 6A$D*E( )$&E(4PS) *A3A


Pada program yang mengganti handler interupsi, kadang"kadang kita masih ingin melaksanakan handler yang asli. .ntuk itu lihatlah pada program 08.@. berikut; 5eta2WPesan 3A5(O PesanCBanya2C9C> 3OV A9C17 h J <!ngsi !nt!2 menceta2 2alimat 3OV B*C 1 1111b J Atrib!t 3OV B6C J $omor halaman 3OV D*C9 J Posisi 2olom 3OV D6C> J Posisi baris 3OV 59CBanya2 J Banya2nya 2ara2ter P4S6 5S J ES"BP mencatat L POP ES J lo2asi 2alimat *EA BPCPesan J )$& 1 h J la2sana2an E$D3 (ead2ey 3A5(O 3OV A6C )$& 1Gh E$D3 J 3acro !nt!2 men!ngg! pene2anan J sembarang tombol dari 2eyboard J

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*.

,8.1 . 3E$'A&AS) 3ASA*A6 (EE$&(A$&5> DOS


Pada saat pertama 4OS diciptakan, ia dirancang dengan system single user, sehingga 4OS sering disebut sebagai 5non"reentrant operating system5. Bila terjadi interupsi dari 4OS sementara interupsi 4OS yang lainnya sedang aktif, data"data yang tersimpan dalam stack akan menjadi berantakan dan komputer akan menjadi hang. !nilah sebabnya, mengapa pada program residen interupsi dari 4OS tidak bisa digunakan. etapi 4OS menyediakan banyak fungsi yang sangat berguna dan tidak terdapat pada fungsi B!OS, seperti penanganan operasi pada file, memory dan sebagainya. Banyak orang yang mengira bah+a interupsi 4OS tidak boleh sama sekali dipakai dalam program residen. Benarkah demikian J idak. Seperti yang telah kita ketahui, interupsi 4OS tidak boleh terjadi bersamaan, sehingga untuk menggunakan fungsi 4OS pada program residen yang perlu kita lakukan ialah 5 (angan menggunakan fungsi 4OS bila fungsi 4OS yang lain sedang aktif 5. Bagaimana kita bisa mengetahui bah+a suatu fungsi 4OS sedang aktif atau tidak J .ntuk itu anda bisa menggunakan kedua cara berikut; 1. &unakan fungsi B8h dari interupsi 01h untuk mendapatkan !n4OS Hlag atau Bendera Aktif 4OS7 BAD *. .ntuk menggunakan fungsi ini, masukkan B8h pada AC, kemudian laksanakan interupsi 01h. Setelah interupsi dilaksanakan , pasangan register 'S;B3 akan mencatat alamat tempat BA4 berada. BA4 yang terdiri atas 1 byte akan bernilai nol79* jika fungsi 4OS tidak ada yang sedang aktif. Artinya pada keadaan ini kita bisa menggunakan fungsi 4OS pada program residen dengan aman. Bila BA4 bernilai lebih dari 9, artinya terdapat fungsi 4OS yang sedang aktif. 4alam keadaan seperti ini kita tidak boleh menggunakan fungsi 4OS pada program residen, karena akan meyebabkan komputer menjadi hang. 0. 4OS mungkin saja dalam keadaan aman, +alaupun BA4 bernilai lebih dari

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

P4S6 DS P4S6 S) 3OV 3OV 3OV 53P

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@?

BAB 99V '(A<)%


,-.1. 3OD4S '(A<)%
Pada modus te/t, layar dibagi menjadi kotak"kotak yang membentuk karakter. Pada modus default 4os, layar terbagi menjadi ?9 kotak horisontal dan 0: kotak ,ertical. $ita bisa saja membentuk suatu gambar pada modus teks, akan tetapi hasilnya tentu saja sangat kasar. Pada modus grafik, layar dibagi menjadi titik"titik yang disebut sebagai Pi/el. .ntuk memrogram pada modus grafik ini, tentunya anda harus mengaktifkan mode layar grafik terlebih dahulu 71ihat 1?.19 tentang mode layar*. -isalkan anda mengaktifkan mode 1Bh, maka layar akan dibagi menjadi B09 3 099 pi/el, atau sama dengan @8999 titik. Bila diaktifkan mode 9@h, maka layar akan dibagi menjadi @89 3 099 pi/el atau sama 10?999 pi/el. entunya pada mode 9@ ini gambar akan tampak lebih halus. Anda harus ingat bah+a tidak semua mode didukung oleh monitor anda. Anda harus mengetahui dengan jelas jenis monitor dan modus apa saja yang didukungnya.

,-.,. 3E$''A3BA( SA&4 P)9E*


Bila anda menggunakan komputer, seperti Cercules dan -acintosh maka dengan mudah anda dapat menggambar lingkaran, garis, serta me+arnai gambar tersebut. Bagaimana pada komputer !B- P2 dan kompatiblenyaJ Pada komputer !B- P2 dan kompatiblenya, kemampuan menggambar pada modus grafik hanyalah satu, yaitu menggambar pi/el7titik*. $emampuan ini tampaknya sangatlah kurang, tetapi pada bagian ini akan kita lihat bagaimana menggunakan fasilitas ini untuk menggambar berbagai gambar yang menarik. .ntuk menggambar pi/el ini aktifkanlah modus grafik terlebih dahulu. Setelah itu anda bisa menggambar pi/el dengan fungsi 92h, dengan aturan pemakaian; !DP. ; AC F 92h A1 F Atribut dari pi/el. (ika bit ke A"nya 1, maka pi/el akan di 3or dengan gambar layar. 23 F Posisi kolom73* tempat pi/el akan digambar 43 F Posisi baris7L* tempat pi/el akan digambar BC F Domor halaman, jika modus ,ideo yang digunakan mempunyai halaman tampilan melebihi satu. (ika modus yang digunakan

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

,-.7. 3E$DAPA&%A$ )$<O(3AS) DA($A P)9E*


$ebalikan dari fungsi 92h, fungsi 94h dari interupsi 19h digunakan untuk mendapatkan +arna dari suatu pi/el. Aturan untuk menggunakan fungsi ini adalah; !DP. ; AC F 94h 23 F Posisi kolom73* dari pi/el 43 F Posisi baris7L* dari pi/el BC F Domor halaman, jika modus ,ideo yang digunakan mempunyai halaman tampilan melebihi satu. (ika modus yang digunakan hanya menggunakan 1 halaman tampilan, maka isi BC akan diabaikan. O. P. ; A1 F Atribut dari pi/el pada kolom 23 dan baris 43.

1A9

,-.8. 3E$''A3BA( 'A()S *4(4S


Bila suatu benda dibagi"bagi terus, maka akan anda dapatkan apa yang dinamakan sebagai atom, atau bagian terkecil dari suatu benda. 4emikian halnya pada gambar, bila dilihat secara seksama, setiap gambar terbentuk atas titik" titik. -akin banyak titik yang membentuk suatu gambar, makin haluslah gambar tersebut. 4engan prinsip yang sama, kita bisa membuat bermacam gambar yang menarik. " .ntuk menggambar garis ,ertical maupun horisontal adalah cukup mudah. Anda hanya perlu menggambar titik"titik secara berurutan untuk menghasilkan sebuah garis. " .ntuk menggambar garis 6ertical ke ba+ah, anda hanya perlu menambah posisi baris7L* dengan posisi kolom73* yang tetap. Sedangkan untuk menggambar garis Corisontal ke kanan, anda hanya perlu menambah posisi kolom73* dengan posisi baris7L* yang tetap71ihat program 0:.1*. (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

1A1

*OOP POP POP E$D3

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.

,-.-. 3E$''A3BA( 'A()S 3)()$'


.ntuk menggambar sebuah garis miring, prinsip yang digunakan tidaklah jauh berbeda dengan menggambar garis lurus. .ntuk menggambar sebuah garis miring 8: derajat ke kiri ba+ah, anda hanya perlu menggambar pi/el sambil

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

J 'aris miring 2iri J 'aris miring 2anan

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.

C1, J 'ambar 2ota2

,-.E. 3EDA($A) %O&A%


Pada program 0:.B., kita hanya sekedar menggambar sebuah kotak tanpa +arna dasar. .ntuk memberi +arna pada kotak kita harus menggambar pi/el"pi/el pada seluruh daerah kotak yang kosong. 4engan demikian kotak akan menjadi ber+arna.

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?

,-.=. 3E$''A3BA( 6E*)%OP&E(


Pada program sebelumnya, kita selalu menggambar bentuk gambar yang linear. $ini, bila anda ingin menggambar sebuah gambar tak tentu, seperti manusia, tengkorak, tank, bunga atau helikopter, dengan rumus adalah tidak mungkin. .ntuk itu salah satu cara yang praktis adalah membentuk suatu tabel gambar. 4ari tabel ini kemudian anda lihat secara perB! nya. Bila bit pada data gambar bernilai satu, maka gambarlah sebuah pi/el, sebaliknya bila Bit pada data gambar bernilai nol maka pi/el tidak digambar. Setelah itu pindahkan posisi 37$olom* dan test bit berikutnya. 4engan cara demikian anda bisa membuat gambar dalam ukuran yang berapapun, sesuai resolusi monitor anda. Pada program 0:.:. akan ditunjukkan, bagaimana membuat sebuah gambar helikopter dengan ukuran B0 bit 3 B0 bit. (ead2ey 3A5(O 3OV A6C )$& 1Gh E$D3 J 4nt!2 men!ngg! mas!2an dari J %eyboard

Set5(& 3A5(O 3ode 3OV A6C J 3OV A*C3ode J )$& 1 h E$D3

J 4nt!2 mer!bah mode layar

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

)$& , h &Data Program ,-.-. 3enggambar 6eli2opter

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.

,-.B. &E(BA$'%A$ 6E*)%OP&E( A$DA


Pada grafik, yang paling menarik adalah membuat sebuah animasi. Seperti dinosaurus yang sedang berjalan, bunga yang sedang berkembang, pesa+at yang meledak dan sebagainya. 4ibalik pembuatan animasi ini terdapat berpuluh"puluh cara yang dapat digunakan. Salah satu cara yang paling praktis dan mudah, +alaupun tidak begitu bagus adalah dengan teknik gambar hapus. Laitu animasi dengan cara menggambar sebuah gambar, kemudian dihapus dan digambar lagi pada posisi atau bentuk gambar yang berbeda. 4engan cara ini sebuah gambar akan tampak seperti sedang bergerak 7Program 0:.@*. Delay 3A5(O *O5A* 4lang P4S6 59 S4B 59C59 4lang" *OOP 4lang POP 59 E$D3 Set5(& 3A5(O 3ode 3OV A6C 3OV A*C3ode )$& 1 h E$D3

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

Proses" Set5(& 17h

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

Program ,-.G. Animasi 6eli2opter yang sedang terbang

Bila program 0:.@. dieksekusi, maka pada layar akan ditampilkan sebuah gambar helikopter 7&ambar 0:.@* yang akan terbang melintasi monitor anda.

1?B

,-.1 . A$)3AS) DE$'A$ 6A*A3A$ *A>A(


Pada bagian ini, akan kita lihat teknik lain dalam pembuatan suatu animasi. Seperti yang telah anda ketahui, dalam suatu modus mungkin saja terdapat beberapa halaman layar. Calaman layar ini bisa kita manfaatkan untuk pembuatan suatu animasi. .ntuk itu, gambarlah bentuk gambar yang diinginkan pada masing"masing halaman layar. Setelah itu anda tinggal mengaktifkan halaman layar untuk mendapatkan suatu efek gerakan. (ead2ey 3A5(O P4S6 A9 3OV A6C )$& 1Gh POP A9 E$D3 J 3acro !nt!2 men!gg! J pene2anan tombol 2eyboard

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

1 11111bC11111 1 1 111bC111 1 1 bC 11 11 bC 111 111 bC1 1 1111bC 1111 bC bC

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

1 bC 1 1 bC 11 11 bC 111 111 bC1 1 1111bC 1111 bC bC

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

J A2ti#2an halaman layar 2e A*

J %emabli 2e mode :ideo de#a!lt dos

Program ,-.E. Animasi dengan halaman layar

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??

BAB 99V) 3E3B4A& P(O'(A3 E9E


,G.1. P(O'(A3 E9E
Seperti program 2O-, program '3' juga merupakan suatu bentuk program yang dapat langsung dijalankan pada prompt 4OS. Bentuk program '3' tidaklah dibatasi oleh satu segment, seperti halnya pada program 2O-. Oleh karenanya besarnya file untuk program '3' bisa melebihi @8 $B. Program '3' merupakan program yang lebih lengkap dibandingkan dengan program 2O-, selain itu penggunaan memory juga lebih mudah pada program '3'. 5atatan" Pada program '3', segala bentuk (.-P dan 2A11 digunakan jenis HA#7Program 2O- berbentuk D'A#*. Cal ini dikarenakan program '3' yang bisa mengakses segment lain, sehingga perintah (.-P da n 2A11 membutuhkan informasi alamat dari segment72S* selain offset7!P*.

,G.,. 3ODE* P(O'(A3 E9E


Pada program 2O-, kita tidak perlu mendefinisikan tempat tertentu untuk segment 4A A dan S A2$ karena program 2O- hanya menggunakan 1 segment. 4engan demikian segment untuk 4A A, S A2$ dan 2O4' pada program 2O- adalah sama, stack akan menggunakan akhir dari segment yang digunakan oleh segment 2O4'. Berbeda dengan program 2O-, pada program '3' anda harus mendefinisikan tempat untuk segment 4A A, 2O4' dan S A2$. .ntuk membuat program '3' ini, anda bisa menggunakan model pada gambar 0@.1. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" .-O4'1 S-A11 .S A2$ 099h .4A A G""""""""""""""G K empat K K 4ata Program K G""""""""""""""G .2O4' 1abel1; -O6 A3,)4A A -O6 4S,A3 G"""""""""""""""G

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

J )nialisasiC s!paya J DS men!n1!2 pada data

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

Program ,G.1. 3er!bah h!r!# 2ecil men1adi h!r!# besar

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

Assembling #ile" 4P5ASE.AS3 Error messages" $one Darning messages" $one

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

BAB 99V)) &4(BO DEB4''E(


,E.1. P(O'(A3 A$DA SA*A6 P
4alam membuat program, kita biasanya akan selalu mengalami suatu kesalahan. $esalahan dalam pembuatan sebuah program dapat dibagi menjadi dua, yaitu kesalahan synta/ dan kesalahan logika. $esalahan syntak biasanya berupa kesalahan tata cara atau aturan penulisan seperti perintah; 5-O6 AC,A35 7kedua operand tidak sama besar bitnya*. $esalahan synta/ adalah mudah untuk dicari dan diperbaiki. Bentuk kesalahan yang kedua, yaitu kesalahan logika adalah kesalahan program yang berjalan tidak sesuai dengan yang diinginkan. $esalahan seperti ini tidaklah ditampilkan oleh compiler seperti pada kesalahan synta/. !ngatlah, program akan selalu berjalan sesuai dengan yang diperintahkan bukannya seperti yang diinginkan. .ntuk mencari kesalahan logika, urbo 4ebugger merupakan salah satu debugger yang paling canggih pada saat ini. 4engan urbo 4ebugger anda bisa melihat jalannya program perintruksi, melihat isi register, melihat isi stack, melihat dan mengubah isi flags register, mengubah isi memory, mentrace program residen, mentrace de,ice dri,er dan sebagainya. 4engan mengusai urbo debugger banyak yang dapat anda lakukan, seperti melihat program orang lain, mengubah suatu program yang sudah jadi, membongkar suatu kode proteksi, serta membongkar ,irus. $arena urbo 4ebugger cukup besar untuk kita bicarakan secara lengkap dan mendetail, maka pada bagian ini hanya akan dibahas beberapa hal penting yang anda perlukan saja.

,E.,. 3E$>)AP%A$ P(O'(A3 4$&4% D)*A5A%


(ika anda ingin melacak kesalahan ataupun jalannya program anda, pada saat source program di AS- dan di 1!D$ gunakan parameter sebagai berikut; &AS3/Q) 4P5ASE &*)$%/V 4P5ASE 4engan cara ini, pada akhir file '3' yang dihasilkan akan ditambahkan informasi yang dapat digunakan oleh urbo 4ebugger. !nformasi ini antara lain, nama ,ariabel dan lokasi baris dari source file yang akan dieksekusi. (ika parameter P! dan 6 tidak disertakan, urbo 4ebugger hanya akan menampilkan intruksi yang dijalankan tanpa embel"embel lain sehingga banyak kelebihan dari urbo 4ebugger yang tidak bisa kita manfaatkan.

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. &ampilan 3en! &!rbo Deb!gger Pada lingkungan urbo 4ebugger ini, mouse dapat anda gunakan dengan mudahnya tetapi bila anda tidak mempunyainya, keyboard juga dapat digunakan.

,E.7. 3E$''4$A%A$ &4(BO DEB4''E(


Pada bagian ini akan kita coba menggunakan urbo 4ebugger untuk melihat jalannya program .P2AS'.'3'7Program 0@.1*. !ngatlah untuk menyertakan parameter P! dan 6 pada saat source program .P2AS'.AS- anda jadikan '3'. Setelah anda masuk pada lingkungan urbo 4ebugger dengan perintah; 5"?&D 4PA5ASE.E9E $ini, cobalah pilih menu 56ie+5 kemudian pilih 56ariabel5, maka semua isi ,ariabel program akan ditampilkan. -ungkin penempatan +indo+ ,ariabel ini agak mengganggu anda, untuk itu anda dapat memindahkannya dengan menekan tombol 2trlGH: dan digeser dengan tombol panah. Setelah pergeseran selesai dilakukan tekanlah enter, maka +indo+ ,ariabel tersebut akan segera berpindah. Setelah itu dari menu utama, pilihlah menu 56ie+5 kemudian pilih 5#egisters5, maka seluruh nilai register dan fla g akan dapat anda lihat. Bila anda ingin juga melihat nilai dari register B0 bit, aktifkanlah menu local dari registers dengan menekan tombol A1 GH19 kemudian pilihlah 5#egisters B0" Bit5. Bila pada saat itu, register B0 Bit belum ditampilkan maka akan segera ditampilkan, sebaliknya jika register B0 Bit sudah ditampilkan maka register B0 bit tersebut akan segera dihilangkan.

1E8

===== &br0A0.P!3 >>>>> 'ambar ,E.,. &ampilan &!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.

,E.7.1. 3E*)6A& DA$ 3E$'4BA6 )S) (E')S&E(


Anda bisa melihat dan mengubah semua nilai register pada komputer, termasuk flags register dengan mudahnya. 2aranya adalah; 1. Aktifkan urbo 4ebugger. 0. Pilih menu 56ie+5. B. Pilih menu 5#egisters5, maka semua nilai register bisa anda lihat. 4engan tombol panah, anda bisa menggerakkan sorotan pada register dan dengan tombol abulasi anda bisa berpindah dari sorotan register ke sorotan Hlags. Anda bisa mengubah nilai flags dengan menyorot flag yang ingin diganti dan tekan tombol 'nter. ====== &br0AB.P!3 >>>>>>> 'ambar ,E.7. 3en! (egisters $ini aktifkanlah -enu 1ocal dari menu #egisters dengan menekan tombol A1 GH19 yang terdiri atas; " !ncrement; .ntuk menambah nilai register yang sedang disorot dengan satu. " 4ecrement; .ntuk mengurangai nilai register yang sedang disorot dengan satu. " Pero ; .ntuk menolkan nilai register yang sedang disorot. " 2hange ; Pilihan ini akan menampilkan sebuah kotak yang akan meminta anda untuk memasukkan angka baru untuk

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.

,E.7.,. 3A$)P4*AS) DA&A 3E3O(>


4engan urbo 4ebugger, anda bisa melihat, mengganti, merubah, mencatat maupun menulisi data dimemory dengan mudahnya. Adapun caranya adalah; 1. Aktifkan urbo 4ebugger. 0. Pilih menu 56ie+5. B. Pilih menu 54ump5, maka secara default akan ditampilkan data pada segment data74S*. Besarkanlah +indo+nya dengan menekan tombol H:7Penekanan H: sekali lagi akan mengecilkan +indo+nya*. Anda bisa menggerakkan posisi kursor dengan tombol panah. 4ata pada posisi kursor bisa diubah dengan langsung mengetikkan angka barunya atau mengetikkan karakter dengan diapit oleh tanda petik. Anda bisa menekan tombol 2trlG& untuk menampilkan alamat baru, misalkan alamat stack, dengan memasukkan kode SS;SP pada input Bo/. Anda juga bisa menggunakan angka secara langsung pada input Bo/, seperti 9999;9999 untuk menampilkan !nterrupt 6ektor able. ===== &br0A8.P!3 >>>>>> 'ambar ,E.8. 3anip!lasi Data 3emory 8. $ini aktifkanlah -enu 1ocal dari menu 4ump dengan menekan tombol A1 GH19. Anda akan akan melihat menu; " &oto ; .ntuk menampilkan data pada suatu alamat. Perintah ini sama dengan penekanan tombol 2trlG& yang telah kita lakukan sebelumnya. " Search ; .ntuk mencari byte atau string pertama yang cocok dengan deskripsi yang kita berikan. " De/t ; .ntuk mencari byte atau string selanjutnya yang cocok, setelah anda mencari dengan Search.

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

*A3P)(A$ ) DA<&A( )$S&(4%S) ASSE3B*>

-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.

-nemonic ; .3P +.!mpA ersedia pada ; ?9?? keatas

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

; *EA +*oad E##ecti:e AddressA

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

POP POP POP POP POP POP POP POP

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?

*A3P)(A$ )) DA<&A( )$&E((4P& P)*)6A$

)$&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 )np!t " AC F 91h

(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

AC F 1Bh 4S;43 F H2B

A1 F 99h (ika sukses A1 F HHh (ika gagal

)$&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

Anda mungkin juga menyukai