Agus Haryawan - Politama Surakarta
|
|
|
- Ratna Irawan
- 9 tahun lalu
- Tontonan:
Transkripsi
1 BUKU PEGANGAN KULIAH oleh: Agus Haryawan, S.T. Jurusan Teknik Komputer DIII / Semester IV (Dipakai untuk kalangan sendiri) POLITEKNIK PRATAMA MULIA SURAKARTA 2007 Jln. Haryo Panular No. 18A Solo, Telp. (0271) [email protected] website: http//ww w.politama.a c.id
2 KATA PENGANTAR Dengan memanjatkan puji syukur ke hadirat Tuhan Yang Maha Esa, atas segala karunia dan rahmat-nya, pada kesempatan ini kami selaku Direktur Politeknik Pratama Mulia Surakarta menyampaikan terima kasih atas segala usaha dari Dosen Pengampu untuk menyusun Buku Pegangan Kuliah Buku Pegangan Kuliah Bahasa Rakitan ini diterbitkan dalam upaya meningkatkan dan mengefektifkan proses belajar mengajar di Politeknik Pratama Mulia Surakarta, khususnya pada jurusan Teknik Komputer. Untuk lebih mendalami masalah Bahasa Rakitan tidak hanya berpegangan pada buku ini saja, mahasiswa diharapkan membaca buku-buku referensi yang lain. Ucapan terima kasih disampaikan kepada semua pihak yang telah berpartisipasi dalam penerbitan buku ini. Saran dan kritik yang konstruktif dari para dosen, pembaca dan mahasiswa sangat diharapkan, demi perbaikan dan penyempurnaan penerbitan di masa akan datang. Semoga buku ini bermanfaat bagi para pemakai dalam rangka peningkatan mutu pendidikan di Politeknik Pratama Mulia Surakarta Surakarta, April 2013 Drs. Sunaryo NIP i
3 DAFTAR ISI Bab 1 Mikroprosesor, Memori dan Register Register Pengertian Register Jenis-Jenis Register Pengetahuan Dasar Program Assembler Konstruksi Program Assembler Assembler Directive Pembentukan Variabel dan Konstanta Secara Assembler Membuat Program Dengan Bahasa Assembler (Program COM dan EXE) Perbedaan Program COM dan EXE Membuat program dengan Turbo Assembler dan Turbo Linker Instruksi MOV Instruksi INT Memulai Program Assembler 10 Bab 2 Mode Akses Memori, Penggunaan Variabel Dan Stack Mode Pengalamatan atau Pengaksesan Mode Pengalamatan Register dan Segera Mode Pengalamatan Langsung Mode Pengalamatan Tak-langsung Register Mode Pengalamatan Relatif Dasar Mode Pengalamatan Langsung Terindeks Mode Pengalamatan Dasar Terindeks Variabel Dan Penggunaannya Larik Dan Penggunaannya Memperoleh Alamat Suatu Variabel Konstanta Stack 17 Bab 3 Instruksi 80X Instruksi Transfer Data Instruksi Aritmetika Instruksi Manipulasi Bit Instruksi Kontrol Aliran Program Instruksi String Instruksi Interupsi Instruksi Kontrol Prosesor 41 ii
4 Bab 4 Interupsi Pendahuluan Daftar Interupsi Pilihan 43 Bab 5 Procedure dan Makro Procedure Membuat Procedure Menggunakan Procedure Macro Membuat Makro Label Pada Makro Macro atau Procedure 57 Bab 6 Contoh-Contoh Program Untuk Latihan 58 iii
5 B AB I 1 MIKROPROSESOR, MEMORI DAN REGISTER 1.1 REGISTER Pengertian Register Dalam pemrograman dengan bahasa Assembly, mau tidak mau anda harus berhubungan dengan apa yang dinamakan sebagai Register. Lalu apakah yang dimaksudkan dengan register itu sebenarnya?. Register merupakan sebagian memori dari mikroprosesor yang dapat diakses dengan kecepatan yang sangat tinggi. Dalam melakukan pekerjaannya mikroprosesor selalu menggunakan register-register sebagai perantaranya, jadi register dapat diibaratkan sebagai kaki dan tangannya mikroprosesor Jenis-Jenis Register Register yang digunakan oleh mikroprosesor dibagi menjadi 5 bagian dengan tugasnya yang berbeda-beda pula, yaitu : Segmen Register. Register yang termasuk dalam kelompok ini terdiri atas register CS,DS,ES dan SS yang masing-masingnya merupakan register 16 bit. Register-register dalam kelompok ini secara umum digunakan untuk menunjukkan alamat dari suatu segmen. Register CS (Code Segment) digunakan untuk menunjukkan tempat dari segmen yang sedang aktif, sedangkan register SS(Stack Segment) menunjukkan letak dari segmen yang digunakan oleh stack. Kedua register ini sebaiknya tidak sembarang diubah karena akan menyebabkan kekacauan pada program anda nantinya. Register DS (Data Segment) biasanya digunakan untuk menunjukkan tempat segmen di mana data-data pada program disimpan. Umumnya isi dari register ini tidak perlu diubah kecuali pada program residen. Register ES (Extra Segment), sesuai dengan namanya adalah suatu register bonus yang tidak mempunyai suatu tugas khusus. Register ES ini biasanya digunakan untuk menunjukkan suatu alamat di memory, misalkan alamat memory video. Pada prosesor terdapat tambahan register segment 16 bit, yaitu ES(Extra Segment) dan GS<Extra Segment>. Pointer dan Index Register. Register yang termasuk dalam kelompok ini adalah register SP,BP,SI dan DI yang masing-masing terdiri atas 16 bit. Register- register dalam kelompok ini secara umum digunakan sebagai penunjuk atau pointer terhadap suatu lokasi di memory. Register SP (Stack Pointer) yang berpasangan dengan register segment SS(SS:SP) digunakan untuk menunjukkan alamat dari stack, sedangkan register BP(Base Pointer)yang berpasangan dengan register SS(SS:BP) mencatat suatu alamat di memory tempat data. Register SI (Source Index) dan register DI (Destination Index) biasanya digunakan pada 1
6 Bab I Mikroprosesor, Memori dan Register operasi string dengan mengakses secara langsung pada alamat di memory yang ditunjukkan oleh kedua register ini. Pada prosesor terdapat tambahan register 32 bit, yaitu ESP,EBP,ESI dan EDI. General Purpose Register. Register yang termasuk dalam kelompok ini adalah register AX,BX,CX dan DX yang masing-masing terdiri atas 16 bit. Register- register 16 bit dari kelompok ini mempunyai suatu ciri khas, yaitu dapat dipisah menjadi 2 bagian di mana masing-masing bagian terdiri atas 8 bit, seperti pada gambar 4.1. Akhiran H menunjukkan High sedangkan akhiran L menunjukkan Low. + A X + + B X + + C X + + D X AH AL BH BL CH CL DH DL Secara umum register-register dalam kelompok ini dapat digunakan untuk berbagai keperluan, walaupun demikian ada pula penggunaan khusus dari masing-masing register ini yaitu : Register AX, secara khusus digunakan pada operasi aritmetika terutama dalam operasi pembagian dan pengurangan. segmen. Register BX, biasanya digunakan untuk menunjukkan suatu alamat offset dari suatu Register CX, digunakan secara khusus pada operasi looping di mana register ini menentukan berapa banyaknya looping yang akan terjadi. Register DX, digunakan untuk menampung sisa hasil pembagian 16 bit. Pada prosesor terdapat tambahan register 32 bit, yaitu EAX,EBX,ECX dan EDX. Index Pointer Register Register IP berpasangan dengan CS(CS:IP) menunjukkan alamat di memory tempat dari instruksi (perintah) selanjutnya yang akan dieksekusi. Register IP juga merupakan register 16 bit. Pada prosesor digunakan register EIP yang merupakan register 32 bit. Flags Register. Sesuai dengan namanya Flags (Bendera) register ini menunjukkan kondisi dari suatu keadaan (ya atau tidak). Karena setiap keadaan dapat digunakan 1 bit saja, maka sesuai dengan jumlah bitnya, Flags register ini mampu mencatat sampai 16 keadaan. Adapun flag yang terdapat pada mikroprosesor 8088 ke atas adalah : OF (OverFlow Flag) Jika terjadi OverFlow pada operasi aritmetika, bit ini akan bernilai 1. SF (Sign Flag) Jika digunakan bilangan bertanda bit ini akan bernilai 1. ZF (Zero Flag) Jika hasil operasi menghasilkan nol, bit ini akan bernilai 1. CF (Carry Flag) Jika terjadi borrow pada operasi pengurangan atau carry pada penjumlahan, bit ini akan bernilai 1. PF (Parity Flag) DF (Direction Flag) Digunakan untuk menunjukkan paritas bilangan. Bit ini akan bernilai 1 bila bilangan yang dihasilkan merupakan bilangan genap. Digunakan pada operasi string untuk menunjukkan arah proses. 2
7 Bab I Mikroprosesor, Memori dan Register IF (Interrupt Enable Flag) TF (Trap Flag) AF (Auxiliary Flag) NT (Nested Task) IOPL (I/O Protection level) CPU akan mengabaikan interupsi yang terjadi jika bit ini 0. Digunakan terutama untuk debugging, dengan operasi step by step. Digunakan oleh operasi BCD, seperti pada perintah AAA. Digunakan pada prosesor dan untuk menjaga jalannya interupsi yang terjadi secara beruntun. Flag ini terdiri atas 2 bit dan digunakan pada prosesor dan untuk mode proteksi. 1.2 PENGETAHUAN DASAR PROGRAM ASSEMBLER Bahasa Assembler adalah bahasa komputer yang kedudukannya di antara bahasa mesin dan bahasa level tinggi seperti bahasa C atau Pascal. Bahasa C atau Pascal dikatakan sebagai bahasa level tinggi karena memakai kata-kata dan pernyataan yang mudah dimengerti manusia, meskipun masih jauh berbeda dengan bahasa manusia sesungguhnya. Bahasa mesin adalah kumpulan kode biner yang merupakan instruksi'yang bisa dijalankan oleh komputer. Sedangkan bahasa Assembler memakai kode Mnemonic untuk menggantikan kode biner, agar lebih mudah diingat sehingga lebih memudahkan penulisan program. Program yang ditulis dengan bahasa Assembler terdiri dari label, kode mnemonic dan lain sebagainya, pada umumnya dinamakan sebagai program sumber (source code) yang belum bisa diterima oleh prosesor untuk dijalankan sebagai program, tapi harus diterjemahkan dulu menjadi bahasa mesin dalam bentuk kode biner. Program sumber dibuat dengan program editor biasa, misalnya NotePad pada Windows atau Edit.com pada DOS, selanjutnya program sumber diterjemahkan ke bahasa mesin dengan menggunakan program Assembler. Hasil kerja program Assembler adalah "program objek" dan juga "assembler listing. Assembler Listing merupakan naskah yang berasal dari program sumber, dalam naskah tersebut pada bagian sebelah setiap baris dari program sumber diberi tambahan hasil terjemahan program Assembler. Tambahan tersebut berupa nomor memori-program berikut dengan kode yang akan diisikan pada memori-program bersangkutan. Naskah ini sangat berguna untuk dokumentasi dan sarana untuk menelusuri program yang ditulis. 1.3 KONSTRUKSI PROGRAM ASSEMBLER Program sumber dalam bahasa Assembler menganut prinsip 1 baris untuk satu perintah, setiap baris perintah tersebut bisa terdiri atas beberapa bagian (field), yakni: - label (untuk menandai suatu baris) - mnemonic (OpCode / Kode Operasi) - operand (yang bisa lebih dari satu) - komentar (untuk keterangan atau catatan mengenai baris atau blok program) Untuk membedakan masing-masing bagian tersebut dibuat ketentuan sebagian berikut: 3
8 Bab I Mikroprosesor, Memori dan Register 1. Masing-masing bagian dipisahkan dengan spasi atau TAB, khusus untuk operand yang lebih dari satu masing-masing operand dipisahkan dengan koma. 2. Bagian-bagian tersebut tidak harus semuanya ada dalam sebuah baris, jika ada satu bagian yang tidak ada maka spasi atau TAB sebagai pemisah bagian tetap harus ditulis. 3. Bagian Label ditulis mulai huruf pertama dari baris, jika baris bersangkutan tidak mengandung Label maka label tersebut digantikan dengan spasi atau TAB, yakni sebagai tanda pemisah antara bagian Label dan bagian mnemonic. Label OpCode Operand Komentar TData : JMP Proses ; Lompat ke Proses Proses : MOV AX,13h ; AX=13h SUB BX,AX ; Kurangkan BX-AX MOV DX,BX ; DX=BX MOV AX,30H ; AX=30h SBB BX,AX ; Kurangkan BX-AX MOV BX,AX END INT 20h ; Kembali ke DOS TData Assembler Directive Seperti sudah dibahas di atas, bagian Mnemonic dari sebuah baris perintah bisa merupakan instruksi untuk prosesor, maupun berupa Assembler Directive untuk mengatur kerja dari program Assembler. Mnemonic untuk instruksi prosesor, sangat tergantung pada prosesor yang dipakai, sedangkan mnemonic untuk Assembler Directive tergantung pada program Assembler yang dipakai. Meskipun demikian, terdapat beberapa Assembler Directive yang umum, yang ' untuk banyak macam program Assembler. ORG Assembler Directive yang bersifat umum tersebut, antara lain adalah singkatan dari ORIGIN, untuk menyatakan nomor memori yang dipakai setelah perintah itu, misalnya ORG $1000 maka memori berikutnya yang dipakai Assembler adalah $1000. ORG berlaku untuk memori program maupun memori data. Dalam hal penomoran memori, dikenal tanda $ sebagai awalan untuk menyatakan nomor memori dari baris bersangkutan. Misalnya: ORG 1000 LJMP$+1000 Operand $+$500 mempunyai arti nomor memori program bersangkutan ditambah dengan $500, karena instruksi LJMP ini terletak persis di bawah ORG $1000 maka nomor memori program baris ini adalah $1000, sehingga operand $+$500 bernilai $1500 dan instruksi ini identik dengan LJMP $1500 EQU singkatan dari EOUATE, dipakai untuk menentukan nilai sebuah Symbol. 4
9 Bab I Mikroprosesor, Memori dan Register Misalnya: ANGKA88 EQU, 88 memberi nilai 88 pada Symbol ANGKA88, atau CR EQU $0D mempunyai makna kode ASCII dari CR (Carriage Retum) adalah $08. DB singkatan dari DEFINE BYIE, dipakai untuk memberi nilai tertentu pada memori-program. Nilai tersebut merupakan nilai 1 byte, bisa berupa angka ataupun kode ASCII. DB merupakan Assembler Directive yang dipakai untuk membentuk teks maupun tabel. ORG $0200 STRING DB 'AtmelAT89C2051' PANJANG ELU $-STRING ORG $0200 memerintahkan program Assembler agar bekerja mulai dari memori-program nomor $0200, instruksi selanjutnya memerintahkan program Assembler agar mengisi memori-program nomor $0200 dan berikutnya dengan tulisan 'Atmel AT89C2051" (yang diisikan adalah kode ASCII dari 'A', 't' dan seterusnya), PANJANG dari STRING bisa dihitung dengan cara PANJANG EQU $-STRING, yakni selisih dari nomor memori-program baris bersangkutan dikurangi dengan nomor awal memori-program yang diisi STRING. DW singkatan dari DEFINE WORD, dipakai untuk memberi nilai 2 byte ke memori-program pada baris bersangkutan. Assembler Directive ini biasa dipakai untuk membentuk suatu tabel yang isinya adalah nomor-nomor memori-program. DS singkatan dari Define Storage, Assembler Directive ini dipakai untuk membentuk variabel. Sebagai variabel tentu saja memori yang dipakai adalah memori-data (RAM) bukan memoriprogram (ROM). Hal ini harus benar-benar dibedakan dengan Assembler Directive DB dan DW yang membentuk kode di memori-program. Dan karena DS bekerja di RAM, maka DS hanya sekedar menyediakan tempat di memori, tapi tidak mengisi nilai pada memori bersangkutan Pembentukan Variabel dan Konstanta Secara Assembler Assembler dilengkapi dengan pengatur program Assembler {assembler directive) untuk mengisi berbagai macam data ke memori-program. Ada 2 macam pengatur program Assembler (assembler directive), yakni DB (Define Byte) dan DW (Define Word). DB dipakai untuk membentuk data byte demi byte, sedangkan DW dipakai untuk membentuk data 2 byte yang merupakan alamat (nomor memori). DB singkatan dari Define Byte, memerintah Assembler agar mengisi memori-program dengan data-data yang tercantum dalam operand. Operand dari perintah DB bisa hanya satu, tapi bisa berapa pun sejauh baris untuk menulis perintah tersebut masih cukup menampung. Seperti biasa kalau terdapat banyak operand, maka operand satu dengan yang lain dipisahkan dengan tanda koma. DB sering dipakai untuk membentuk tabel dalam memori-program. Define Word (DW) merupakan pengatur program Assembler (assembler directive) untuk mengisi memori-program seperti DB, tapi yang diisikan adalah nomor memori yang panjangnya 2 byte Membuat Program Dengan Bahasa Assembler (Program 5
10 Bab I Mikroprosesor, Memori dan Register COM dan EXE) Program COM Untuk membuat program.com yang hanya menggunakan 1 segment, bisa anda buat dengan model program seperti gambar di bawah ini. Bentuk yang digunakan di sini adalah bentuk program yang dianjurkan(ideal). Dipilihnya 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 terkenal(turbo Pascal dan C) ORG 100H Label1 : JMP Label TEMPAT DATA PROGRAM Label2 : TEMPAT PROGRAM INT 20H END Label Model Program COM Supaya lebih jelas bentuk dari program ideal, marilah kita telusuri lebih lanjut dari bentuk program ini. MODEL SMALL Tanda directive ini digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan oleh program kita. Model inilah yang akan sering kita pakai pada buku ini, karena data dan code yang digunakan oleh program kurang dari ukuran 1 segment atau 64 KB. Model yang lain seperti TINY, MEDIUM, COMPACT, LARGE dan HUGE akan kita gunakan pada kesempatan lain. CODE Tanda directive ini digunakan untuk memberitahukan kepada assembler bahwa kita akan mulai menggunakan Code Segment-nya disini. Code segment ini digunakan untuk menyimpan program yang nantinya akan dijalankan. 6
11 Bab I Mikroprosesor, Memori dan Register Pada program COM perintah ini akan selalu digunakan. Perintah ini digunakan untuk memberitahukan assembler supaya program pada saat dijalankan(diload ke memory) ditaruh mulai pada offset ke 100h(256) byte. Dapat dikatakan juga bahwa kita menyediakan 100h byte kosong pada saat program dijalankan. 100h byte kosong ini nantinya akan ditempati oleh PSP(Program Segment Prefix) dari program tersebut. PSP ini digunakan oleh DOS untuk mengontrol jalannya program tersebut. JMP Perintah JMP(JUMP) ini digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah JUMP. Adapun syntaxnya adalah: JUMP Tujuan Dimana tujuannya dapat berupa label seperti yang digunakan pada bagan diatas. Mengenai perintah JUMP ini akan kita bahas lebih lanjut nantinya. Perintah JUMP yang digunakan pada bagan diatas dimaksudkan agar melewati tempat data program, karena jika tidak ada perintah JUMP ini maka data program akan ikut dieksekusi sehingga kemungkinan besar akan menyebabkan program anda menjadi Hang. INT 20h Perintah INT adalah suatu perintah untuk menghasilkan suatu interupsi dengan syntax: INT NoInt Interupsi 20h berfungsi untuk mengakhiri program dan menyerahkan kendali sepenuhnya kepada Dos. Pada program COM cara ini bukanlah satu-satunya tetapi cara inilah yang paling efektif untuk digunakan. Bila anda lupa untuk mengakhiri sebuah program maka program anda tidak akan tahu kapan harus selesai, hal ini akan menyebabkan komputer menjadi hang Perbedaan Program COM dan EXE Program dengan ektensi COM dan EXE mempunya berbagai perbedaan yang menyolok, antara lain : PROGRAM COM : - Lebih pendek dari file EXE - Lebih cepat dibanding file EXE - Hanya dapat menggunakan 1 segmen - Ukuran file maksimum 64 KB (ukuran satu segment) - Sulit untuk mengakses data atau procedure yang terletak pada segment yang lain h byte pertama merupakan PSP(Program Segment Prefix) dari program tersebut. - Bisa dibuat dengan DEBUG PROGRAM EXE : - Lebih panjang dari file COM 7
12 Bab I Mikroprosesor, Memori dan Register - Lebih lambat dibanding file COM - Bisa menggunakan lebih dari 1 segmen - Ukuran file tak terbatas sesuai dengan ukuran memory. - Mudah mengakses data atau procedure pada segment yang lain. - Tidak bisa dibuat dengan DEBUG Membuat program dengan Turbo Assembler dan Turbo Linker Untuk membuat program COM dan EXE dengan Turbo Assembler dan Turbo Linker, prosedurnya adalah sebagai berikut: 1. Tuliskan program sumber Assembler dengan menggunakan salah satu dari berbagai program text editor, misalnya: - Notepad (dijalankan melalui Start Menu Window atau dengan meng-click file program, sumber pada Windows Explorer) Catatan: Karena Notepad menyimpan teks dengan ekstensi default.txt, maka untuk menyimpan dengan ekstensi.asm, kita tuliskan nama filenya dengan diapit tanda petik. Menyimpan dengan nama baru, nama file diapit tanda petik 8
13 Bab I Mikroprosesor, Memori dan Register - EDIT.COM (dijalankan melalui DOS Prompt dengan mengetikkan EDIT <ENTER> File program sumber harus berekstensi.asm 2. Compile file program sumber menggunakan TASM dengan cara mengetikkan di DOS Prompt sebagai berikut: TASM [nama_file_program_sumber] Contoh, jika program sumber kita buat adalah LATIHAN.ASM maka ketikkan di DOS Prompt: TASM LATIHAN 3. Lakukan linking file program sumber dengan cara mengetikkan di DOS Prompt sebagai berikut: - Untuk program COM: TLINK/T [nama_file_program_sumber] - Untuk program EXE: TLINK [nama_file_program_sumber] Contoh, jika program sumber LATIHAN.ASM di atas adalah program sumber COM, maka ketikkan: TLINK/T LATIHAN Jika proses compiling dan linking berhasil (tidak ada pesan ERROR) maka akan dihasilkan program COM atau EXE yang langsung dapat dijalankan di DOS Prompt Instruksi MOV Instruksi MOV merupakan instruksi yang sering dipakai pada program assembler. Instruksi ini digunakan untuk mengcopy nilai atau angka menuju ke suatu register, variabel atau memory. Adapun syntax untuk instruksi MOV ini adalah: Contoh: MOV Tujuan,Asal MOV AL,9 ; masukkan nilai 9 pada AL MOV AH,AL ; nilai AL=9 dan AH=9 9
14 Bab I Mikroprosesor, Memori dan Register Pada baris pertama (MOV AL,9), kita memberikan nilai 9 pada register AL. Kemudian pada baris kedua (MOV AH,AL) kita mengcopykan nilai register AL untuk AH. Jadi, setelah operasi ini, register AL akan tetap bernilai 9, dan register AH akan sama nilainya dengan AL atau 9. Yang perlu dicatat di sini bahwa semua instruksi pengcopyan data, arahnya dari kanan ke kiri atau dari operand2 ke operand1: MOV operand1,operand2 Begitu juga dengan instruksi pengcopyan data lainnya, seperti: LEA operand1,operand Instruksi INT Kita juga akan sering menggunakan instruksi ini. Syntax-nya adalah: INT NoInt Tiap-tiap nomor interrupt akan menghasilkan perintah yang berbeda. Sebagai contoh, INT 20h merupakan instruksi untuk menghentikan proses eksekusi program assembler dan kembali ke DOS. INT 21h merupakan interrupt dari DOS, di mana perintah ini masih tergantung dari nilai register AH yang kita berikan. Misalkan INT 21h service 09h adalah perintah untuk mencetak string ke layar. 1.4 MEMULAI PROGRAM ASSEMBLER Contoh 4.1 Ketikkan contoh program berikut dengan notepad dan simpan dengan nama MOD41.ASM ORG 100H TData: JMP Proses TEKS DB Hello, mari belajar bahasa Assembler$ Proses: LEA DX,TEKS MOV AH,9H INT 21H INT 20H END TData Perhatikan bahwa karakter $ (dollar) pada teks Hello, mari belajar bahasa Assembler$ harus 10
15 Bab I Mikroprosesor, Memori dan Register dituliskan. Instruksi: - Buatlah program COM dengan TASM dan TLINK/T, lalu jalankan! - Ketikkan program di atas pada EMU8086 dan emulasikan! 11
16 B A B I I 2 MODE AKSES MEMORI, PENGGUNAAN VARIABEL DAN STACK Pengaksesan memori yang dibicarakan dalam bab ini meliputi memori internal prosesor yang biasa disebut sebagai register dan memori di luar prosesor. Pada bagian pertama akan dibicarakan beberapa mode pengaksesan atau pengalamat kemudian dilanjutkan dengan penggunaan variabel dalam Bahasa Assembler serta bagian akhir penjelasan tentang Stack. 2.1 MODE PENGALAMATAN ATAU PENGAKSESAN Seperti diketahui bahwa instruksi-instruksi Assembly ada yang membutuhkan operan baik satu maupun dua. Operan-operan ini dibutuhkan oleh instruksi yang bersangkutan, misalnya MOV AX,BX, pada instruksi terlihat dibutuhkannya dua operan yaitu register AX dan BX. Prosesor saat menjalankan suatu instruksi bisa memperoleh operan dari register, dalam instruksi itu sendiri, suatu lokasi memori atau port I/O (keluaran/ masukan). Secara garis besar terdapat 7 (tujuh) macam mode pengalamatan, yaitu: 1. Pengalamatan register (register addressing); 2. Pengalamatan segera (immediate addressing); 3. Pengalamat langsung (direct addressing); 4. Pengalamatan tak-langsung register (register indirect addressing); 5. Pengalamatan relatif dasar (base relative addressing); 6. Pengalamatan langsung terindeks (direct indexed addressing); dan 7. Pengalamatan dasar terindeks (base indexed addressing). 8. Masing-masing mode tersebut masing-masing memiliki ciri khas tersendiri, perhatikan tabel 3.1. Untuk dua mode pengalamatan yang pertama, register dan segera, tidak membutuhkan segmen karena operannya berupa register atau data langsung. Lima mode terakhir (mode 3 hingga 7) merupakan mode pengalamatan memori. Mode pengalamatan Format operan Register segmen Register Register Tidak ada Segera Data Tidak ada Langsung Pergeseran DS Label DS Tak-langsung register [BX] DS [BP] SS [DI] DS [SI] DS Relatif dasar [BX] + pergeseran DS [BP] + pergeseran SS Langsung terindeks [DI] + pergeseran DS [SI] + pergeseran DS Dasar terindeks [BX][SI] + pergeseran DS 12
17 Bab II Mode Akses Memori, Penggunaan Variabel Dan Stack [BX][DI] + pergeseran [BP][SI] + pergeseran [BP][DI] + pergeseran DS SS SS Mode Pengalamatan Register dan Segera Pada mode pengalamatan register, prosesor akan mengambil operan dari suatu register, misalnya instruksi: MOV AX,CX digunakan untuk menyalin isi register AX (16-bit atau word) ke register CX (16-bit juga), dengan kata lain menyamakan register AX dan CX. Sedangkan pada mode pengalamatan segera, prosesorakan mengambil operan langsung dari instruksi yang bersangkutan, yaitu berupa data atau konstanta byte maupun word, misalnya instruksi: ADD AX,0034h digunakan untuk menambahkan isi register AX dengan data 34h dan hasilnya disimpan di AX kembali Mode Pengalamatan Langsung Dalam mode pengalamatan memori dikenal adanya istilah alamat efektif atau effective address. Alamat efektif ini merupakan jarak dalam byte dari awal segmen hingga lokasi memori atau operan yang bersangkutan. Alamat efektif ini juga disebut sebagai offset bersama dengan segmen membentuk alamat fisik dengan persamaan: Alamat fisik = offset + (segmen x 16) segmen yang dikalikan 16 artinya digeser ke kiri 4-bit, dengan demikian jika dituliskan suatu alamat logik CS:IP = 2340:0100, maka alamat fisiknya adalah: segmen digeser ke kiri 4 bit atau l digit heksa offset Dengan mode pengalamatan langsung, offset atau alamat efektif ada di dalam instruksi yang bersangkutan (menjadi satu dengan instruksi tersebut, sama seperti mode pengalamatan segera). Operan pengalamatan langsung biasanya berupa label, misalnya: MOV AX,TABEL Instruksi ini digunakan untuk menyalin isi lokasi memori yang ditunjuk oleh label TABEL (sebelumnya harus didefinisikan dulu) ke register AX. Perhatikan contoh program berikut ini: ; program contoh mode pengalamatan langsung ; ORG looh JMP START ; mulai dari START TABEL DW 2345h ; definisikan TABEL start: MOV DX,TABEL INT 20H Ketik dan jalankan menggunakan emulator program ini. Perhatikan saat dijalankan per instruksi, TABEL diberikan lokasi 0102h, sebagaimana ditunjukkan pada gambar 3.1, isi memori 13
18 Bab II Mode Akses Memori, Penggunaan Variabel Dan Stack pada lokasi 0102h=45 dan 0103h=23, dalam hal ini cara penyimpanannya menggunakan metode Litle Endian, artinya yang bobot digitnya kecil ditaruh belakangan (di lokasi berikutnya). Setelah selesai Anda jalankan, perhatikan bahwa sekarang register DX berisi data2345h Mode Pengalamatan Tak-langsung Register Pada mode pengalamatan tak-langsung register ini, alamat offset operan disimpan dalam register dasar BX, register penunjuk dasar BP atau register indeks SI atau DI. Perhatikan contoh program berikut ini: ; program contoh mode pengalamatan tak-langsung register ORG looh start: MOV BX,010AH ; BX diisi dulu MOV DX,[BX] ; mode tak-langsung register INT 20H Perhatikan untuk contoh ini kita isi dulu register BX dengan nilai 010Ah, kita tidak tahu pada lokasi 01 OAh tersebut berisi data atau nilai berapa kecuali setelah kita jalankan emulatornya. Hasil eksekusi program ini berupa isi DX yang berubah menjadi isi memori lokasi 010Ah yaitu 168B Mode Pengalamatan Relatif Dasar Pada mode pengalamatan ini, alamat efektif dihitung dengan cara menjumlahkan nilai pergerseran dengan isi register dasar BX atau BP. Perhatikan contoh program berikut ini: ; program contoh mode pengalamatan relatif dasar ORG looh start: MOV BX,010AH ; BX diisi dulu MOV DX,[BX]+2 ; mode relatif dasar INT 20H Seperti pada contoh sebelumnya, register BX diisi dengan nilai 010Ah terlebih dahulu, kemudian lokasi memori yang ditunjuk oleh [BX]+2 yaiti 010Ah+2 atau 010Ch disalin ke register DX. Selain cara penulisan seperti pada contoh program tersebut, Anda bisa juga menuliskan dengan cara: MOV DX,2[BX] ; seperti ini, atau MOV DX, [BX+2] ; seperti ini Mode Pengalamatan Langsung Terindeks Dengan mode pengalamatan langsung terindeks, alamat efektif merupakan jumlah dari pergeseran dengan register indeks SI atau DI. Perhatikan contoh program berikut ini: ; program contoh mode pengalamatan langsung terindeks ORG looh JMP START TABEL DB 45H,23H,12H ; pertama indeks-nya 0 START: MOV DI,2 ; disalin indeks ke-2 MOV AL,TABEL[DI] ; ke register AL INT 20H Seperti pada contoh program yang pertama, kita definisikan dulu sebuah data TABEL, yaitu 45h, 23h dan 12h. Data pertama berindeks 0 dan akan disalin data yang ketiga atau 14
19 Bab II Mode Akses Memori, Penggunaan Variabel Dan Stack berindeks 2 ke register AL (melalui register DI yang diisi 2). Melalui emulator terlihat bahwa TABEL diberikan lokasi 0102h hingga 0104h, sebagaimana ditunjukkan pada gambar 3.3. Hasil eksekusi program ini berupa isi register AL yang berubah menjadi 12h (silahkan dicek pada emulator) Mode Pengalamatan Dasar Terindeks Dalam mode pengalamatan ini (dasar terindeks), alamat efektif merupakan jumlahan register dasar, register indeks dan (opsional) pergeseran. Mode pengalamatan ini sangat cocok untuk akses data larik dua dimensi. Perhatikan contoh program berikut: ORG looh OMP START TABEL DB 45H,23H,12H,56H,89H ; pertama indeks-nya 0 START: MOV DI, 2 ; disalin indeks ke-2 MOV BX,l ; salin indeks ke-1 MOV AL,TABEL[DI+BX+1] ; ke register AL INT 20H Mirip dengan program sebelumnya, sekarang TABEL kita perpanjang hingga 5 data (dari indeks 0 sampai 4). Register indeks yang digunakan adalah DI (dengan diisi 2), reister dasar yang digunakan adalah BX (dengan diisi 1) kemudian pergeseran diisi dengan 1, sehingga total indeks yang digunakan adalah = 4 atau data ke-5. Setelah program dijalankan, perhatikan bahwa register AL akan berisi 89H (perhatikan pada emulator) Variabel Dan Penggunaannya Sebagaimana dikenal dalam bahasa pemrograman lainnya (Pascal, BASIC, C, C++ dan lain-lain), variabel adalah nama dari suatu lokasi memori. Dari kacamata pemrogram, akan lebih mudah untuk menyimpan suatu nilai dalam sebuah variabel dengan nama, misalnya, dataoi daripada meyimpan dengan alamat langsung memori, misalnya, 5A88:1239, apalagi jika data yang akan disimpan dalam jumlah yang cukup banyak. Emu8086 mendukung dua jenis variabel, yaitu BYTE, dengan lebar data 8-bit dan WORD, dengan lebar data 16-bit. Sintaks atau cara penulisan deklarasi variabel dalam Emu8086 sebagai berikut: nama DB nilai nama DW nilai DB - kepanjangan dari Def ine Byte, dan DW - kepanjangan dari Define Word nama - dapat sembarang kombinasi huruf atau angka, diawali dengan huruf. Dimungkinkan juga mendeklarasikan variabel yang tidak bernama (variabel jenis ini memiliki alamat tapi tidak memiliki nama). nilai - dapat sembarang nilai numerik dalam berbagai macam format yang didukung (desimal, biner dan heksadesimal) atau gunakan simbol? untuk variabel-variabel yang belum akan diisi (tidak diinisialisasi). 2.2 LARIK DAN PENGGUNAANNYA Larik atau araydapat dilihat sebagai serangkaian variabel-variabel. String teks merupakan contoh larik byte, masing-masing karakter dinyatakan dalam kode ASCII (dalam 15
20 Bab II Mode Akses Memori, Penggunaan Variabel Dan Stack ukuran byte dari 0 hingga 255). Berikut ini contoh definisi larik: a DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h b DB Hello', 0 b merupakan salinan persis dari a, saat kompiler menemui suatu string di antara tanda petik tunggal, maka secara otomatis akan dikonversikan ke kode ASCII. Pada gambar 3.5 ditunjukkan bagian memori yang menyimpan larik yang telah dideklarasikan sebelumnya. misalnya: Anda bisa mengakses sembarang nilai elemen dalam larik menggunakan kurung siku, MOV AL,a[3] Selain dengan cara menuliskan langsung indeksnya, seperti contoh sebelumnya, Anda bisa juga menggunakan register indeks BX, SI, DI atau BP, misalnya: MOV SI,3 MOV AL,a[SI] Perhatikan contoh program berikut ini: ORG looh MOV AH,A[3] MOV SI,4 MOV AL,B[SI] RET A DB 48H, 65H, 6CH, 6CH, 6FH, OOH B DB 'Hellb',0 Jika Anda ingin mendeklarasikan suatu larik yang besar, Anda bisa menggunakan operator DUP. Caranya: angka DUP(nilai) angka diisi dengan jumlah duplikasi yang ingn dibuat (sembarang angka), sedangkan nilai diisi dengan ekspresi yang akan diduplikasi, misalnya: c DB 5 DUP(9) artinya, menduplikasi angka 9 sebanyak 5 kali, sama dengan jika dituliskan: c DB 9,9,9,9,9 Contoh lain: d DB 5 DUP(l,2) sama dengan jika dituliskan: d DB l,2,l,2,l,2,l,2,l,2 Tentu saja Anda bisa menggunakan DW selain DB, tetapi DW tidak bisa digunakan untuk mendeklarasikan string! Ekspansi dengan operan DUP tidak boleh lebih dari 1020 karakter! Ekspansi yang terakhir hanya 12 karakter, dihitung setelah DB. Jika Anda ingin mendeklarasikan suatu larik yang besar, buatlah deklarasinya menjadi 2 baris, toh pada akhirnya Anda akan mendapatkan sebuah larik besar sesuai keinginan. 2.3 MEMPEROLEH ALAMAT SUATU VARIABEL Ada sebuah instruksi, yaitu LEA (Load Effective Address) dan operan alternatif OFFSET, yang dapat digunakan untuk memperoleh alamat offset dari suatu variabel. 16
21 Bab II Mode Akses Memori, Penggunaan Variabel Dan Stack Instruksi LEA lebih ampuh, karena membolehkan Anda mendapatkan alamat sari suatu variabel terindeks (seperti larik). Memperoleh alamat dari suatu variabel akan sangat bermanfaat dalam beberapa situasi atau kasus, misalnya, saat Anda ingin mengambil suatu parameter ke suatu prosedur. digunakan: Untuk memberitahukan kompiler tipe data yang digunakan, maka prefiks berikut harus BYTE PTR WORD PTR Misalnya: BYTE PTR [BX] WORD PTR [BX] Perhatikan contoh program berikut: ORG looh MOV AL, VARl LEA BX, VARl MOV BYTE PTR [BX],44H ; akses byte, atau ; akses word ; nilai VARl disalin ke AL ; ambil alamat VARl simpan di BX ; ganti isi dari VARl ; periksa nilai VARl (ke AL) MOV AL, VARl RET VARl DB 22H END Juga perhatikan pada contoh yang lainnya (tetapi fungsinya sama): ORG l00h MOV AL, VAR1 ; nilai VARl disalin ke AL MOV BX, OFFSET VARl ; ambil alamat VARl simpan di BX MOV BYTE PTR [BX], 44H ; ganti isi dari VARl MOV AL, VAR1 ; periksa nilai VARl (ke AL RET VARl DB 22H END Sekilas kedua program tersebut sama persis, tetapi ada perbedaan dalam cara mendapatkan offset dari variabel VAR KONSTANTA Konstanta sama seperti variabel, tetapi konstanta hanya akan eksis (ada) hingga program Anda dikompilasi. Setelah suatu konstanta didefinisikan, maka nilainya tidak bisa diubah. Cara pendefinisian konstanta sebagai berikut: nama EQU <ekspresi> Misalnya: k EQU 5 MOV AX,k Akan identik dengan instruksi: MOV AX,5 2.5 STACK Stack adalah bagian memori yang digunakan untuk menyimpan data-data sementara. Lantas apa bedanya dengan bagian memori data lainnya? Sifatnya, maksudnya? Sifat 17
22 Bab II Mode Akses Memori, Penggunaan Variabel Dan Stack penyimpanannya adalah dengan teknik LIFO (Last In First Out) atau FILO (First In Last Ouf), artinya, data-data yang dimasukkan pertama kali pengambilannya belakangan atau data yang terakhir kali tersimpan dapat diambil paling awal, sama seperti menyimpan bola tenis pada tabungnya, bola yang dimasukkan belakangan tidak bisa Anda ambil (kecuali ujung satunya juga dibuka) kecuali harus mengambil bola-bola sebelumnya. Lantas siapa atau instruksi apa yang melakukan cara penyimpanan seperti ini? Stack digunakan oleh instruksi CALL, untuk menyimpan alamat instruksi berikutnya yang akan dikerjakan saat memanggil suatu prosedur dan instruksi RET, saat mengembalikan kembali instruksi yang telah disimpan sebelumnya dan prosesor kembali mengerjakan instruksi berikutnya setelah yang ditinggalkan sebelumnya (karena adanya pemanggilan prosedur). Hal ini juga terjadi saat suatu interupsi (dengan instruksi INT) dijalankan, yang akan menyimpan registerflag, segmen kode dan offset ke dalam stack. Untuk kembali dari menjalankan interupsi digunakan instruksi IRET (mirip dengan RET). Selain dengan cara-cara tersebut, sekaligus dapat disimpulkan bahwa stack bisa menyimpan data-data alamat instruksi, dapat digunakan dua instruksi lain yang secara eksplisit (cara sebelumnya merupakan cara yang implisit atau tidak terang-terangan) menyimpan data ke dalam stack, yaitu: PUSH - menyimpan nilai 16-bit ke dalam stack POP - mengambil data 16-bit dari stack PUSH REG PUSH SREG PUSH memori PUSH langsung REG: AX, BX, CX, DX, DI, SI, BP, SP. SREG: DS, ES, SS, CS memori: [BX], [BX+SI+7], variabel 16-bit dan lain-lain langsung: data langsung, misalnya, 5, -24,3FH dan lain-lain Sedangkan untuk penggunaan instruksi POP: POP REG POP SREG POP memori REG: AX, BX, CX, DX, DI, SI, BP, SP. SREG: DS, ES, SS memori: [BX], [BX+SI+7], variabel 16-bit dan lain-lain Catatan: - Instruksi PUSH dan POP hanya bekerja untuk nilai 16-bit saja! - PUSH langsung hanya bekerja untuk prosesor ke atas, untuk saat ini tentunya Anda tidak perlu khawatir karena prosesornya sudah canggih. Sangat penting sekali untuk menyamakan jumlah instruksi PUSH dan POP, jika tidak, maka sfac/cakan terkorupsi dan akan menjadi tidak mungkin kembali ke sistem operasi yang bersangkutan. Karena, sebagaimana diketahui, instruksi RET kita gunakan untuk kembali ke sistem operasi, dengan demikian saat program mulai dijalankan sudah terdapat alamat untuk kembali yang tersimpan di stack (biasanya 0000H). 18
23 Bab II Mode Akses Memori, Penggunaan Variabel Dan Stack Instruksi PUSH dan POP sangat bermanfaat karena kita tidak banyak memiliki registerregister untuk operasional program, caranya: - Simpan nilai asli register yang bersangkutan ke dalam stack (dengan PUSH) - Gunakan register yang bersangkutan untuk operasional selanjutnya; - Kembalikan lagi nilai asli register tersebut dari stack (dengan POP). ORG looh MOV AX, 1234h PUSH AX ; simpan nilai AX asli ke stack MOV AX, 5678h ; ubah isi dari AX POP AX ; kembalikan nilai AX dari stack RET END Instruksi PUSH melakukan hal sebagai berikut: - Kurangkan 2 dari register SP (turunkan nilai SP); - Tulis nilai yang diberikan PUSH ke alamat SS:SP. Sedangkan instruksi POP melakukan hal sebagai berikut: - Tulis nilai dari stack pada alamat SS:SP ke tujuan yang diberikan POP; - Tambahkan nilai 2 ke register SP (naikkan nilai SP). Manfaat lain dari stack adalah untuk menukar nilai, perhatikan contoh berikut: MOV AX, 1212h ; simpan 1212h ke AX MOV BX, 3434h ; simpan 3434h ke BX PUSH AX ; simpan nilai AX ke stack PUSH BX ; simpan nilai BX ke stack POP AX ; set AX nilai BX POP BX ; set BX nilai AX Penukaran data bisa dilakukan melalui stack, karena, sebagaimana telah dijelaskan sebelumnya, metode penyimpanan data dalam stack adalah LIFO atau FILO, dengan demikian yang tersimpan pertama adalah 1212H berikutnya 3434H, dengan adanya perintah POP, data teratas, yaitu 3434H akan terambil dan disalin ke BX. Bagian memori stack diatur oleh register SS atau Stack Segmen? dan SP atau Stack Pointer. Biasanya sistem operasi akan mengatur nilai-nilai dari register-register ini saat program dijalankan. 19
24 B A B III 3 INSTRUKSI 80X86 Pada bab ini akan dijelaskan secara ringkas (disertai dengan beberapa contoh program) instruksi-instruksi 80x86. Instruksi-instruksi 80x86 dapat dikelompokkan menjadi 7 (tujuh) kelompok instruksi, yaitu: 1. Instruksi Transfer Data, instruksi-instruksi yang digunakan untuk menyalin (memindahkan) data atau informasi antar register dan lokasi memori atau I/O (keluaran/masukan). 2. Instruksi Aritmetika, instruksi-instruksi yang digunakan untuk melakukan penjumlahan, pengurangan, perkalian dan pembagian pada bilangan-bilangan biner maupun BCD. 3. Instruksi Manipulasi Bit, instruksi-instruksi yang digunakan untuk melakukan penggeseran, pemutaran dan operasi logika pada lokasi memori dan register. 4. Instruksi Kontrol Aliran Program, dapat mengubah aliran program, termasuk instruksi lompat dan pindah dari dan ke prosedur. 5. Instruksi String, instruksi-instruksi yang terkait dengan string (sederetan karakter). 6. Instruksi Interupsi digunakan untuk menginterupsi prosesor dan mengerjakan layanan yang dibutuhkan. 7. Instruksi Kontrol Prosesor digunakan untuk mengatur flag-flag status dan mengubah kondisi eksekusi prosesor. 3.1 INSTRUKSI TRANSFER DATA Instruksi transfer data akan menyalin atau memindahkan data dan alamat antar register maupun lokasi-lokasi memori atau I/O. Pada tabel 4.1 ditunjukkan ringkasan kelompok instruksi yang digunakan untuk transfer data yang terbagi menjadi 4 kelompok: serbaguna, keluaran/masukan, pembacaan alamat dan transfer flag. MOV Merupakan instruksi yang paling banyak digunakan, MOV dapat mentrasfer data dalam satuan byte maupun word antara register dan lokasi memori atau antar register. Selain itu dapat digunakan untuk menyalin suatu nilai langsung ke suatu lokasi memori atau register. Ada beberapa hal yang tidak dapat dilakukan dengan instruksi MOV, yaitu: - Tidak dapat memindahkan data antar dua lokasi memori secara langsung, gunakan perantaraan register, misalnya (diandalkan SINI dan SANA merupakan dua lokasi memori yang berbeda): MOV AX,SINI MOV SANA,AX - Tidak dapat langsung mengisi register segmen dengan suatu nilai, harus melalui register lainnya (yang bukan register segmen juga), misalnya: MOV AX,DATA_SEG MOV DS,AX - Tidak bisa menyalin isi suatu register segmen ke register segmen lainnya secara langsung, harus melalui suatu register lainnya, misalnya: 20
25 Bab III Instruksi 80X86 MOV AX,ES MOV DS,AX - Tidak bisa menggunakan register CS sebagai tujuan dalam instruksi MOV. Ingat bahwa register CS berisi kode segmen dan harus dipertahankan nilainya selama eksekusi program. PUSH dan POP Sebagaimana telah dijelaskan pada sebelumnya tentang Stack berkaitan dengan instruksi PUSH dan POP. Ditegaskan kembali bahwa instruksi CALL secara implisit akan menyimpan alamat (offset) ke stacksedangkan instruksi RET akan mengambil kembali alamat tersebut dari stack (untuk ditempatkan lagi ke register IP). Sedangkan instruksi PUSH secara eksplisit akan menyimpan data 16-bit ke puncak dari stack, sedangkan instruksi POP akan membaca data 16-bit dari puncak stack. Penjelasan lebih lengkap bisa Anda buka kembali bab sebelumnya. PUSHA dan POPA Hampir sama dengan PUSH dan POP, hanya saja instruksi PUSHA akan menyimpan beberapa register sekaligus ke dalam stack dengan urutan: AX, CX, DX, BX, SP, BP, SI dan DI. Sedangkan instruksi POPA akan mengembalikan kembali nilai-nilai register tersebut (dengan urutan pembacaan dibalik). Untuk lebih jelasnya perhatikan potongan program berikut: MOV AX,1 MOV BX,2 MOV CX,3 MOV DX,4 PUSHA XCHG ; simpan 1 ke AX ; simpan 2 ke BX ; simpan 3 ke CX ; simpan 4 ke DX ; simpan AX,CX,DX,BX,SP,BP,SI dan DI ke stack Instruksi XCHG atau exchange digunakan untuk menukar isi antara sumber dan tujuan baik dalam satuan byte atau word. Anda bisa menukar isi dua register yang berbeda (kecuali register segmen) atau antara register dengan lokasi memori, perhatikan potongan contoh program berikut: MOV AX,1234H MOV BX,5678H XCHG AX,BX XCHG AH,BL XLATB ; simpan 1234H ke AX ; simpan 5678H ke BX ; menukar isi register AX dan BX ; menukar isi register AH dan BL Instruksi KLATB atau translate digunakan untuk melihat suatu nilai pada suatu tabel byte dan menyimpannya ke register AL, panjang tabel bisa mencapai 256 byte. Sebelum memberikan instruksi XLATB, Anda harus menyimpan alamat awal tabel ke dalam BX dan indeksnya ke dalam AX. Perhatikan potongan contoh program berikut: MOV AL,8 MOV BX,OFFSET TABELKU XLATB ; siapkan indeksnya di AL ; siapkan offsetnya di BX ; baca tabel sesuai indeks dan simpan hasilnya di A TABELKU DB 'Belajar Assembly',0 END Perhatikan contoh program ini, sesuai dengan ketentuan, diinginkan membaca indeks 21
26 Bab III Instruksi 80X86 ke-8 (diawali dari indeks 0) dari TABELKU (yaitu karakter 'A'), indeks ini disimpan ke dalam AL, sedangkan awal atau offset dari TABELKU disimpan ke dalam BX, setelah dijalankan instruksi XLATB, maka AL akan berisi 41H (kode ASCII untuk 'A'). Perhatikan hasil-hasil tersebut melalui emulator Emu8086. IN dan OUT Instruksi IN digunakan untuk membaca masukan dari periferal atau masukan kemudian disimpan dalam AL (untuk hasil pembacaan tipe byte) atau AX (untuk hasil pembacaan tipe word). Operan yang kedua berupa nomor port. Jika dibutuhkan untuk mengakses port lebih dari 255, gunakan register DX. Sedangkan instruksi OUT digunakan untuk mengirimkan data atau informasi yang tersimpan dalam AL (ukuran byte) atau AX (ukuran word) ke suatu nomor port (operan pertama), gunakan register DX jika nomor port yang diakses lebih dari 255. LEA Instruksi LEA atau Load Effective Address digunakan untuk membaca alamat (offset) dari suatu lokasi memori. Biasanya saat dikompilasi, jika memungkinkan, instruksi ini akan diganti dengan MOV. Perhatikan potongan contoh program berikut: LEA AX, m RET m DW 1234h END ; baca alamat variabel m dan simpan di register AX ; deklarasi variabel m tipe WORD AX akan berisi 104H, karena instruksi LEA panjangnya 3 byte, RET panjangnya 1 byte, program diawali pada 100H, sehingga alamat variabel m adalah 104H. LDS dan LES Instruksi LDS digunakan untuk membaca word ganda yang kemudian hasilnya yang pertama disimpan di suatu register word dan yang kedua di register DS, perhatikan contoh berikut: SAHF dan L AHF Instruksi SAHF digunakan untuk menyimpan isi register AH ke dalam register flag dengan cara atau ketentuan sebagai berikut: Bit AH Flag [SF] [ZF] [0] [AF] [0] [PF] [1] [CF] Kebalikan dari instruksi SAHF adalah instruksi LAHF, untuk membaca isi flag dan disimpan ke dalam AH. Dengan demikian, jika kedua insruksi ini digunakan bersama (satu pasang) akan sangat mudah untuk menyimpan status flag kemudian mengembalikan lagi seperti semula. PUSHF dan POPF Instruksi PUSHF digunakan untuk menyimpan register flag ke dalam stack, jika Anda menggunakan LAHF, register flag disimpan ke register AH bukan stack. Demikian juga dengan 22
27 Bab III Instruksi 80X86 POPF yang akan membaca kembali register flag dari stack. Perhatikan potongan contoh program berikut dan bandingkan dengan contoh sebelumnya: PUSHF MOV AH,00Fh SAHF POPF END 3.2 INSTRUKSI ARITMETIKA ; simpan register flag ke dalam stack ; semua flag ; di set ke l ; kembalikan lagi flag seperti semula Prosesor 80x86 dapat melakukan operasi aritmetika baik pada bilangan biner bertanda maupun tidak dan dalam sistem bilangan desimal (baik BCD maupun bukan). Instruksi aritmetika terbagi menjadi empat kelompok: penjumlahan, pengurangan, perkalian, pembagian dan ekstensi tanda. ADD dan ADC Jelas sekali, instruksi ADD ini digunakan untuk melakukan penjumlahan antara tujuan dan sumber, hasilnya disimpan ke tujuan, misalnya: MOV AL,5 ; AL = 5 ADD AL,-3 ; AL = 5 + (-3) = 2 RET Saat prosesor menjumlah dua bilangan biner, akan dihasilkan sisa (carry) jika operan tujuan tidak bisa menampung hasil penjumlahan (lebih dari 216 untuk ukuran word atau 28 untuk ukuran byte). Sedangkan instruksi ADC sama seperti instruksi ADD, hanya saja sekarang yang dijumlahkan kedua operan dan status CF, misalnya: STC ; set CF = 1 MOV AL, 5 ; AL = 5 ADC AL, 1 ; AL=5+1+1 (dari CF) = 7 Kedua instruksi ini mempengaruhi enam macam flag: CF, PF, AF, ZF, SF dan, OF. AAA dan DAA Instruksi AAA (ASCII Adjust After Addition) digunakan untuk mengatur ASCII setelah penjumlahan, yang dilakukan adalah mengoreksi hasil di AH dan AL setelah dilakukannya penjumlahan dalam sistem BCD. Perhatikan contoh berikut: MOV AX,15 AAA ; AH = 00h dan AL = 0Fh ; AH = 01h dan AL = 05h Jika instruksi AAA bekerja pada byte, maka DAA juga melakukan yang hampir sama, tetapi untuk nibel. Instruksi DAA (Decimal Adjust After Addition) digunakan untuk mengoreksi penjumlahan dari dua nilai BCD, a'goritmanya: Misalnya: MOV AL, OFH DAA ; AL = OFH (atau 15 desimal) ; AL = 15H 23
28 Bab III Instruksi 80X86 INC Instruksi INC (Increment) digunakan untuk menambahkan nilai suatu operan sebesar 1 (menaikkan), misalnya: MOV AL,4 INC AL SUB dan SBB ; AL=4 ; AL=AL+1=4+1=5 Instruksi SUB (subtract) jelas digunakan untuk melakukan pengurangan dua operan, tujuan dan sumber, hasilnya disimpan di tujuan, misalnya: MOV AL,5 ; AL = 5 SUB AL,1 ; AL=AL-1=5-1=4 Instruksi SBB (subtract with borrow) juga mirip seperti SUB, hanya saja yang dikurangkan tidak hanya dua operan tapi juga dengan carry, misalnya: STC ; set CF MOV AL,5 ; AL = 5 SBB AL,3 ; AL = (dari CF)=l Kedua instruksi ini mempengaruhi enam macam flag: CF, PF, AF, ZF, SF, dan OF. AAS dan DAS Instruksi AAS atau ASCII Adjust after Subtraction digunakan untuk mengoreksi hasil pada register AH dan AL setelah dilakukan pengurangan jika bekerja dengan nilai BCD, algoritmanya: jika (nibel rendah AL > 9) atau (AF = 1), maka selain itu: AL = AL - 6 AH = AH - 1 AF = 1 CF = 1 AF = 0 CF = 0 untuk semua syarat kosongkan nibel tinggi AL Perhatikan contoh berikut: MOV AX, 02FFh ; AH = 02, AL = 0FFh AAS ; AH = 01, AL = 09 Mirip dengan AAS, instruksi DAS atau Decimal Adjust after Subtraction digunakan untuk mengoreksi hasil pengurangan dua bilangan BCD. DEC Instruksi DEC atau decrement digunakan untuk mengurangkan nilai suatu operan sebesar 1 (menurunkan), misalnya: MOV AL,4 ; AL = 4 DEC AL ; AL=AL-1=4-1=3 NEG Instruksi NEG atau negatedigunakan untuk membuat negatif suatu operan (diubah ke 24
29 Bab III Instruksi 80X86 format 2's complement), caranya semua bit di-inversi-kan kemudian dijumlah dengan 1. Misalnya: MOV AL,5 ; AL = 05H NEG AL ; AL = 0FBH (-5) NEG AL ; AL = 05H (5) CMP Instruksi CMP (compare) digunakan untuk membandingkan dua operan, dalam hal ini dilakukan operasi pengurangan antar dua operan yang digunakan (operan1-operan2). Hasil pengurangan tersebut tidak disimpan dimanapun, hanya mempengaruhi flag sesuai tabel 4.3. MOV AL,5 MOV BL,5 CMP AL,BL ; AL = 05H ; BL = 05H ; AL = 05H, ZF = l (AL dan BL sama!) MUL Instruksi MUL (unsignedmultiply) digunakan untuk melakukan perkalian bilangan takbertanda antara suatu operan dengan register AL atau AX, tergantung tipe operannya apakah byte atau word, untuk tipe byte, hasil disimpan di AX, sedangkan untuk tipe word hasilnya disimpan di DX dan AX. Algoritmanya: AX = AL * operan, atau DX AX = AX * operan Perhatikan contoh berikut: MOV AL,200 ; AL = 0C8H MOV BL,4 MUL BL ; AX = 0320H (800 <- 4 X 200) IMUL Instruksi IMUL hampir sama dengan MUL, hanya saja IMUL digunakan untuk melakukan perkalian bilangan bertanda (signed multipltf. Apa yang dilakukan sama seperti MUL, kecuali data operan diperlakukan dalam format 2's complement. Perhatikan contoh berikut: MOV AL,-2 ; AL akan berisi FEH (artinya -2) MOV BL,-4 ; BL akan berisi FCH (artinya -4) IMUL BL ; AX akan berisi 0008H (-2 x -4 = 8) MOV AL,-2 ; kembalikan lagi MUL BL ; AC akan berisi FA08H AAM Instruksi AAM atau ASCII Adjust After Multiplication digunakan untuk mengoreksi hasil perkalian dari dua nilai BCD, algoritmanya: AH=AL/10 AL=sisa Perhatikan contoh berikut: MOV AL,15 AAM ; AL=OFH ; AH=01, AL=05 DIV Instruksi DIV digunakan untuk melakukan pembagian bilangan tak-bertanda 25
30 Bab III Instruksi 80X86 (unsigneddivide). Algoritmanya: Untuk operan bertipe byte: AL=AX/operan AH=sisa (modulus) Untuk operan bertipe word: AX=(DX AX)/operan DX=sisa (modulus) Perhatikan contoh berikut: MOV AX,203 MOV BL,4 DIV BL ; AX=00CBh ; AL=32h (50), AH=03h IDIV Seperti instruksi DIV, IDIV juga melakukan pembagian dua operan, tetapi operannya merupakan bilangan bertanda (signed divide), artinya dianggap format 2's complement. Perhatikan contoh berikut: MOV AX,-203 ; AX berisi FF35H (2's comp) MOV BL,4 IDIV BL ; AL=CEK (-50),AH=FDH (-3) AAD Instruksi AAD atau ASCII Adjust before Division digunakan untuk menyiapkan dua nilai BCD sebelum dilakukan pembagian. Algoritmanya: AL=(AH*10)+AL AH=0 Perhatikan contoh berikut: MOV AX,0105H ; AH=01, AL=05 AAD ; AH=00, AL=0Fh (15) CBW dan CWD Kedua instruksi ini berkaitan dengan masalah konversi bilangan, instruksi CBW (Convert Byte to Word) digunakan untuk melakukan konversi byte menjadi word pada register AL, algoritmanya: jika bit tertinggi AL = 1, maka selain itu: AH = 255 (FFh) AH = 0 Perhatikan contoh berikut: MOV AX,0 ; AH = 0 dan AL = 0 MOV AL,-5 ; AX = 00FBh (251) CBW ; AX = FFFBh (-5) Karena yang diisi angka -5 hanya AL, maka hanya AL-lah yang berisi bilangan -5 atau 251 (terjemahan heksadesimalnya), sedangkan AH masih nol. Dengan instruksi CBW sekarang lengkap AX terisi FFFBh (-5). Instruksi CWD atau Convert Word to Doubleword digunakan untuk mengkonversi word menjadi word-ganda. 26
31 Bab III Instruksi 80X INSTRUKSI MANIPULASI BIT Prosesor 80x86 dapat melakukan operasi manipulasi bit menggunakan instruksi-instruksi jenis ini yang meliputi operasi logika, penggeseran dan pemutaran bit. Pada tabel 4.4 ditunjukkan ringkasan instruksi manipulasi bit yang terbagi menjadi tiga kelompok: logika, penggeseran dan pemutaran. AND Instruksi ini digunakan untuk melakukan operasi logika AND antar bit pada dua operan, hasilnya disimpan pada operan tujuan, algoritma atau aturannya: 0 AND 0=0 0 AND 1=0 1 AND 0=0 1 AND 1=1 Perhatikan contoh berikut: MOV AL, a AND AL, B OR ; AL= b ; AL= b (= A ) Instruksi ini digunakan untuk melakukan operasi logika OR antar bit pada dua operan, hasilnya disimpan pada operan tujuan, algoritma atau aturannya: 0 OR 0=0 0 OR 1=1 1 OR 0=1 1 OR 1=1 Perhatikan contoh berikut: MOV AL, A OR AL, b XOR ; AL= b ; AL= b (= a ) Instruksi ini digunakan untuk melakukan operasi logika XOR antar bit pada dua operan, hasilnya disimpan pada operan tujuan, algoritma atau aturannya: 0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0 Perhatikan contoh berikut: MOV AL, B XOR AL, B NOT ; AL= b Instruksi ini digunakan untuk menginvers masing-masing bit pada suatu operan, hasilnya disimpan pada operan tujuan, algoritma atau aturannya: NOT 1=0 NOT 0=1 Perhatikan contoh berikut: MOV AL, b NOT AL ; AL= b 27
32 Bab III Instruksi 80X86 TEST Instruksi TEST digunakan untuk melakukan operasi logika AND masing-masing bit pada dua operan untuk mempengaruhi flag saja, hasilnya tidak disimpan dimana-mana. Flag yang terpengaruh adalah ZF, SF dan PF. Perhatikan contoh berikut: MOV AL, b TEST AL,1 TEST AL,10B SAL dan SHL ; ZF=0 (hasil AND= b) ; ZF=l (hasil AND= b) Instruksi SAL atau Shift Arithmetic Le/if dan SHL atau Shift Left, digunakan untuk menggeser bit-bit suatu operan ke kiri. Jumlah penggeseran ditentukan dengan operan kedua. Algoritmanya: Geser semua bit ke kiri, bit paling kiri digeser ke CF Bit nol disisipkan dari posisi paling kanan. Perhatikan contoh berikut ini: MOV AL,0E0h ; AL= B SAL AL,l ; AL= B, CF=l SHL AL,l ; AL= B, CF=l SAR dan SHR Instruksi SAR atau Shift Arithmetic Right dan SHR atau Shift Right, digunakan untuk menggeser bit-bit suatu operan ke kanan. Jumlah penggeseran ditentukan dengan operan kedua. Algoritme SAR: Geser semua bit ke kanan, bit terkanan digeser ke CF Tertahankan nilai bit paling kiri = nilai bit sebelumnya Algoritma SHR: Geser semua bit ke kanan, bit paling kanan digeser ke CF Bit nol disisipkan dari posisi paling kiri. Perhatikan contoh berikut: MOV AL, b SAR AL,1 ;AL= B, CF=1 SHR AL,1 ;AL= B, CF=1 Perhatikan perbedaan hasil dari kedua instruksi SAR dan SHR, setelah dilakukan SAR, bit paling kiri dari AL tetap bernilai 1, artinya bit tanda dipertahankan, sedangkan setelah instruksi SHR, bit paling kiri dari AL tidak dipertahankan lagi dan diisi nol! ROL dan RCL Kedua instruksi ini digunakan untuk menggeser dan memutar bit pada suatu operan, perbedaannya: instruksi ROL tidak menggunakan perantara CF sedangkan RCL menggunakan perantara CF. Perhatikan contoh berikut: MOV AL,1CH ROL AL,1 STC MOV AL,1CH RCL AL,1 ; AL= B ; AL= B, CF=0 ; set CF (CF=1) ; AL = B ; AL = B, CF=0 28
33 Bab III Instruksi 80X86 ROR dan RCR Kedua instruksi ini sama operasionalnya dengan kedua instruksi sebelumnya, ROL dan RCL, hanya saja menggeser bit-nya ke kanan. 3.4 INSTRUKSI KONTROL ALIRAN PROGRAM Sebuah program dalam Bahasa Assembly dikerjakan secara sekuensial atau berurutan dari baris pertama ke baris berikutnya (dari atas ke bawah). Ada beberapa instruksi yang bisa menyebabkan aliran program tidak seperti itu, misalnya melompat ke suatu lokasi instruksi atau pemanggilan prosedur. CALL dan RET Instruksi CALL digunakan untuk memanggil suatu prosedur, alamat untuk kembali lagi, yang tersimpan di register IP, disimpan ke stack. Selain dapat diikuti dengan operan nama prosedur maupun label, operan bisa juga merupakan alamat 4-byte yang ditulis dalam format, misalnya, 1234:5678H, angka yang pertama merupakan nilai segmen dan yang kedua merupakan offset, pemanggilan ini merupakan pemanggilan jauh (far), dengan demikian yang tersimpan ke stack tidak hanya IP saja tetapi juga CS, dengan kata lain pemanggilan jauh ciricirinya adalah berbeda segmen. Sedangkan instruksi RET digunakan untuk mengakhiri suatu prosedur, yaitu melakukan pengembalian alamat ke semula (membaca kembali isi stack). Perhatikan contoh program berikut: CALL pl ADD AX, l pl PROC MOV AX, 1234h RET pl ENDP END JMP ; deklarasi prosedur ; kembali dari yg memanggil Instruksi JMP merupakan instruksi lompatan tanpa syarat. Program akan segera melompat ke nama label atau alamat 4-byte yang ditulis pada operannya. Instruksi JMP ini tidak akan menyimpan alamat register IP maupun CS, karena pada dasarnya instruksi JMP ini sama seperti instruksi GOTO pada Pascal atau C++. Dengan demikian perlu dibedakan dengan CALL. Perhatikan contoh program berikut: MOV AL,5 JMP labell PRINT 'Tidak lompat!' MOV AL, 0 labell: PRINT 'Sampai disini! RET END ; lompat! 2 baris! 29
34 Bab III Instruksi 80X86 Pada program ini digunakan makro PRINT yang dapat digunakan untuk mencetak suatu string ke layar, instruksi JMP labell langsung melompati dua baris di bawah-nya, kemudian instruksi RET bukan untuk mengembalikan isi register IP tetapi untuk kembali ke sistem operasi atau mengakhiri program. Jalankan program ini dengan emulator langsung RUN (bukan SINGLE RUN) dan amati yang terjadi. JA atau JNBE Kedua instruksi ini sebenarnya identik, kedua instruksi ini diawali dengan instruksi CMP, instruksi JA (Jump if Above) digunakan untuk melakukan lompatan ke suatu label, jika hasil instruksi CMP sebelumnya operan pertama lebih besar (above) dari operan kedua (untuk bilangan tak-bertanda). Sedangkan instruksi JNBE (Jump if Not Below) akan membuat program melompat ke suatu label, jika operan pertama tidak dibawah (not below = above) operan kedua. Perhatikan contoh program berikut: MOV AL,250 ; coba ganti-ganti dengan angka lain CMP AL, 5 JA labell ; bisa diganti JNBE.. PRINT 'AL tidak lebih besar 5' JMP exit labell: PRINT 'AL lebih besar 5' exit: RET END Instruksi JA bisa diganti dengan JNBE, hasilnya sama saja. JAE atau JNB Kedua instruksi ini juga memiliki arti yang sama, diawali dengan instruksi CMP untuk membandingkan dua operan, Instruksi JAE (Jump if Above or Equal) digunakan untuk melakukan lompatan program jika operan pertama lebih besar atau sama dengan operan yang kedua atau menggunakan JNB (Jump if Not Below) jika operan pertama tidak lebih kecil daripada operan kedua (untuk bilangan tak-bertanda). Perhatikan contoh program berikut ini: MOV AL,5 ; ganti2 angkanya CMP AL,5 JAE labell ; bisa diganti JNB PRINT AL lebih kecil 5 JMP exit labell: PRINT 'AL lebih besar atau sama dengan 5' exit: RET END Instruksi JAE bisa diganti dengan JNB dengan hasil yang sama. JB, JNAE atau JC Instruksi JB (Jump ifbelow) atau JNAE (Jump ifnotabove ornot Equal) atau JC (Jump if 30
35 Bab III Instruksi 80X86 Carry flag set to 1) semuanya digunakan untuk melakukan lompatan jika hasil perbandingan yang dilakukan operan pertama lebih kecil dari operan kedua (untuk bilangan tak-bertanda), khusus untuk instruksi JC bisa dimanfaatkan untuk memeriksa hasil dari suatu operasi apakah menghasilkan carry (sisa/pinjaman) atau tidak. Untuk instruksi JB atau JNAE, perhatikan contoh program berikut: MOV AL,1 CMP AL, 5 JB labe1 ; bisa diganti dengan JNAE PRINT 'AL lebih besar atau sama dengan 5' JMP exit labell: PRINT 'AL lebih kecil 5' exit: RET END Pada program ini, instruksi JB bisa diganti dengan JNAE. Sedangkan untuk instruksi JC, perhatikan contoh berikut: MOV AL,255 ADD AL,l JC labell PRINT tidak ada carry! JMP edit label1: PRINT ada carry! exit: RET END JBE atau JNA Kedua instruksi ini, JBE (Jump if Below or Equal) dan JNA (Jump if Not Above), digunakan untuk melakukan lompatan jika instruksi CMP sebelumnya mendeteksi bahwa operan 1 lebih kecil atau sama dengan operan 2 (JBE) atau operan 1 tidak lebih besar dari operan 2 (JNA), untuk bilangan tak-bertanda. Perhatikan contoh program berikut: MOV AL,5 CMP AL,5 JBE label1 ; bisa diganti JNA PRINT AL lebih besar dari 5 JMP edit labell: PRINT *AL lebih kecil atau sama dengan 5' exit: RET END Anda bisa mengganti instruksi JBE dengan JNA dan hasil yang diperoleh tetap sama. 31
36 Bab III Instruksi 80X86 JCXZ Instruksi JCXZ (atau Jump if CX is Zero) digunakan untuk melakukan lompatan jika register CX berisi nol, perhatikan contoh berikut: MOV CX,0 JCXZ labell PRINT CX tidak nol. JMP exit labell: PRINT CX nya nol. exit: RET END Pada contoh program di atas, memang disengaja register CX diisi dengan nol, tetapi setiap kali register CX berisi nol (dengan instruksi apapun saja, misalnya hasil penjumlahan dan lain sebagainya), maka instruksi JCXZ akan menyebabkan program melompat ke label yang disebutkan. JE atau JZ Instruksi JE (Jump if Equal) atau JZ (Jump ifzero) digunakan untuk melakukan lompatan jika hasil perbandingan (dengan CMP) menghasilkan operan 1 sama dengan operan 2 (JE) atau operan 1 dikurangi operan 2 hasilnya nol (JZ). Instruksi JE dipengaruhi oleh hasil dari instruksi CMP dan berlaku untuk tipe bilangan bertanda maupun bukan, sedangkan instruksi JZ dipengaruhi oleh instruksi CMP, SUB, ADD, TEST, AND, OR dan XOR. Bisa untuk bilangan bertanda maupun tak-bertanda. Perhatikan contoh program berikut: MOV AL,5 CMP AL,5 JE labell ; bisa diganti dengan JZ PRINT AL tidak sama dengan 5. JMP exit labell: PRINT XAL sama dengan 5.' exit: RET END JG atau JNLE Instruksi JG (Jump if Greatet) dan JNLE (Jump if Not Less or Equaf) digunakan untuk melakukan lompatan jika operan pertama nilainya lebih besar (atau tidak lebih kecil atau tidak sama dengan) dibandingkan operan kedua hasil dari instiuksi CMP sebelumnya (untuk bilangan bertanda). MOV AL,5 CMP AL,-5 JG labell ; bisa diganti dengan JNLE PRINT AL tidak lebih besar dari -5. JMP exit 32
37 Bab III Instruksi 80X86 labell: PRINT 'AL lebih besar dari -5.' exit: RET END JGE atau JNL Instruksi JGE (Jump if Greater or Equa!) dan JNL (Jump if Not Less) digunakan untuk melakukan lompatan jika hasil instruksi CMP sebelumnya menghasilkan operan pertama lebih besar atau sama dengan operan kedua (JGE), atau operan pertama tidak lebih kecil dari operan kedua (JNL), untuk bilangan bertanda. Perhatikan contoh berikut: MOV AL,2 CMP AL, -5 JGE labell PRINT AL<-5 JMP exit labell: PRINT AL >= -5 exit: RET END JL atau JNGE ; bisa diganti JNL Instruksi JL (Jump ifless) atau JNGE (Jump if Not Greateror Equal) digunakan untuk melakukan lompatan jika hasil instruksi CMP menghasilkan operan 1 lebih kecil dari operan 2 (JL), atau operan 1 tidak lebih besar atau sama dengan operan 2 (JNGE), untuk bilangan bertanda. Perhatikan contoh program berikut: MOV AL,-2 CMP AL,5 JNGE labell PRINT AL >= 5. JMP exit labell: PRINT AL < 5. exit: RET END JLE atau JNG ; bisa diganti JNGE Instruksi JLE (Jump ifless or Equal) atau JNG (Jump if Not Greatet) digunakan untuk melakukan lompatan jika operan pertama lebih kecil atau sama dengan operan kedua (JLE) atau operan pertama tidak lebih besar dari operan kedua (JNG) hasil dari instruksi CMP sebelumnya untuk bilangan bertanda. Perhatikan contoh program berikut ini: 33
38 Bab III Instruksi 80X86 MOV AL,2 CMP AL,3 JNG labell PRINT AL > 3. JMP exit labell: PRINT AL <= 3 exit: RET END ;bisa diganti JLE JNC Kebalikan dari JC, instruksi JNC atau Jump if Carry, digunakan untuk melakukan lompatan jika hasil dari suatu instruksi yang dikerjakan sebelumnya (apa saja) tidak membuat status Carry=1 atau Carry tetap nol (tidak ada Carry). Perhatikan contoh program berikut: MOV AL,2 ; coba diganti dengan ADD AL,3 JNC labell PRINT ada carry. JMP exit labell: PRINT tak ada carry. exit RET END JNE atau JNZ Instruksi JNE (Jump ifnot Equal) atau JNZ (Jump if Not Zero) digunakan untuk melakukan lompatan ke suatu label jika operan pertama tidak sama dengan operan kedua (JNE), atau hasil instruksi sebelumnya menghasilkan yang bukan nol (JNZ). Instruksi JNE dipengaruhi oleh hasil dari instruksi CMP dan berlaku untuk tipe bilangan bertanda maupun bukan, sedangkan instruksi JNZ dipengaruhi oleh instruksi CMP, SUB, ADD, TEST, AND, OR dan XOR. Bisa untuk bilangan bertanda maupun tak-bertanda. Perhatikan contoh program berikut ini: MOV AL, b ; AL = 7 OR AL,0 ; bisa diganti CMP AL, 0 JNZ labell ; bisa diganti JNE labell PRINT nol. ; bisa diganti PRINT AL =0 JMP exit Label1: PRINT bukan nol. ; bisa diganti PRINT *AL <> 0' exit: RET END JNO Instruksi JNO atau Jump if Not Overflow digunakan untuk melakukan lompatan jika hasil dari suatu instruksi yang dikerjakan sebelumnya tidak menghasilkan limpahan atau overflow. 34
39 Bab III Instruksi 80X86 JNS Instruksi JNS (Jump if Not Signed (if positive)) digunakan untuk melakukan lompatan ke suatu label jika hasil dari instruksi CMP, SUB, ADD, TEST, AND, OR dan XOR menghasilkan bilangan positif (tak bertanda). JO Instruksi JO (Jump if Overflow) digunakan untuk melakukan lompatan ke suatu label jika hasil dari instruksi yang dikerjakan sebelumnya mengakibatkan terjadinya limpahan atau overflow, kebalikan dari instruksi JNO. JS Instruksi JS (Jump if Signed (if negative)) digunakan untuk melakukan lompatan ke suatu label jika hasil instruksi CMP, SUB, ADD, TEST, AND, OR dan XOR yang dikerjakan sebelumnya menghasilkan bilangan negatif (bit MSB=1). Perhatikan contoh program berikut: MOV AL,lOOOOOOOb ; AL = -128 OR AL,0 ; hanya set flag JS labell PRINT tak bertanda (positif). JMP exit labell: PRINT bertanda (negatif). exit: RET END LOOP Instruksi LOOP akan mengurangi nilai isi register CX kemudian akan melompat ke suatu label tertentu jika isi CX bukan nol, dengan kata lain, instruksi LOOP digunakan untuk melakukan pengulangan dari suatu label tertentu hingga nilai CX menjadi 0. Perhatikan contoh program berikut: MOV CX, 5 label1: PRINTN loopl LOOP label1 RET END Program ini akan melakukan pencetakan kata 'loop' sebanyak 5 (lima) kali, sesuai dengan isi CX yang pada awalnya diisi dengan 5. LOOPE atau LOOPZ Instruksi LOOPE atau LOOPZ digunakan untuk menurunkan nilai register CX dan melompat ke suatu label tertentu jika CX tidak nol dan sama (ZF=1), artinya pengulangan akan dilanjutkan hingga CX mencapai nol atau ZF=0 atau dua-duanya. Perhatikan contoh program berikut: MOV AX,0 35
40 Bab III Instruksi 80X86 MOV CX,5 label1: PUTC * ADD AX,100 CMP AH,0 LOOPZ label1 RET END Pertama register AX dan CX masing-masing diisi dengan 0 dan 5 (lima kali pengulangan). Kemudian karakter '*' ditampilkan ke layar, AX ditambah dengan 100, sehingga sekarang AX=100, dilanjutkan dengan pengujian AH apakah sama dengan 0? Instruksi LOOPZ (atau LOOPE) akan memeriksa hasil CMP, jika sama maka pengulangan dihentikan, jika tidak pengulangan diteruskan hingga nilai CX=0 atau AH=0 (tergantung mana yang lebih dulu tercapai). Catatan: Dengan melakukan operasral = AL +100, hasil tidak akan pernah bernilai 0, nilainya 0 (sekali saja), 100,200 dan 300 (isi AX = 012Ch) serta tidak pernah 400 karena proses berhenti dikarenakan CX sudah mencapai nol duluan, dengan demikian akan tercetak 5 bintang! LOOPNE atau LOOPNZ Kedua instruksi ini berkebalikan dengan LOOPE maupun LOOPZ. Instruksi LOOPNE atau LOOPNZ digunakan untuk melakukan lompatan ke suatu label tertentu jika nilai CX belum mencapai nol dan tidak sama (ZF=0), artinya pengulangan akan dilakukan hingga CX mencapai nol atau ZF=1 atau dua-duanya. Perhatikan contoh program berikut: MOV SI,0 MOV CX,5 labell: PUTC * MOV AL, v1[si] INC SI CMP AL, 7 LOOPNE labell RET vl DB 9, 8, 7, 6, 5 END ; byte berikut (SI=SI+1). Program ini akan melakukan pengulangan hingga dijumpai bilangan 7, pada posisi 3, dengan kata lain hasilnya berupa 3 bintang yang ditampilkan. 3.5 INSTRUKSI STRING Instruksi string membolehkan Anda bekerja dengan sekelompok (blok) byte atau word yang berturutan di dalam memori. Blok-blok atau string-string ini, panjangnya bisa mencapai 64K byte dan bisa mengandung nilai-nilai numerik (baik biner maupun BCD) atau alfanumerik (seperti karakter teks). Sebagaimana ditunjukkan pada tabel 4.6, instruksi string terbagi menjadi 5 (lima) macam 36
41 Bab III Instruksi 80X86 operasi dasar atau primitif, yaitu: pemindahan, pembandingan, scan atau pencarian, pembacaan dan penyimpanan CLD Instruksi CLD (Clear Direction flag (DF=0)) digunakan untuk mengatur agar DF=0, kemudian register SI dan DI akan dinaikkan oleh instruksi berantai seperti: CMPSB, CMPSW, LODSB, LODSW, MOVSB, MOVSW, STOSB dan STOSW. Instruksi berantai maksudnya satu instruksi tetapi bekerja untuk serangkaian data sekaligus berturutan. STD Instruksi STD (Set Direction flag (DF=1)) merupakan kebalikan dari CLD, digunakan untuk mengatur agar DF=1, kemudian register SI dan DI diturunkan oleh instruksi berantai seperti: CMPSB, CMPSW, LODSB, LODSW, MOVSB, MOVSW, STOSB dan STOSW. REP Melakukan pengulangan instruksi MOVSB, MOVSW, LODSB, LODSW, STOSB atau STOSW sebanyak nilai yang tersimpan di register CX. Algoritmanya: Cek_CX: Jika CX <> 0 maka Lakukan instruksi berantai CX <- CX - l Kembali ke Cek_CX Selain itu Keluar dari siklus REP Perhatikan potongan program berikut: MOV CX,500 REP MOVSB Potongan program ini akan mengerjakan instruksi MOVSB selama CX belum sama dengan nol, dengan kata lain diulang sebanyak 500 kali. REPE atau REPZ Hampir sama dengan instruksi REP, instruksi REPE (Repeat While Equat), yang memiliki instruksi alternatif REPZ (Repeat While Zero), digunakan untuk mengulang instruksi berantai selama ZF=1 (belum sama) dan CX belum mencapai nol. Perhatikan potongan program berikut: MOV CX,100 REPE CMPSB ; bisa diganti REPZ Potongan program ini akan membandingkan string di DS:[SI] dengan ES:[DI] hingga 100 kali atau hingga ditemukan elemen yang tidak sama, mana yang tercapai duluan. REPNE atau REPNZ Kebalikan dari instruksi REPE atau REPZ, instruksi REPNE (Repeat While NotEqual), yang memiliki instruksi alternatif REPNZ (Repeat While Not Zero), digunakan untuk mengulang instruksi berantai selama ZF=0 (belum tidak sama) dan CX belum mencapai nol. Perhatikan potongan program berikut: 37
42 Bab III Instruksi 80X86 MOV CX,100 REPNE CMPSB ; bisa diganti REPNZ Potongan program ini akan membandingkan string di DS:[SI] dengan ES:[DI] hingga 100 kali atau hingga ditemukan elemen yang sama, mana yang tercapai duluan. MOVSB dan MOVSW Kedua instruksi digunakan untuk menyalin string dari DS:[SI] ke ES:[DI], MOVSB untuk satuan byte dan MOVSW dalam satuan word (2 byte) kemudian isi SI dan DI diperbaharui. Algoritmanya MOVSB: ES[DI] = DS:[SI] Jika DF=0 maka SI = SI + 1 DI = DI + 1 Selain itu SI = SI - 1 DI = DI 1 Algoritmanya MOVSW: ES [DI] = DS: [SI] Jika DF=0 maka SI = SI + 2 DI = DI + 2 Selain itu SI = SI - 2 DI = DI - 2 Contoh program untuk MOVSB: LEA SI,a1 LEA DI,a2 MOV CX,5 REP MOVSB A1 DB 1,2,3,4,5 a2 DB 5 DUP(0) END Pada program ini di atas disiapkan data-data yang akan disalin di al yang jika Anda jalankan di Emu8086 akan mendapatkan alamat 01OCH, sedangkan tempat untuk penyalinan ada di 32, alamat 0111 H. Instruksi REP secara otomatis akan diganti dengan REPE (perhatikan hasilnya pada Emu8086). Instruksi MOVSB dijalankan sebanyak 5 kali (menyalin bilangan 1 sampai 5 dari al ke a2). CMPSB dan CMPSW Kedua instruksi ini digunakan untuk menbandingkan data di DS:[SI] dengan ES:[DI], CMPSB untuk satuan byte sedangkan CMPSW untuk satuan word. Algoritma untuk CMPSB: DS:[SI] - ES:[DI] Atur flag sesuai dengan hasil: OF, SF, ZF, AF, PF dan CF Jika DF=0 maka SI = SI + 1 DI = DI + 1 Selain itu: 38
43 Bab III Instruksi 80X86 SI = SI - 1 DI = DI - 1 Contoh program untuk CMPSB: ORH 100h ; atur arah maju... CLD ;siapkan sumber di DS:SI, ;siapkan target di ES:DI: MOV AX,CS MOV DS,AX MOV ES,AX LEA si,strl LEA di,str2 ; set pencacah sesuai dengan panjang string: MOV CX, 11 ; bandingkan hingga sama: REPE CMPSB JNZ not_equal ; "Ya" sama! MOV AL, 'Y' MOV AH, OEh INT loh JMP edit_here not_equal: ; Tidak - gak sama! MOV AL, T MOV AH, 0Eh INT 10h exit_here: RET ; data yang dibandingkan: strl db Test string str2 db Test string END Program ini digunakan untuk membandingkan string strl dan str2, jika ada satu karakter saja yang tidak sama (beda huruf maupun besar dan kecilnya), akan diberikan jawaban T, artinya kedua string tersebut tidak sama. Dalam hal ini digunakan instruksi REPE CMPSB, artinya pembandingan karakter akan dilakukan terus hingga ditemui perbedaan karakter atau menyebabkan 7f tetap 1 selama karakter tetap sama, sehingga instruksi JNZ not_equal tidak akan dikerjakan (tidak melompat ke not_equal). SCASB dan SCASW Kedua instruksi ini digunakan untuk membandingkan byte (SCASB) atau word (SCASW) pada AL atau AX dengan ES:[DI]. Algoritma untuk SCASB sebagai berikut: ES:[DI] - AL Atur flag sesuai dengan hasil: OF, SF, ZF, AF, PF dan CF Jika DF=0 maka DI = DI + 1 Selain itu: DI = DI - 1 Sedangkan algoritma untuk SCASW sebagai berikut: 39
44 Bab III Instruksi 80X86 ES:[DI] - AX Atur flag sesuai dengan hasil: OF, SF, dan CF Jika DF=0 maka DI = DI + 2 Selain itu: DI = DI 2 LODSB dan LODSW Kedua instruksi ini digunakan untuk menyimpan data yang ada dis DS:[SI] ke register AL (dengan instruksi LODSB) atau register AX (dengan instruksi LODSW), kemudian register SI diperbaharui. Algoritme untuk LODSB sebagai berikut: AL = DS: [SI] Jika DF=0 maka: SI = SI + 1 Selain itu: SI = SI - 1 Perhatikan contoh program berikut untuk instruksi LODSB: LEA SI, al ; simpan posisi data di SI MOV CX, 4 ; ada 4 data MOV AH, 0Eh ; fungsi cetak karakter m: LODSB ; simpan data ke AL INT 10h ; tampilkan ke layar LOOP m ; ulangi sebanyak 4 kali RET al DB H, a,!, o END Pada program di atas, disiapkan data-data karakter yang akan ditampilkan di layar pada tabel al, untuk menampilkan karakter ke layar bisa digunakan interupsi 10h fungsi Eh dengan syarat karakter yang akan ditampilkan disimpan di register AL, sehingga dalam hal ini bisa digunakan fungsi LODSB untuk menyalin karakter dari DS:[SI] ke register AL. Proses menampilkan karakter diulang-ulang hingga semua karakter ditampilkan (ada 4 karakter). STOSB dan STOSW Kedua instruksi ini digunakan untuk menyimpan data dari AL (dengan instruksi STOSB) atau AX (dengan instruksi STOSW) ke dalam ES:[DI], kemudian DI diperbaharui. Algoritma untuk STOSB sebagai berikut: ES:[DI] = AL Jika DF=0 maka DI = DI + 1 Selain itu DI = DI - 1 Sedangkan algoritma untuk STOSW sebagai berikut ES:[DI] = AX Jika DF=0 maka DI = DI + 2 Selain itu DI = DI - 2 Berikut ini ditunjukkan contoh program menggunakan instruksi STOSB: 40
45 Bab III Instruksi 80X86 ORG 100H LEA DI,al MOV AL,12h MOV CX,5 REP STOSB RET al DB 5 dup(o) ; alokasi data menyesuaikan DB END Register DI diisi dengan lokasi dari tabel al (menggunakan instruksi LEA), agar nantinya data-data-nya disimpan pada lokasi tersebut, menggunakan instruksi REP STOSB. Data yang hendak disimpan adalah bilangan 12h (yang sebelumnya disiapkan di register AL dengan MOV AL, 12h), sebanyak 5 kali (dengan bantuan register CX, MOV CX, 5). Setelah Program dijalankan dapat diperiksa (dengan emulator Emu8086) isi dari al. Jika panjang datanya word digunakan STOSW. 3.6 INSTRUKSI INTERUPSI Sama seperti pemanggilan suatu prosedur, instruksi interupsi digunakan untuk memanggil suatu prosedur khusus, yang diberi nama vektor interupsi, dikarenakan prosesor menerima permintaan layanan interupsi. Lihat bab mengenai Interupsi. 3.7 INSTRUKSI KONTROL PROSESOR Instruksi kontrol prosesor merupakan instruksi-instruksi yang digunakan untuk mengatur status flag, sinkronisasi eksternal dan termasuk perintah tidak melakukan apapun pada prosesor yang bersangkutan. Pada Tabel 4.8 ditunjukkan ringkasan instruksi kontrol prosesor. Tabel 4.8. Ringkasan Instruksi Kontrol Prosesor CLC dan STC Kedua instruksi ini berkaitan dengan CF (CarryFlag). Instruksi CLC (Clear Carry Flag) digunakan untuk mereset (membuat 0) CF sedangkan STC (Set CarryFlag) digunakan untuk sebaliknya, menset (membuat 1) CF. CMC Instruksi CMC (Complement Carry Flag) digunakan untuk melakukan negasi (menginversi) CF, jika CF sebelumnya 1, maka akan menjadi 0 demikian juga sebaliknya. CLD dan STD Kedua instruksi ini berhubungan dengan DF (Direction Flag). Instruksi CLD (ClearDirection Flag) digunakan untuk mereset DF, kemudian register SI dan DI dinaikkan oleh instruksi berantai seperti: CMPSB, CMPSW, LODSB, LODSW, MOVSB, MOVSW, STOSB dan STOSW. Sedangkan instruksi STD (Set Direction Flag) digunakan untuk menset DF, kemudian register SI dan DI diturunkan oleh instruksi berantai seperti' CMPSB, CMPSW, LODSB, LODSW, MOVSB, MOVSW, STOSB dan STOSW. 41
46 Bab III Instruksi 80X86 CLI dan STI Kedua instruksi ini berkaitan dengan IF (Interrupt Flag). Instruksi CLI atau Clear Interrupt Flag digunakan untuk mematikan fungsi interupsi perangkat keras, sedangkan STI atau Set Interrupt Flag digunakan untuk mengaktifkan interupsi perangkat keras. HLT Instruksi digunakan untuk menghentikan sistem (haltsystem). NOP Instruksi NOP atau No Operation merupakan instruksi yang menurut penulis agak aneh, tetapi sering dimanfaatkan untuk melakukan penundaan, karena dengan adanya instruksi NOP, prosesor hanya diam saja tidak melakukan apa-apa selama NOP dilaksanakan, dengan demikian jika NOP dijalankan selama 1 //detik dan kita butuh penundaan suatu proses selama 5 //detik, tuliskan saja instruksi NOP lima kali. 42
47 B A B IV 4 INTERUPSI 4.1 PENDAHULUAN Interupsi dapat dipandang sebagai sejumlah fungsi-fungsi yang membuat program (tepatnya pemrograman) menjadi lebih mudah, misalnya, untuk mencetak atau menampilkan suatu karakter Anda bisa melakukannya dengan menuliskan program khusus atau menggunakan pemanggilan suatu instruksi dan menyerahkan urusan tersebut pada fungsi interupsi yang bersangkutan (tentunya, menurut keyakinan saya, Anda pasti akan memilih cara yang terakhir). Selain fungsi untuk menampilkan suatu karakter ke layar, tentu saja ada fungsi-fungsi interupsi lain yang berhubungan dengan operasi diskdrive serta perangkat keras lainnya. Interupsi dapat dipicu dengan perangkat keras yang berbeda-beda maupun dari perangkat lunak. Interupsi yang dibangkitkan karena adanya permintaan layanan pada perangkat keras disebut sebagai interupsi perangkat keras (hardware interrupts), sedangkan yang dibangkitkan melalui perangkat lunak disebut sebagai interupsi perangkat lunak (software interrupts). Yang akan dibahas pada bab ini, berkaitan dengan fokus pada pemrograman Bahasa Assembler, adalah interupsi perangkat lunak. Sebagaimana telah dijelaskan secara singkat pada bab sebelumnya, interupsi perangkat lunak bisa dilakukan melalui instruksi INT dengan sintaks: INT nilai Dengan operan nilai dapat berisi angka 0 hingga 255 (atau 0 hingga OFFh), selanjutnya akan digunakan format heksadesimal. Jika kemudian Anda berpikir bahwa hanya ada 256 interupsi, maka disayangkan sekali pendapat Anda itu salah. Masing-masing interupsi tersebut ada yang memiliki sub-fungsi, untuk menentukan sub-fungsi ini biasanya digunakan register AH, yang harus diisi dengan nilai tertentu sebelum instruksi interupsi yang bersangkutan dijalankan, selain itu bisa juga digunakan register lain untuk meneruskan parameter dan data. Jika diandalkan masing-masing memiliki 256 sub-fungsi, maka akan diperoleh 256 x 256 = fungsi! 4.2 DAFTAR INTERUPSI PILIHAN INTERRUPT 05h Print Screen Fungsi : Mencetak seluruh isi layar ke printer. Register Input : Tidak Ada. Register Output : Tidak Ada. INTERRUPT 09h Keyboard Fungsi : Interupsi 09 merupakan HardWare interupsi dari keyboard. Setiap penekanan tombol keyboard akan membangkitkan interupsi 09. Handler dari interupsi 09 kemudian akan mengambil data dari tombol apa yang 43
48 Bab IV Interupsi ditekan dari Port 60h yang berisi kode scan tombol. Dari kode scan ini kemudian akan diterjemahkan dalam kode ASCII atau Extended dan disimpan pada keyboard buffer untuk kemudian digunakan oleh interupsi lain. INTERRUPT 10h - Service 00h Set Video Mode Fungsi : Mengubah Mode Video. Register Input AH = 00h AL = nomor mode Register Output : Tidak Ada. Penjelasan : Setiap dilakukan pergantian mode akan menimbulkan efek CLS, kecuali nomor mode dijumlahkan dengan 128 atau bit ke-7 pada AL diset 1. INTERRUPT 10h - Service 02h Set Cursor Position Fungsi : Meletakkan kursor pada posisi tertentu. Register Input : AH = 02h BH = nomor halaman tampilan DH = nomor baris (dimulai 00) DL = nomor kolom (dimulai 00) Register Output : Tidak Ada. INTERRUPT 10h - Service 03h Cursor Information Fungsi : Memperoleh Informasi posisi kursor dan ukurannya. Register Input : AH = 03h BH = nomor halaman tampilan Register Output : CH = awal garis bentuk kurso CL = akhir garis bentuk kursor DH = nomor baris DL = nomor kolom Penjelasan : Setiap halaman tampilan memiliki kursornya sendiri- sendiri. INTERRUPT 10h - Service 05h Select Active Page Fungsi : Merubah halaman tampilan aktif. Register Input : AH = 05h AL = nomor halaman tampilan Register Output : Tidak Ada. INTERRUPT 10h - Service 06h Scroll Up Window Fungsi : Menggulung jendela ke atas. Register Input : AH = 06h AL = jumlah baris untuk digulung BH = atribut untuk baris kosong CH,CL = koordinat kiri atas jendela DH,DL = koordinat kanan bawah jendela Register Output : Tidak Ada. 44
49 Bab IV Interupsi Penjelasan : AL diisi 00 akan mengosongkan keseluruhan jendela. INTERRUPT 10h - Service 07h Scroll Down Window Fungsi : Menggulung jendela ke bawah. Register Input : AH = 07h AL = jumlah baris untuk digulung BH = atribut untuk baris kosong CH,CL = koordinat kiri atas jendela DH,DL = koordinat kanan bawah jendela Register Output: Tidak Ada. Penjelasan : AL diisi 00 akan mengosongkan keseluruhan jendela. INTERRUPT 10h - Service 09h Write Character And Attribute At Cursor Position Fungsi : Mencetak karakter dan atribut pada posisi kursor. Register Input : AH = 09h AL = kode ASCII karakter BH = nomor halaman BL = atribut karakter CX = jumlah pengulangan pencetakan Register Output : Tidak Ada. Penjelasan : Karakter kontrol akan dicetak sebagai karakter biasa. INTERRUPT 10h - Service 0Ah Write Character At Cursor Position Fungsi : Mencetak karakter pada posisi kursor. Register Input : AH = 0Ah AL = kode ASCII karakter BH = nomor halaman CX = jumlah pengulangan pencetakan Register Output : Tidak Ada. Penjelasan : Karakter kontrol akan dicetak sebagai karakter biasa, atribut yang digunakan akan sama dengan atribut yang lama. INTERRUPT 10h - Service 0Eh Teletype Output Fungsi : Output karakter sederhana. Register Input : AH = 0Eh AL = kode ASCII karakter BH = nomor halaman Register Output : Tidak Ada. Penjelasan : Karakter kontrol berpengaruh sesuai fungsinya. Pada ROM BIOS dengan tanggal antara 24/4/81 ke atas umumnya register BH tidak berfungsi karena setiap output akan dicetak ke halaman aktif. INTERRUPT 10h - Service 0Fh Get Current Video Mode Fungsi : Mendapatkan mode video aktif. Register Input : 45
50 Bab IV Interupsi AH = 0Fh Register Output : AL = mode video AH = jumlah karakter per kolom BH = nomor halaman tampilan Penjelasan : Jika mode video diset dengan bit 7 on, maka AL yang didapat juga akan berisi bit 7 on. Konflik : Driver tampilan VUIMAGE INTERRUPT 10h - Service 11h,Subservice 00h Load User Specific Character Fungsi : Membuat karakter ASCII baru. Terdapat pada : Sistem dilengkapi tampilan EGA, VGA, dan MCGA. Register Input : AH = 11h AL = 00h CX = jumlah karakter akan diubah DX = nomor karakter mulai diubah BL = nomor blok untuk diubah BH = jumlah byte per karakter ES:BP = buffer bentuk karakter Register Output : Tidak Ada INTERRUPT 10h - Service 13h Write String Fungsi : Mencetak string ke Layar Terdapat pada : Mesin ke atas dengan tampilan EGA ke atas. Register Input : AH = 13h AL = 00h BH = nomor halaman BL = atribut untuk string CX = jumlah karakter pada string DH,DL = koordinat untuk memulai pencetakan ES:BP = alamat string yang akan dicetak Register Output : Tidak Ada. Penjelasan : Memperlakukan karakter kontrol sesuai fungsinya. INTERRUPT 16h - Service 00h Get Keystroke Fungsi : Menunggu masukan keyboard. Terdapat pada : Semua mesin. Register Input : AH = 00h Register Output : Jika AL=0 maka AH = kode Extended Jika AL<>0 maka AL = Kode ASCII AH = Kode Scan INTERRUPT 16h - Service 01h Check Keystroke Fungsi : Mengecek isi keyboard buffer. Terdapat pada : Semua mesin. Register Input : AH = 01h Register Output : ZF=0 bila buffer tidak kosong Jika AL=0 maka AH = kode Extended 46
51 Bab IV Interupsi Jika AL<>0 maka AL = Kode ASCII AH = Kode Scan ZF=1 bila buffer kosong INTERRUPT 16h - Service 10h Get Enhanced Keystroke Fungsi : Menunggu masukan keyboard. Terdapat pada : Mesin AT dengan keyboard Enhanced. Register Input : AH = 10h Register Output : AH = kode scan AL = kode ASCII INTERRUPT 16h - Service 11h Check Enhanced Keystroke Fungsi : Mengecek isi keyboard buffer. Terdapat pada : Mesin AT dengan keyboard Enhanced. Register Input : AH = 11h Register Output : ZF=0 bila buffer tidak kosong Jika AL=0 maka AH = kode Extended Jika AL<>0 maka AL = Kode ASCII AH = Kode Scan ZF=1 bila buffer kosong INTERRUPT 19h Bootstrap Loader Fungsi : Melakukan Warm Boot. Register Input : Tidak Ada. Register Output : Tidak Ada. INTERRUPT 1Bh Control Break Handler Fungsi : Interupsi ini terjadi setiap kali terjadi penekanan tombol Ctrl+Break. Register Input : Tidak Ada. Register Output : Tidak Ada. INTERRUPT 1Ch Timer Tick Fungsi : Interupsi ini disediakan untuk digunakan oleh pemakai. Interupsi 1Ch akan terjadi kurang lebih 18,2 kali setiap detik. Anda bisa membuat program residen dengan memanfaatkan timer tick ini. Register Input : Tidak Ada. Register Output : Tidak Ada. INTERRUPT 21h - Service 01h Read Character With Echo Fungsi : Untuk membaca masukan 1 karakter dari keyboard dan menampilkannya ke layar. Fungsi ini dapat dihentikan oleh penekanan tombol Ctrl+Break. Register Input : AH = 10h Register Output : 47
52 Bab IV Interupsi AL = Kode ASCII Catatan : Berbeda dengan fungsi dari BIOS, untuk membaca karakter khusus yang mempunyai kode Extended, anda harus membacanya dua kali dengan fungsi dari DOS ini. INTERRUPT 21h - Service 02h Write Character To Standard Output Fungsi : Untuk mencetak satu buah karakter pada layar. Register Input : AH = 02h DL = Kode ASCII Register Output : Tidak ada INTERRUPT 21h - Service 07h Direct Character Input Without Echo Fungsi : Untuk membaca masukan 1 karakter dari keyboard. Fungsi ini tidak akan menampilkan karakter yang ditekan pada layar, selain itu penekanan tombol Ctrl+Break juga akan diabaikan. Register Input : AH = 07h Register Output : AL = Kode ASCII INTERRUPT 21h - Service 08h Character Input Without Echo Fungsi : Untuk membaca masukan 1 karakter dari keyboard. Fungsi ini tidak akan menampilkan karakter yang ditekan pada layar. Penekanan tombol Ctrl+Break akan menghentikan fungsi ini. Register Input : AH = 08h Register Output : AL = Kode ASCII INTERRUPT 21h - Service 09h Write String To Standard Output Fungsi : Untuk mencetak string ke layar. Register Input : AH = 09h DS:DX = String yang diakhiri dengan tanda "$". Register Output : Tidak ada INTERRUPT 21h - Service 0Ah Input String Fungsi : Untuk mendapatkan masukan string dari keyboard. Register Input : AH = 0Ah DS:DX = Buffer Spesifikasi buffer: - Offset 00 mencatat maksimum karakter yang dapat dimasukkan. - Offset 01 banyaknya masukan dari keyboard yang telah diketikkan. Tombol CR tidak akan dihitung. - Offset 02 keatas, tempat dari string yang diketikkan disimpan. Register Output : Buffer terisi INTERRUPT 21h - Service 0Bh Get Status 48
53 Bab IV Interupsi Fungsi : Mengecek isi keyboard buffer. Register Input : AH = 0Bh Register Output : AL = 00 jika tidak ada karakter AL = FFh jika ada karakter INTERRUPT 21h - Service 14h Sequential Read From FCB File Fungsi : Untuk membaca file secara sekuensial. Register Input : AH = 14h DS:DX = FCB Register Output : AL = status INTERRUPT 21h - Service 25h Set Interrupt Vektor Fungsi : Untuk merubah vektor interupsi ke suatu lokasi dengan merubah alamat awal vektor interupsi. Register Input : AH = 25h AL = Nomor Interupsi DS:DX = Lokasi baru Register Output : Konflik : Phar Lap 386 INTERRUPT 21h - Service 2Fh Get DT A Address Fungsi : Untuk mengetahui alamat dari DTA yang digunakan. Register Input : AH = 2Fh Register Output : ES:BX = Lokasi DTA INTERRUPT 21h - Service 31h Terminate And Stay Residen Fungsi : Untuk meresidenkan suatu program. Register Input : AH = 31h AL = Kode return DX = Besar memory dalam paragraph Register Output : INTERRUPT 21h - Service 33h Extended Break Checking Fungsi : Untuk menghidup dan matikan pengecekan tombol Ctrl+Break oleh fungsi DOS. Register Input : AH = 33h AL = 0 untuk mengambil keterangan Ctrl+Break = 1 untuk merubah status Ctrl+Break DL = 0 Ctrl+Break dijadikan Off DL = 1 Ctrl+Break dijadikan On Register Output : Jika input AL=0 DL=0 Off DL=1 On 49
54 Bab IV Interupsi INTERRUPT 21h - Service 35h Get Interrupt Vektor Fungsi : Untuk mendapatkan alamat vektor interupsi dari suatu nomor interupsi. Register Input : AH = 35h AL = Nomor Interupsi Register Output : ES:BX = Alamat vektor interupsi INTERRUPT 21h - Service 3Ch Create File Handle Fungsi : Untuk menciptakan sebuah file baru dengan metode File Handle. Register Input : AH = 3Ch AL = Mode, dengan bit: 0 file Read only 1 file Hidden 2 file System 3 Volume label 4 Cadangan 5 file Archive DS:DX = Nama file ASCIIZ Register Output : Jika CF=0 maka AX=Nomor file handle Jika CF=1 maka AX=Kode kesalahan INTERRUPT 21h - Service 3Dh Open Existing File Fungsi : Untuk membuka file yang telah ada dengan metode file handle. Register Input : AH = 3Dh AL = Mode, dengan bit: 0 untuk Read only 1 untuk Write only 2 untuk Read/Write DS:DX = Nama file ASCIIZ Register Output : Jika CF=0 maka AX=Nomor file handle Jika CF=1 maka AX=Kode kesalahan INTERRUPT 21h - Service 3Eh Close File Handle Fungsi : Untuk menutup file handle Register Input : AH = 3Eh BX = Nomor file handle Register Output : CF=0 jika sukses CF=1 jika gagal, maka AX=Kode kesalahan INTERRUPT 21h - Service 3Fh Read From File Or Device Using File Handle Fungsi : Untuk membaca data dari suatu file atau device. Register Input : AH = 3Fh BX = Nomor file handle CX = Banyaknya byte yang akan dibaca 50
55 Bab IV Interupsi DS:DX = Alamat buffer Register Output : CF=0 jika sukses AX=byte yang berhasil dibaca CF=1 jika gagal AX=Kode kesalahan INTERRUPT 21h - Service 40h Write To File Or Device Using File Handle Fungsi : Untuk menulisi file atau device. Register Input : AH = 40h BX = Nomor file handle CX = Banyaknya byte yang DS:DX = Alamat data Register Output : CF=0 jika sukses AX=byte yang berhasil ditulisi CF=1 jika gagal akan ditulisi AX=Kode kesalahan INTERRUPT 21h - Service 41h Delete File Using File Handle Fungsi : Untuk menghapus file AH = 41h CL = Nama file ASCIIZ Register Input : Register Output : CF=0 jika sukses CF=1 jika gagal, maka AX=kode kesalahan INTERRUPT 21h - Service 42h Set Current File Position Fungsi : Untuk memindahkan pointer dari suatu file. Register Input : AH = 42h AL = Mode perpindahan: 00 dari awal file 01 dari posisi aktif 02 dari akhir file BX = Nomor file handle CX:DX = Banyaknya perpindahan Register Output : CF=0 jika sukses CF=1 jika gagal AX= kode kesalahan INTERRUPT 21h - Service 43h Set And Get File Atribut Fungsi : Untuk mengetahui dan merubah atribut dari suatu file. Register Input : AH = 43h AL = 0 untuk mendapatkan atribut file 1 untuk merubah atribut file CX = atribut baru dengan bit: 0 = Read Only 1 = Hidden 2 = System 5 = Archive 51
56 Bab IV Interupsi DS:DX = Nama file ASCIIZ Register Output : Jika input AL=0, maka: jika CF=0 CX = atribut jika CF=1 AX = Kode kesalahan INTERRUPT 21h - Service 4Ch Terminate With Return Code Fungsi : Untuk menghentikan program dan mengembalikan kendali kepada DOS. Fungsi ini lebih efektif untuk digunakan dibandingkan dengan interupsi 20h. Register Input : AH = 4Ch AL = Kode return Register Output : Tidak ada INTERRUPT 21h - Service 56h Rename File Fungsi : Untuk mengganti nama file. Fungsi ini juga bisa memindahkan file ke directory lain. Register Input : AH = 56h DS:DX = Nama file ASCIIZ lama ES:BX = Nama file ASCIIZ baru Register Output : CF=0 jika sukses CF=1 jika gagal AX=Kode kesalahan INTERRUPT 27h Terminate And Stay Residen Fungsi : Untuk meresidenkan program. Register Input : DS:DX = Batas alamat residen Register Output : 52
57 B A B V 5 PROCEDURE DAN MAKRO 5.1 PROCEDURE Procedure merupakan suatu alat bantu yang sangat berguna. Dengan procedure suatu program yang besar bisa diselesaikan dengan lebih mudah. Proses pencarian kesalahan pun akan lebih mudah bila digunakan procedure Membuat Procedure Untuk membuat procedure bisa anda gunakan bentuk seperti pada gambar NamaP PROC NEAR/FAR Program RET NamaP ENDP "NamaP" adalah nama dari procedure yang kita definisikan sendiri. Untuk memudahkan nama untuk procedure bisa anda definisikan sesuai dengan fungsi dari procedure tersebut, seperti CLS untuk procedure yang tugasnya menghapus layar. Di belakang kata "PROC" anda harus memilih bentuk dari procedure tersebut, yaitu "NEAR" atau "FAR". Bentuk "NEAR" digunakan jika procedure tersebut nantinya dipanggil oleh program yang letaknya masih satu segment dari procedure tersebut. Pada program COM yang terdiri atas satu segment, kita akan selalu menggunakan bentuk "NEAR". Sebaliknya bentuk "FAR" ini digunakan bila procedure dapat dipanggil dari segment lain. Bentuk ini akan kita gunakan pada program EXE. Perintah "RET(Return)" digunakan untuk mengembalikan Kontrol program pada si pemanggil procedure. Pada bentuk NEAR perintah RET ini akan mempop atau mengambil register IP dari stack sebagai alamat loncatan menuju program pemanggil procedure. Sedangkan pada bentuk "FAR" perintah RET akan mengambil register IP dan CS dari stack sebagai alamat loncatan menuju program pemanggil procedure. Alamat kembali untuk procedure disimpan pada stack pada saat procedure tersebut dipanggil dengan perintah "CALL", dengan syntax: CALL NamaP Perintah Call ini akan menyimpan register IP saja bila procedure yang dipanggil berbentuk "NEAR". Bila procedure yang dipanggil berbentuk "FAR", maka perintah "CALL" akan menyimpan register CS dan IP Menggunakan Procedure Sebagai contoh dari pemakaian procedure akan kita lihat pada program 16.1 yang mencetak karakter dengan procedure. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; ; PROGRAM : PROC_KAR.ASM ; 53
58 Bab V Procedure dan Makro ; FUNGSI : MENCETAK KARATER DENGAN PROCEDURE ; ;================================================; Proses : CALL Cetak_Kar ; Panggil Cetak_Kar INT 20h Cetak_Kar PROC NEAR MOV AH,02h MOV DL,'S' INT 21h RET Cetak_Kar ENDP ; Cetak karakter ; Kembali kepada si pemanggil ; END Procedures END Proses Bila program di atas dijalankan, maka pada layar akan ditampilkan huruf "S". Untuk membuat sebuah procedure ingatlah untuk menyimpan semua register yang digunakan oleh procedure tersebut dan mengembalikan semua isi register pada akhir procedure. Hal ini dilakukan untuk menjaga supaya program utama yang menggunakan procedure tersebut tidak menjadi kacau nantinya. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; ; PROGRAM : PROC_KA1.ASM ; ; FUNGSI : MENCETAK KARATER DENGAN PROCEDURE ; ; ; ;================================================; TData : JMP Proses Kar DB? Klm DB 'BATMAN SI MANUSIA KELELAWAR ' ; 28 Karakter Proses : MOV CX,28 ; Banyaknya pengulangan XOR BX,BX ; Addressing Mode Ulang : MOV DL,Klm[BX] MOV Kar,DL CALL Cetak_Kar ; Panggil Cetak_Kar INC BX LOOP Ulang INT 20h Cetak_Kar PROC NEAR PUSH AX PUSH DX ; Simpan semua register ; Yang digunakan 54
59 Bab V Procedure dan Makro MOV AH,02h MOV DL,Kar INT 21h ; Cetak karakter POP DX ; Kembalikan semua register POP AX ; Yang disimpan RET ; Kembali kepada si pemanggil Cetak_Kar ENDP ; END Procedures END TData Bila program di atas dijalankan, maka pada layar akan ditampilkan: BATMAN SI MANUSIA KELELAWAR Pada procedure kita tidak bisa menggunakan parameter, inilah salah satu kelemahan dari procedure yang sangat berarti. Untuk menggunakan parameter anda harus menggunakan MACROS. 5.2 MACRO Macro hampir sama dengan procedure, yang dapat membantu anda dalam membuat program yang besar. Dengan Macro anda tidak perlu menggunakan perintah "CALL" dan anda juga bisa menggunakan parameter dengan mudah. Suatu ciri dari pemrograman bahasa tingkat tinggi! Membuat Makro Macro adalah lebih mudah dibuat daripada procedure. Untuk membuat Macro bisa anda gunakan bentuk seperti berikut: NamaM MACRO [P1,P2,,] Program ENDM "P1" dan "P2" adalah parameter yang bisa anda gunakan pada macro. Parameter ini berbentuk opsional, artinya bisa digunakan ataupun tidak. Supaya lebih jelas bisa anda lihat pada program MAC1 yang menggunakan macro ini untuk mencetak karakter. Cetak_Kar MACRO Kar MOV CX,3 MOV AH,02 MOV DL,Kar Ulang : INT 21h ; Cetak Karakter LOOP Ulang ENDM ; End Macro 55
60 Bab V Procedure dan Makro ; ; ; Program : MAC1.ASM ; ; Fungsi : Menggunakan Macro untuk mencetak huruf 'SSS' ; ; ; Proses: Cetak_Kar 'S' ; Cetak Huruf S INT END 20h Proses Dari program MAC1 bisa anda lihat betapa mudahnya untuk menggunakan macro. Pada procedure, setiap kali kita memanggilnya dengan perintah CALL maka program akan melompat pada procedure tersebut, sehingga setiap procedure hanya terdapat satu kali saja pada program. Lain halnya dengan Macro, 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. Dengan demikian bila pada program anda memanggil suatu macro sebanyak 10 kali maka macro tersebut akan disisipkan 10 kali pada program. Hal inilah yang menyebabkan program yang menggunakan macro ukuran programnya menjadi lebih besar. Tetapi 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 Label Pada Makro Pada macro anda bisa menggunakan label seperti biasa. Tetapi anda harus ingat, karena setiap pemanggilan Macro akan menyebabkan seluruh isi macro tersebut disisipkan pada program, maka pada macro yang di dalamnya menggunakan label hanya dapat dipanggil sebanyak satu kali. Bila anda menggunakannya lebih dari satu kali maka akan terjadi "**Error** Symbol already defined elsewhere: ULANG" karena dianggap kita menggunakan label yang sama. Untuk menghindari hal itu, gunakanlah direktif LOCAL. Dengan direktif LOCAL assembler akan membedakan label tersebut setiap kali terjadi pemanggilan terhadapnya. Cetak_Kar MACRO Kar LOCAL Ulang ; Label 'Ulang' jadikan Local MOV CX,3 MOV AH,02 MOV DL,Kar Ulang: INT 21h ; Cetak Karakter LOOP Ulang ENDM ; End Macro ; ; ; Program : MAC2.ASM ; ; Fungsi : Menggunakan Macro untuk mencetak huruf 'PPPCCC' ; 56
61 Bab V Procedure dan Makro ; ; Proses: Cetak_Kar 'P' Cetak_Kar 'C' ; Cetak Huruf P ; Cetak Huruf C INT END 20h Proses 5.3 MACRO ATAU PROCEDURE 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. Kini apa yang akan anda pakai? Macro ataukah procedure? Untuk itu marilah kita lihat dahulu perbedaan antara procedure dan macro ini. - Procedure tidak memperpanjang program, karena hanya muncul sekali saja pada program. - Macro akan muncul pada program setiap terjadi pemanggilan terhadap macro, sehingga macro akan memperpanjang program. - Untuk menggunakan procedure anda harus memanggilnya dengan perintah CALL dan dalam procedure diakhiri dengan RET. - Macro bisa anda gunakan dengan memanggil langsung namanya dan pada macro tidak perlu diakhiri dengan RET. - Procedure akan memperlambat program, karena setiap pemanggilan terhadap procedure, komputer harus melakukan lompatan. - Macro 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. - Macro dengan mudah bisa menggunakan parameter, suatu ciri bahasa tingkat tinggi. - Macro lebih mudah dibuat dan digunakan daripada procedure. Setelah melihat perbedaan-perbedaan tersebut, kapankah kita menggunakan procedure dan kapankah menggunakan macro? - Jika fungsi tersebut jarang dipanggil, gunakanlah MACRO karena macro tidak memperlambat proses. - Jika fungsi tersebut sering dipanggil, gunakanlah PROCEDURE karena procedure tidak memperbesar program. - Jika fungsi tersebut kecil, gunakanlah MACRO. Karena pengaruh terhadap besarnya program hanya sedikit dan program akan lebih cepat. - Jika fungsi tersebut besar, gunakanlah PROCEDURE. Karena procedure tidak memperbesar program. 57
62 6 CONTOH-CONTOH PROGRAM UNTUK LATIHAN Program 1 ;===============================================; ; FUNGSI : MENCETAK KARATER 'A' DENGAN INT 21 ; ;===============================================; Proses : MOV AH,02h ; Nilai servis ntuk mencetak karakter MOV DL,'A' ; DL = Karakter ASCII yang akan dicetak INT 21h ; Cetak karakter!! INT 20h END Proses ; Selesai! kembali ke DOS Program 2 ;=================================================================; ; PROGRAM: A1.ASM ; ; FUNGSI : MENCETAK KARATER 'A' BESERTA ATRIBUTNYA DENGAN INT 10h ; ;=================================================================; Proses : MOV AH,09h ; Nilai servis untuk mencetak karakter MOV AL,'A' ; AL = Karakter yang akan dicetak MOV BH,00h ; Nomor Halaman layar MOV BL,93h ; Warna atau atribut dari karakter MOV CX,03h ; Banyaknya karakter yang ingin dicetak INT 10h ; Laksanakan!!! INT 20h END Proses ; Selesai! kembali ke DOS Program 3 ;==============================================================; ; PROGRAM : ABC0.ASM ; ; FUNGSI : MENCETAK 16 BUAH KARAKTER DENGAN INT 21h SERVIS 02 ; ;==============================================================; Proses : MOV AH,02h MOV DL,'A' ; Nilai servis ; DL=karakter 'A' atau DL=41h ; Banyaknya pengulangan yang akan MOV CX,10h Ulang : INT 21h ; Cetak karakter!! INC DL ; Tambah DL dengan 1 LOOP Ulang ; Lompat ke Ulang 58
63 Contoh-Contoh Program Untuk Latihan INT 20h END Proses Program 4 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; ; PROGRAM : TAMBAH.ASM ; ; FUNGSI : MELIHAT PENAMBAHAN YANG DILAKUKAN OLEH BERBAGAI PERINTAH ; ;====================================================================; Proses : MOV AH,15h MOV AL,4 ADD AH,AL MOV AX,1234h MOV BX,0F221h ADD AX,BX ; AH:=15h ; AL:=4 ; AH:=AH+AL, jadi AH=19h ; NIlai AX:=1234h dan carry=0 ; Nilai BX:=F221h dan carry=0 ; AX:=AX+BX, jadi nilai AX=0455h MOV AX,1234h ; AX = 1234h CF = 0 MOV BX,9ABCh ; BX = 9ABCh CF = 0 MOV CX,5678h ; BX = 5678h CF = 0 MOV DX,0DEF0h ; DX = DEF0h CF = 0 ADD CX,DX ; CX = 3568h CF = 1 ADC AX,BX ; AX = AX+BX+CF = ACF1 INC AL ; AL:=AL+1, nilai pada AL ditambah 1 INT 20h END Proses Program 5 ;===============================================; ; PROGRAM : KURANG.ASM ; ; FUNGSI : MENGURANGKAN ANGKA 122EFFF-0FEFFFF ; ;===============================================; TData : JMP Proses ALo EQU 0EFFFh AHi EQU 122h BLo EQU 0FFFFh Bhi EQU 0FEh HslLo DW? HslHi DW? Proses : MOV AX,ALo SUB AX,Blo MOV HslLO,AX MOV AX,AHi SBB AX,BHi ; Lompat ke Proses ; AX=EFFFh ; Kurangkan EFFF-FFFF, jadi AX=F000 ; HslLo bernilai F000 ; AX=122h ; Kurangkan 122-FE-Carry, AX=
64 Contoh-Contoh Program Untuk Latihan MOV HslHi,AX ; HslHi bernilai 0023 INT 20h END TData ; Kembali ke DOS Program 6 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; ; PROGRAM : CBA0.ASM ; ; FUNGSI : MENCETAK KARAKTER "Z".."A" DENGAN INT 21h SERVIS 02 ; ;=================================================================; Proses : MOV AH,02h MOV DL,'Z' MOV CX,26 ; Nilai servis ; DL=5Ah ; Banyaknya pengulangan yang akan ; dilakukan Ulang: INT 21h ; Cetak karakter!! DEC DL ; Kurang DL dengan 1 LOOP Ulang ; Lompat ke Ulang INT 20h END Proses Program 7 ;========================================================; ; PROGRAM : KALI.ASM ; ; FUNGSI : MENGALIKAN BILANGAN 16 BIT, HASIL PADA DX:AX ; ;========================================================; TData : JMP Proses A DW 01EFh B DW 02FEh HslLo DW? HslHi DW? Proses: MOV AX,A MUL B MOV HslLo,AX MOV HslHi,DX INT 20h END TData ; Lompat ke Proses ; AX=1EF ; Kalikan 1FH*2FE ; AX bernilai C922 sehingga HslLo=C922 ; DX bernilai 0005 sehingga HslHi=0005 ; Kembali ke DOS Program 8 ;====================================================; ; PROGRAM : BAGI.ASM ; ; FUNGSI : MEMBAGI BILANGAN 16 BIT, HASIL PADA DX:AX ; ;====================================================; 60
65 Contoh-Contoh Program Untuk Latihan TData : JMP Proses A DW 01EFh B DW 2 Hsl DW? Sisa DW? Proses: SUB DX,DX MOV AX,A DIV B MOV Hsl,AX MOV Sisa,DX INT 20h END Tdata ; Lompat ke Proses ; Jadikan DX=0 ; AX=1EF ; Bagi 1EF:2 ; AX bernilai 00F7 sehingga Hsl=00F7 ; DX berisi 0001 sehingga Sisa=0001 ; Kembali ke DOS Program 9 ;==================================================; ; PROGRAM : BHSMESIN.ASM ; ; FUNGSI : MEMBUNYIKAN SPEAKER DENGAN DATA PROGRAM ; ;==================================================; Tdata:DB 0E4h,61h,24h,0FEh,0E6h,61h,0B9h,0D0h,7h,0BBh,9Ah DB 2h,8Bh,0D1h,51h,34h,2h,0E6h,61h,0D1h,0C3h,73h,6h DB 83h,0C1h,0h,0EBh,0Bh,90h,52h,2Bh,0D1h,87h,0D1h,5Ah DB 81h,0C1h,34h,8h,0E2h,0FEh,59h,0E2h,0E2h,0CDh,20h END Tdata Program 10 ;============================================; ; FUNGSI : DEMO PENYIMPANAN TIPE DATA ; ;============================================; TData : JMP Proses A DB 12h,34h B DW 0ABCDh C DD h D DB 40 DUP(1) END Tdata Program 11 ;=============================================================; ; PROGRAM : PTR.ASM ; 61
66 Contoh-Contoh Program Untuk Latihan ; FUNGSI : MEMINDAHKAN DATA ANTAR TIPE DATA YANG BERBEDA!!! ; ;=============================================================; TData : JMP Proses A DW 01EFh B DW 02FEh D DD? Proses: MOV AL,BYTE PTR A MOV AH,BYTE PTR A+1 MOV BX,B MOV WORD PTR D,AX MOV WORD PTR D+2,BX INT 20h END TData ; Lompat ke Proses ; 2 Byte ; 2 Byte ; 4 Byte ; AL=EF, AX=?EF ; AH=01, AX=01EF ; BX=02FE ; D=??01EF ; D=02FE01EF ; Kembali ke DOS Program 12 ;=======================================================; ; PROGRAM : KALIPTR.ASM ; ; FUNGSI : MENGALIKAN BILANGAN 16 BIT, HASIL PADA DX:AX ; ;=======================================================; TData : JMP Proses A DW 01EFh B DW 02FEh Hsl DD? Proses: MOV AX,A MUL B MOV WORD PTR Hsl,AX MOV WORD PTR Hsl+2,DX INT 20h END TData ; Lompat ke Proses ; 2 Byte ; 2 Byte ; 4 Byte ; AX=1EF ; Kalikan 1FH*2FE ; AX bernilai C922, Hsl=??C922 ; DX bernilai 0005, Hsl=0005C922 ; Kembali ke DOS Program 13 ;/================================\; ; PROGRAM : ADDR1.ASM ; ; FUNGSI : PERKALIAN DENGAN ; ;\================================/;.386 ; Untuk prosesor Proses : 62
67 Contoh-Contoh Program Untuk Latihan MOV EAX, h MOV EDX, h MOV EBX,EDX MUL EBX ; Immediate Addressing ; Immediate Addressing ; Register Addressing ; Register Addressing END Proses Program 14 ;/================================================\; ; PROGRAM : RID.ASM ; ; FUNGSI : MENGAKSES DATA MELALUI ALAMAT EFEKTIVE ; ;\================================================/; TData : JMP Proses Kal DB 'ABCDEF' Proses: LEA BX,Kal ; Ambil Offset Kal MOV CX,2 Ulang: MOV DL,[BX] ; kode ASCII yang ingin dicetak MOV AH,02h ; Nilai servis ntuk mencetak karakter INT 21h ; Laksanakan!! ADD BX,2 ; BX:=BX+2 LOOP Ulang ; Lompat ke Ulang INT 20h END TData Program 15 ;/========================================================\; ; PROGRAM : BRA0.ASM ; ; FUNGSI : MENGAKSES DATA DENGAN BASE RELATIVE ADDRESSING ; ;\========================================================/; TData : JMP Proses Tabel DW 11h,50h,0Ah,14h,5Ah Proses: LEA BX,Tabel MOV AX,Tabel ADD AX,[BX]+2 ADD AX,[BX]+4 ADD AX,[BX+6] ADD AX,[BX+8] INT 20h END TData 63
68 Contoh-Contoh Program Untuk Latihan Program 16 ;/==========================================================\; ; PROGRAM : BRA1.ASM ; ; FUNGSI : MENCETAK KALIMAT DENGAN BASE RELATIVE ADDRESSING ; ;\==========================================================/; TData : JMP Proses Kalimat DB 'NYAMUK GORENG' ; 13 karakter Proses: XOR BX,BX ; BX=0 Untuk penunjuk Offset MOV CX,13 ; Counter LOOP Ulang : MOV DL,Kalimat[BX] ; Ambil karakter yang ke BX MOV AH,02 ; Servis untuk cetak karakter INT 21h ; Cetak Karakter INC BX ; BX:=BX+1 LOOP Ulang ; Lompat ke Ulang sampai CX=0 INT 20h ; Selesai, kembali ke DOS!! END TData Program 17 ;/=====================================\; ; PROGRAM : VRBIOS.ASM ; ; FUNGSI : MELIHAT VERSI BIOS KOMPUTER ; ;\=====================================/; Proses : MOV AX,0F000h ; Masukkan nilai F000 pada AX MOV ES,AX ; Copykan nilai AX ke ES MOV BX,0FFF5h ; Penunjuk Offset XOR SI,SI ; Jadikan SI=0 MOV CX,8 ; Counter untuk LOOP Ulang: MOV DL,ES:[BX][SI] ; Ambil isi alamat ES:BX+SI MOV AH,02h ; Nilai servis mencetak karakter INT 21h ; Cetak!! INC SI ; SI:=SI+1 LOOP Ulang ; Lompat ke Ulang sampai CX=0 INT 20h END Proses ; Selesai! kembali ke DOS Program 18 ;/=======================================================\; ; PROGRAM : BIA.ASM ; ; FUNGSI : MENGAKSES ARRAY DENGAN BASE INDEXED ADDRESSING ; ;\=======================================================/; 64
69 Contoh-Contoh Program Untuk Latihan TData : JMP Proses Mahasiswa STRUC Nim DW 0 Tinggi DB 0 Nilai DB 0,0,0,0 Mahasiswa ENDS Absen Mahasiswa 10 DUP (<>) ; 2 byte ; 1 byte ; 4 byte Proses: LEA BX,Absen ; BX Menunjuk Offset Absen ADD BX,21 ; BX Menunjuk pada Record ke 4 XOR SI,SI ; SI=0 MOV [BX][SI].Nim,0099h ; NIM, record ke 4 MOV [BX][SI].Tinggi,10h ; Tinggi, record ke 4 MOV [BX][SI+1].Nilai,78h ; Nilai pertama MOV [BX][SI+2].Nilai,99h ; Nilai kedua MOV [BX][SI+3].Nilai,50h ; Nilai keempat MOV [BX][SI+4].Nilai,83h ; Nilai kelima INT 20h ; Selesai!! END TData Program 19 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; ; Program: kal0.asm ; ; Fungsi : Mencetak String dengan Int 21 servis 9 ; ;=================================================; Tdata : JMP Proses Kal0 DB 'PROSES PENCETAKAN STRING ',13,10,'$' Kal1 DB 'DIBELAKANG TANDA $ TIDAK BISA DICETAK ' Proses: MOV AH,09h ; Servis ke 9 MOV DX,OFFSET Kal0 ; Ambil Alamat Offset Kal0 INT 21h ; Cetak perkarakter sampai tanda $ LEA DX,Kal0 ; Ambil Alamat Offset Kal0 INT 21h ; Cetak perkarakter sampai tanda $ LEA DX,Kal0+7 ; Ambil Alamat Offset KAl0+7 INT 21h ; Cetak perkarakter sampai tanda $ LEA DX,KAL1 ; Ambil Offset kal1 INT 21h ; Cetak perkarakter sampai ketemu $ INT 20h END Tdata ; Selesai, kembali ke DOS 65
70 Contoh-Contoh Program Untuk Latihan Program 20 ;/=============================================\; ; Program : ATTR-KLM.ASM ; ; Fungsi : Mencetak kalimat disertai atributnya ; ; ; ; INT 10h ; ; ; ; Input : ; ; AX = 1300h ; ; BL = Atribut ; ; BH = Halaman tampilan ; ; DL = Posisi X ; ; DH = Posisi Y ; ; CX = Panjang kalimat<dalam karakter> ; ; ES:BP = Alamat awal string ; ;\=============================================/; TData : JMP Proses Kal0 DB ' Menulis kalimat dengan Atributnya ' Proses: MOV AX,1300h ; Servis 13h subfungsi 00 MOV BL, b ; Atribut tulisan MOV BH,00 ; Halaman tampilan 0 MOV DL,20 ; Posisi X MOV DH,12 ; Posisi Y MOV CX,35 ; Banyaknya karakter dalam string LEA BP,Kal0 ; ES:BP alamat string INT 10h ; Cetak kalimat! INT 20h END TData ; Selesai, kembali ke DOS Program 21 ;/===============================================================\; ; Program : CMPJ.ASM ; ; Fungsi : Mendemokan perintah lompat yang mengikuti perintah CMP ; ;\===============================================================/; TData: JMP Proses BilA DB 67 BilB DB 66 Kal0 DB 'Bilangan A lebih kecil dari bilangan B $' Kal1 DB 'Bilangan A sama dengan bilangan B $' Kal2 DB 'Bilangan A lebih besar dari bilangan B $' Proses: MOV AL,BilA ; Masukkan bilangan A pada AL CMP AL,BilB ; Bandingkan AL(BilA) dengan Bilangan B JB AKecil ; Jika BilA < BilB, lompat ke AKecil JE Sama ; Jika BilA = BilB, lompat ke Sama 66
71 Contoh-Contoh Program Untuk Latihan JA ABesar ; Jika BilA > BilB, lompat ke ABesar Akecil: LEA DX,Kal0 ; Ambil offset Kal0 JMP Cetak ; Lompat ke cetak Sama: LEA DX,Kal1 ; Ambil offset Kal1 JMP Cetak ; Lompat ke cetak ABesar: LEA DX,Kal2 ; Ambil offset Kal2 Cetak: MOV AH,09 ; Servis untuk mencetak kalimat INT 21h ; Cetak kalimat!! EXIT: INT 20h END TData ; Kembali ke DOS. Program 22 ;/======================================================================\; ; Program : JMPL.ASM ; ; Fungsi : Mencetak kalimat secara perkarakter sampai ditemui karakter '*' ;\======================================================================/; TData : JMP Proses Kal DB ' Lucky Luck menembak ',13,10 DB 'Lebih cepat dari bayangannya!! ',7,7,'*' Proses: XOR BX,BX ; BX=0 MOV AH,02h ; Servis Untuk Cetak Karakter Ulang: CMP Kal[BX],'*' ; Bandingkan dengan '*' JE Exit ; Jika Sama Lompat ke Exit MOV DL,Kal[BX] ; Masukkan karakter ke BX menuju DL INT 21h ; Cetak karakter INC BX ; Tambah 1 pada BX JMP Ulang ; Lompat Ke Ulang Exit : INT 20h END TData ; Selesai! kembali ke DOS Program 23 ;/======================================================================\; ; Program : NSTACK.ASM ; ; Fungsi : Mencetak kalimat 2 kali dengan operasi yang mirip dengan stack; ;\======================================================================/; TData : JMP Proses Kal DB 'LANG LING LUNG $' Ganti DB 13,10,'$' 67
72 Contoh-Contoh Program Untuk Latihan Stacks DW? Proses: LEA DX,Kal MOV Stacks,DX MOV AH,09 INT 21h LEA DX,Ganti INT 21h MOV DX,Stacks INT 21h Exit : INT 20h END TData Program 24 ;/=====================================================================\; ; Program : STACK.ASM ; ; Fungsi : Mencetak kalimat 2 kali dengan operasi stack yang sebenarnya ; ;\=====================================================================/; TData : JMP Proses Kal DB 'LANG LING LUNG $' Ganti DB 13,10,'$' Stacks DW? Proses: LEA DX,Kal PUSH DX MOV AH,09 INT 21h LEA DX,Ganti INT 21h POP DX INT 21h Exit : INT 20h END TData Program 25 ;/===========================================\; ; Program : READKEY.ASM ; ; Fungsi : Input satu karakter dari keyboard. ; ;=============================================; ; INTERUPSI 16h ; ;=============================================; ; Input: OutPut: ; ; AH = 0 Jika tombol biasa, maka: ; ; AL = ASCII ; ; AH = SCAN ; ; ; 68
73 Contoh-Contoh Program Untuk Latihan ; Jika Tombol khusus, maka ; ; AL = 00 ; ; AH = Extended ; ;\===========================================/; TData : JMP Proses T_ASCII DB 13,10,'Ini adalah tombol ASCII : $' T_Extended DB 13,10,'Ini adalah tombol Extended $' Proses : MOV AH,0 ; Servis Input satu karakter INT 16h ; Laksanakan PUSH AX ; Simpan hasil pembacaan pada stack CMP AL,00 ; Apakah ini karakter extended? JE Extended ; Ya!, Lompat ke Extended ASCII: LEA DX,T_ASCII ; Ambil alamat efektif T_ASCII MOV AH,09 ; Servis cetak kalimat INT 21h ; Cetak kalimat! POP AX ; Ambil kembali nilai AX pada stack MOV DL,AL ; Ambil kode ASCII yang ditekan MOV AH,2 ; Servis cetak karakter INT 21h ; Cetak karakter! CMP AL,'Q' ; Apakah yang ditekan huruf 'Q'? JE exit ; Ya!, lompat ke Exit CMP AL,'q' ; Apakah yang ditekan huruf 'q'? JE exit ; Ya!, lompat ke Exit JMP Proses ; Lompat ke Proses Extended: LEA DX,T_Extended ; Ambil alamat efektif T_Extended MOV AH,09 ; Servis cetak kalimat INT 21h ; Cetak kalimat! JMP Proses ; Lompat ke Proses exit: INT 20h ; Kembali ke DOS! END TData Program 26 ;/================================================\; ; Program : KEYPRESS.ASM ; ; Fungsi : Mengecek apakah ada tombol yang ditekan ; ;==================================================; ; INTERUPSI 16h ; ;==================================================; ; Input: OutPut: ; ; AH = 1 Jika Ada tombol yang ditekan ; ; ZF = 0 dan ; ; AL = kode ASCII ; ; AH = Scan Code ; ; ; ; Jika Tidak ada penekanan Tombol ; ; ZF = 1 ; 69
74 Contoh-Contoh Program Untuk Latihan ;\===============================================/; TData : JMP Proses Kal0 DB 'Tekan sembarang tombol untuk berhenti! ' DB 13,10,'$' Proses : MOV AH,1 ; Servis untuk mengecek buffer keyboard INT 16h ; Laksanakan! JNZ EXIT ; Jika ada tombol yang ditekan, lompat ; Ke EXIT MOV AH,09 ; Servis untuk cetak kalimat LEA DX,Kal0 ; Ambil alamat efektif Kal0 INT 21h ; Cetak kalimat! JMP Proses ; Lompat ke Proses exit : INT 20h ; Kembali ke DOS! END TData Program 27 ;===========================================================; ; Program Masukan String Dari Keyboard ; ; Input: ; ; AH = 0Ah ; ; DS:DX = Penampung dengan spesifikasi: ; ; Byte 1 = Maksimum karakter yang dapat dimasukkan ; ; Byte 2 = Akan dijadikan Indikator banyaknya ; ; karakter yang dimasukkan ; ; Byte 3 keatas = Tempat hasil masukan ditampung ; ;\=========================================================/; TData : JMP Proses T_Enter EQU 0Dh Kal0 DB 'Ketikkan satu Kalimat : $' Kal1 DB 13,10,'Kalimat pada buffer : $' Buffer DB 23,?,23 DUP(?) Proses : MOV AH,09 LEA DX,Kal0 INT 21h ; Cetak kalimat Kal0 MOV AH,0Ah ; Servis Input kalimat LEA DX,Buffer ; DX menunjuk pada offset Buffer INT 21h ; Input kalimat! MOV AH,09 LEA DX,Kal1 INT 21h ; Cetak kalimat Kal1 LEA BX,Buffer+2 Ulang: CMP BYTE PTR [BX],T_Enter ; BX menunjuk byte ke 3 Buffer ; Apakah karakter Enter? 70
75 Contoh-Contoh Program Untuk Latihan JE EXIT MOV DL,[BX] MOV AH,02 INT 21h INC BX JMP Ulang ; Ya! Lompat ke Exit ; Masukkan karakter pada DL ; Servis cetak karakter ; Cetak karakter ; BX := BX+1 ; Lompat ke Ulang EXIT: INT 20h ; Kembali ke DOS! END TData Program 28 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; ; PROGRAM : PROC_KAR.ASM ; ; FUNGSI : MENCETAK KARATER DENGAN PROCEDURE ; ;=============================================; Proses : CALL Cetak_Kar INT 20h Cetak_Kar PROC NEAR MOV AH,02h MOV DL,'S' INT 21h RET Cetak_Kar ENDP ; Panggil Cetak_Kar ; Cetak karakter ; Kembali kepada si pemanggil ; END Procedures END Proses Program 29 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; ; PROGRAM : PROC_KA1.ASM ; ; FUNGSI : MENCETAK KARATER DENGAN PROCEDURE ; ;============================================; TData : JMP Proses Kar DB? Klm DB 'BATMAN SI MANUSIA KELELAWAR ' ; 28 Karakter Proses : MOV CX,28 XOR BX,BX Ulang : MOV DL,Klm[BX] MOV Kar,DL CALL Cetak_Kar INC BX LOOP Ulang ; Banyaknya pengulangan ; Addressing Mode ; Panggil Cetak_Kar 71
76 Contoh-Contoh Program Untuk Latihan INT 20h Cetak_Kar PROC NEAR PUSH AX PUSH DX MOV AH,02h MOV DL,Kar INT 21h POP DX POP AX RET Cetak_Kar ENDP ; Simpan semua register ; Yang digunakan ; Cetak karakter ; Kembalikan semua register ; Yang disimpan ; Kembali kepada si pemanggil ; END Procedures END TData Program 30 Cetak_Kar MACRO Kar MOV CX,3 MOV AH,02 MOV DL,Kar Ulang : INT 21h LOOP Ulang ENDM ; Cetak Karakter ; End Macro ; ; ; Program : MAC1.ASM ; ; Fungsi : Menggunakan Macro untuk mencetak huruf 'SSS' ; ; ; Proses: Cetak_Kar 'S' ; Cetak Huruf S INT 20h END Proses Program 31 Cetak_Kar MACRO Kar LOCAL Ulang MOV CX,3 MOV AH,02 MOV DL,Kar Ulang: INT 21h LOOP Ulang ENDM ; Label 'Ulang' jadikan Local ; Cetak Karakter ; End Macro ; ; ; Program : MAC2.ASM ; ; Fungsi : Menggunakan Macro Untuk mencetak huruf 'PPPCCC' ; ; ; 72
77 Contoh-Contoh Program Untuk Latihan Proses: Cetak_Kar 'P' Cetak_Kar 'C' ; Cetak Huruf P ; Cetak Huruf C INT 20h END Proses Program 32 Tulis_Kar MACRO X,Y,Kar,Attr MOV AX,0B800h MOV ES,AX MOV AH,Y MOV AL,160 MUL AH MOV BX,AX MOV AH,X MOV AL,2 MUL AH ADD BX,AX MOV AL,Kar MOV AH,Attr MOV ES:[BX],AL MOV ES:[BX+1],AH ENDM ; ES Menunjuk pada segment layar ; Hitung offset baris ; Simpan hasilnya pada BX ; Hitung offset kolom ; Tambahkan hasilnya pada BX ; AL=karakter yang akan ditampilkan ; AH=Atribut yang akan ditampilkan ; Tampilkan Karakter dan atributnya ; pada posisi kolom X dan baris Y ;/========================================================\; ; Program : LAYAR1.ASM ; ; Fungsi : Menampilkan karakter dan atributnya ; ; dengan menuliskannya langsung pada memory layar ; ;\========================================================/; Proses : Tulis_Kar 'S' 95 ; Tulis karakter 'S' dengan ; no atribut 95 pada posisi INT 20h ; kolom 40 dan baris 12 END Proses Program 33 Delay MACRO PUSH CX XOR CX,CX Loop1: LOOP Loop1 POP CX ENDM ; Macro ini digunakan untuk ; menunda program, dan ; hanya melakukan looping Geser MACRO PosY PUSH AX 73
78 Contoh-Contoh Program Untuk Latihan PUSH BX PUSH CX ; Simpan semua register yang digunakan XOR CX,CX MOV AL,26 SUB AL,PosY MOV CL,AL ; CX=banyaknya pergeseran kebawah Loop2: MOV AL,BYTE PTR ES:[BX] ; AL=Karakter pada layar MOV BYTE PTR ES:[BX+160],AL ; Geser ke bawah Hilang: MOV BYTE PTR ES:[BX],' ' ; Hapus karakter ; sebelumnya Delay ; delay, supaya bisa ; terlihat ADD BX,160 ; Menuju baris selanjutnya LOOP Loop2 ; Ulangi ke Loop2 ENDM POP CX POP BX POP AX ; Kembalikan semua register yang digunakan ;/===================================================\; ; Program : RONTOK.ASM ; ; Fungsi : Membersihkan layar dengan cara ; ; merontokkan hurufnya satu persatu ; ;\====================================================/ TData : JMP Proses PosY DB? Proses: MOV AX,0B800h MOV ES,AX ; ES mencatat segment layar MOV BX,3998 ; Posisi karakter 80,25 MOV CX,25 ; Banyaknya pengulangan baris UlangY : MOV PosY,CL ; PosY mencatat posisi baris PUSH CX ; CX mencatat posisi Y MOV CX,80 ; Banyaknya pengulangan Kolom UlangX : CMP BYTE PTR ES:[BX],33 ; Apakah ada karakter ; pada layar? JB Tdk ; Lompat ke Tdk, jika tidak ada Geser PosY ; Geser karakter tersebut ke bawah Tdk : SUB BX,2 ; BX menunjuk karakter selanjutnya LOOP UlangX ; Proses 80 kali untuk kolom POP CX ; Ambil posisi Y LOOP UlangY ; Ulangi dan ganti baris ke atas EXIT: INT 20h 74
79 Contoh-Contoh Program Untuk Latihan END TData Program 34 DELAY MACRO LOCAL Ulang PUSH CX XOR CX,CX Ulang: LOOP Ulang POP CX ENDM Scrool MACRO X1,Y1,X2,Y2,Arah PUSH CX MOV AH,Arah MOV AL,1 MOV CL,X1 MOV CH,Y1 MOV DL,X2 MOV DH,Y2 MOV BH, b INT 10h POP CX ENDM ; Macro untuk menunda program ; Servis Gulung keatas atau kebawah ; Jumlah Baris ; Kolom kiri atas ; Baris kiri Atas ; Kolom kanan bawah ; Baris kanan bawah ; Atribut hasil penggulungan ;/===============================================\; ; Program : SCROOL.ASM ; ; Fungsi : Menggulung layar ; ;\===============================================/; TData : JMP Proses G_Atas EQU 6 G_Bawah EQU 7 Proses: MOV CX,7 Ulang: Scrool G_Bawah delay LOOP Ulang INT 20h END TData Program 35 Cls MACRO MOV AX,0600h XOR CX,CX MOV DX,184Fh MOV BH,10 INT 10h ENDM GotoXY MACRO X,Y MOV AH,02 XOR BX,BX ; Servis untuk menggulung ke atas ; Servis untuk menggulung ke bawah ; Macro untuk menghapus layar ; Atribut Hijau diatas hitam ; Macro untuk memindahkan kursor 75
80 Contoh-Contoh Program Untuk Latihan MOV DH,Y MOV DL,X INT 10h ENDM SimpanL MACRO LOCAL Ulang MOV AX,0B800h MOV ES,AX MOV CX,4000 XOR BX,BX Ulang: MOV AL,ES:[BX] MOV Layar[BX],AL INC BX LOOP Ulang ENDM BalikL MACRO LOCAL Ulang MOV CX,4000 XOR BX,BX Ulang: MOV AL,Layar[BX] MOV ES:[BX],AL INC BX LOOP Ulang ENDM Sorot MACRO X,Y LOCAL Ulang ; Macro untuk menyimpan seluruh ; isi layar monitor ; Macro untuk mengembalikan semua ; isi layar yang telah disimpan ; Macro untuk membuat sorotan ; pada menu MOV BL,Y MOV AL,160 MUL BL MOV BX,AX MOV AL,X MOV AH,2 MUL AH ADD BX,AX INC BX MOV CX,25 Ulang: MOV BYTE PTR ES:[BX],4Fh ADD BX,2 LOOP Ulang ENDM Readkey MACRO MOV AH,00 INT 16h ENDM MenuL MACRO String MOV AH,09 ; Alamat warna pada posisi X,Y ; Panjangnya sorotan ; Atribut sorotan ; putih diatas merah ; Macro untuk membaca masukan dari ; keyboard. ; hasilnya AH=Extended, AL=ASCII ; Macro untuk mencetak menu 76
81 Contoh-Contoh Program Untuk Latihan LEA DX,String INT 21h ENDM ;/===================================================\; ; Program : SOROT.ASM ; ; Fungsi : Membuat menu sorot untuk digunakan program ; ;\===================================================/; TData: JMP Proses Layar DB 4000 DUP (?) Menu DB 9,9,'+=============================+',13,10 DB 9,9,' MENU SOROT «««',13,10 DB 9,9,'+=============================+',13,10 DB 9,9,' ',13,10 DB 9,9,' 1. Pilihan pertama ',13,10 DB 9,9,' 2. Pilihan Kedua ',13,10 DB 9,9,' 3. Pilihan Ketiga ',13,10 DB 9,9,' 4. Pilihan Keempat ',13,10 DB 9,9,' ',13,10 DB 9,9,'+=============================+$' PosX DB 22 ; Posisi kolom mula-mula PosY DB 12 ; Posisi baris mula-mula Panah_Atas EQU 72 ; Kode tombol panah atas Panah_Bawah EQU 80 ; Kode tombolpanah bawah TEnter EQU 0Dh ; Kode tombol Enter Proses : Cls ; Hapus layar GotoXY 0 8 ; kursor = 0,8 MenuL Menu ; Gambar menu SimpanL ; Simpan isi layar Ulang : BalikL ; Tampilkan isi layar yang ; disimpan Sorot PosX,PosY ; Sorot posisi X,Y Masukan: Readkey ; Baca masukan dari keyboard CMP AH,Panah_Bawah ; Panah bawah yang ditekan? JE Bawah ; Ya! lompat bawah CMP AH,Panah_Atas ; Panah atas yang ditekan? JE CekY ; Ya, lompat CekY CMP AL,TEnter ; Tombol enter yang ditekan? JNE Masukan ; Bukan, lompat ke ulangi JMP Selesai ; Ya, lompat ke selesai CekY : CMP PosY,12 ; Apakah sorotan paling atas? JE MaxY ; Ya! lompat ke MaxY DEC PosY ; Sorotkan ke atas JMP Ulang ; Lompat ke ulang MaxY : MOV PosY,15 ; PosY=Sorotan paling bawah 77
82 Contoh-Contoh Program Untuk Latihan JMP Ulang ; lompat ke ulang Bawah : CMP PosY,15 ; apakah sorotan paling bawah? JE NolY ; Ya! lompat ke NolY INC PosY ; Sorotkan ke bawah JMP Ulang ; Lompat ke ulang NolY : MOV PosY,12 ; Sorotan paling atas JMP Ulang ; Lompat ke ulang Selesai: INT 20h END TData Program 36 Delay MACRO Rep LOCAL Ulang PUSH CX MOV DX,Rep SUB CX,CX Ulang: LOOP Ulang DEC DX CMP DX,0 JNZ Ulang POP CX ENDM Ak_Page MACRO No MOV AH,5 MOV AL,No INT 10h ENDM ; Macro ini untuk menunda program ; Macro ini digunakan untuk ; mengaktifkan halaman layar ;/==================================================\; ; Program : PAGE.ASM ; ; Fungsi : Untuk mengaktifkan halaman layar tertentu ; ;\==================================================/; TData : JMP Proses Kal0 DB 'INI ADALAH HALAMAN TAMPILAN KE 2 ',13,10 DB ' DENGAN ALAMAT AWAL B800:1000h!!! $' Proses: Ak_Page 2 ; Aktifkan halaman layar yang ke 2 MOV AH,09 ; LEA DX,Kal0 ; Tulis kalimat pada halaman ke 2 INT 21h ; MOV CX,3 ; Banyaknya pengulangan Ulang: Ak_Page 2 ; Aktifkan halaman ke 2 Delay 100 Ak_Page 0 ; Aktifkan halaman ke 0 Delay 100 LOOP Ulang 78
83 Contoh-Contoh Program Untuk Latihan INT 20h END Tdata Program 37 ;/=====================================================================\; ; Program : MAP.ASM ; ; Fungsi : Untuk merubah bentuk karakter yang biasa digunakan. ; ; Huruf 'A', akan diubah bentuknya menjadi berbentuk pedang! ; ;\=====================================================================/; TData : JMP Proses Tabel DB b DB b DB b DB b DB b DB b DB b DB b DB b DB b DB b DB b DB b DB b DB b DB b Proses : MOV AX,1100h MOV DX,'A' MOV CX,1 MOV BL,0 MOV BH,16 LEA BP,Tabel INT 10h ; ; ; _ ; ; _ ; ; ; ; ; ; ; ; ; ; ; _ ; Servis ; Karakter ASCII awal yang akan diganti ; Banyaknya karakter yang akan diganti ; Nomor blok pemuatan karakter ; Jumlah byte perkarakter ; Lokasi tabel INT 20h END TData Program 38 ORG 100H START: JMP MULAI JUDUL DB,13,10, $ JUDUL1 DB PROGRAM SUARA,13,10, $ JUDUL2 DB TEKAN S UNTUK KELUAR,13,10, $ JUDUL3 DB,13,10, $ 79
84 Contoh-Contoh Program Untuk Latihan MULAI: MOV AH,0 MOV AL,3 INT 10H ; MOV AH,09H MOV BH,0 MOV BL,09H MOV CX,25 LEA DX,JUDUL INT 21H ;INT 10h service 0, mode screen ;80 huruf x 25 baris (text), berwarna MOV AH,09H MOV BH,0 MOV BL,0AH MOV CX,25 LEA DX,JUDUL1 INT 21H MOV AH,09H MOV BH,0 MOV BL,0CH MOV CX,25 LEA DX,JUDUL2 INT 21H MOV AH,09H MOV BH,0 MOV BL,0EH MOV CX,25 LEA DX,JUDUL3 INT 21H IN AL,61H OR AL,3 OUT 61H,AL MOV AL, B OUT 43H,AL SUARA: MOV AX, /200 OUT 42H,AL MOV AL,AH OUT 42H,AL MOV AH,06 MOV DL,0FFH INT 21H CMP AL,'S' JE KELUAR CMP AL,'s' JNE SUARA KELUAR: IN AL,61H AND AL, B OUT 61H,AL INT 20H END START 80
85 Contoh-Contoh Program Untuk Latihan Program 39 ;========================================; ; Program menampilkan huruf alfabet ; ;========================================;.model small.code org 100h start: jmp mulai abjad db 'Tampilan Huruf Alfabet',13,10,'$' mulai: mov ah,09h mov dx,offset abjad int 21h mov cx,9 mov bl,1 mov ah,02h a: mov dl,bl add dl,30h int 21h mov dl,2eh int 21h mov dl,20h int 21h mov dh,41h mov bh,26 b: mov dl,dh int 21h mov dl,20h int 21h inc dh dec bh cmp bh,0 jnz b mov dl,0ah int 21h mov dl,0dh int 21h inc bl loop a int 20h end start Program 40.model small.code org 100h start: jmp mulai kata1 db 'Masukkan kunci anda di sini :$' kata2 db 13,10,'Bagus... Kunci anda benar!!$' mulai: mov ah,09h mov dx, offset kata1 int 21h masuk: 81
86 Contoh-Contoh Program Untuk Latihan mov ah,07h int 21h cmp al,'a' je lewat1 cmp al,'a' jne masuk lewat1: mov ah,07h int 21h cmp al,'k' je lewat2 cmp al,'k' jne masuk lewat2: mov ah,07h int 21h cmp al,'u' je lewat3 cmp al,'u' jne masuk lewat3: mov ah,09h mov dx,offset kata2 int 21h int 20h end start Program 41.model small.code org 100h start: jmp mulai tanya db ' Siapa Nama anda?' db 13,10,'Jawab Di sini :$' tampung db 21,?,21 dup (?) jawab db 13,10,'Bagus Nama anda adalah : $' mulai: mov ah,09h mov dx,offset tanya int 21h mov ah,0ah mov dx,offset tampung push dx int 21h mov bx,offset tampung inc bx mov dl,[bx] xor dh,dh inc bx add bx,dx mov dl,'$' mov [bx],dl mov dx,offset jawab 82
87 Contoh-Contoh Program Untuk Latihan mov ah,09h int 21h pop dx inc dx inc dx mov ah,09h int 21h int 20h end start Program 42.model small.code org 100h start: jmp mulai gam db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' ' db ' Tekan Sembarang Tombol Untuk Ke DOS ' db ' ' db ' ' mulai: mov ax,0b800h mov es,ax mov bx,offset gam xor di,di ulang: mov ah,1fh mov al,[bx] stosw inc bx mov al,[bx] cmp al,0 jne ulang ulang1: mov ah,12 mov al,[bx] stosw inc bx mov al,[bx] cmp al,1 jne ulang1 ulang2: mov ah,13 mov al,[bx] stosw inc bx 83
88 Contoh-Contoh Program Untuk Latihan sel: code mov al,[bx] cmp al,2 jne ulang2 mov ah,01h int 16h jz sel int 20h ends end start 84
89 KODE ASCII 7 KODE ASCII 7.1 HEXADESIMAL 7.2 DESIMAL 85
BAB 3 MODE AKSES MEMORI, PENGGUNAAN VARIABEL DAN STACK
BAB 3 MODE AKSES MEMORI, PENGGUNAAN VARIABEL DAN STACK Pengaksesan memori yang dibicarakan dalam bab ini meliputi memori internal prosesor yang biasa disebut sebagai register dan memori di luar prosesor.
LAPORAN PRAKTIKUM ORGANISASI KOMPUTER & BAHASA ASSEMBLY PROGRAM POINTER OPERASI ARITMATIKA
LAPORAN PRAKTIKUM ORGANISASI KOMPUTER & BAHASA ASSEMBLY PROGRAM POINTER OPERASI ARITMATIKA Kelas : INF 2B Praktikum 1 Nama : Fernalia NIM : J3C212210 PROGRAM KEAHLIAN MANAJEMEN INFORMATIKA DIREKTORAT PROGRAM
MODUL I PENGENALAN ASSEMBLY
MODUL I PENGENALAN ASSEMBLY Apakah bahasa assembly? Bahasa assembly adalah bahasa pemrograman dengan korespondensi satu-satu antara perintahperintah/pernyataannya dan bahasa mesin komputer. Bahasa assembly
PENGERTIAN REGISTER. Arsitektur Mikroprosesor INTEL 8086 Tinjauan Umum
PENGERTIAN REGISTER Dalam pemrograman dengan bahasa Assembly, mau tidak mau anda harus berhubungan dengan apa yang dinamakan sebagai Register. Lalu apakah yang dimaksudkan dengan register itu sebenarnya?.
MODUL PRAKTIKUM ORGANISASI SISTEM KOMPUTER
MODUL PRAKTIKUM ORGANISASI SISTEM KOMPUTER Versi 3.0 Tahun Penyusunan 2011 Tim Penyusun 1. Yuti Dewita Arimbi 2. Nurul Hidayati 3. Ulfie Hasanah 4. Stya Putra Pratama Laboratorium Teknik Informatika Jurusan
LAPORAN PRAKTIKUM ORGANISASI KOMPUTER & BAHASA ASSEMBLY PROGRAM OPERASI ARITMATIKA. Kelas : INF 2B Praktikum 1 Nama : Fernalia NIM : J3C212210
LAPORAN PRAKTIKUM ORGANISASI KOMPUTER & BAHASA ASSEMBLY PROGRAM OPERASI ARITMATIKA Kelas : INF 2B Praktikum 1 Nama : Fernalia NIM : J3C212210 PROGRAM KEAHLIAN MANAJEMEN INFORMATIKA DIREKTORAT PROGRAM DIPLOMA
Bahasa Rakitan By Okti Yudhanti Nur K REGISTER
REGISTER PENGERTIAN REGISTER Dalam pemrograman dengan bahasa Assembly, mau tidak mau anda harus berhubungan dengan apa yang dinamakan sebagai Register. Lalu apakah yang dimaksudkan dengan register itu
ORGANISASI DAN ARSITEKTUR KOMPUTER. rsp oak informatika
ORGANISASI DAN ARSITEKTUR KOMPUTER rsp oak informatika 1 Microprocessor Intel 80x86 rsp oak informatika 2 Central Processing Unit (CPU) CPU merupakan eupa a prosesor untuk memproses data Terpusat (central)
OPERATION SYSTEM. Jenis - Jenis Register Berdasarkan Mikroprosesor 8086/8088
OPERATION SYSTEM Nama : Dian Fahrizal Nim : 110170096 Unit : A3 Jenis - Jenis Register Berdasarkan Mikroprosesor 8086/8088 Mikroprosesor 8086/8088 memiliki 4 register yang masing-masingnya terdiri dari
MIKROPROSESOR REGISTER-REGISTER MIKROPROSESOR INTEL
Perguruan Tinggi Mitra Lampung MIKROPROSESOR REGISTER-REGISTER MIKROPROSESOR INTEL 8086 Erwin Ardianto, S.T FLAG REGISTER 8086 memiliki flag register dengan panjang16-bit. Dari 16-bit itu terdapat 9 bendera
REGISTER Register-register yang terdapat pada mikroprosesor, antara lain :
REGISTER Register adalah sebagian memori dari mikroprosesor yang dapat diakses dengan kecepatan yang sangat tinggi. Register-register yang terdapat pada mikroprosesor, antara lain : General purpose register
BAB V MEMULAI DENGAN ASSEMBLY
BAB V MEMULAI DENGAN ASSEMBLY 5.1. TEXT EDITOR Untuk menuliskan source file untuk program assembly bisa anda gunakan berbagai editor, misalkan SideKick, WordStar dan Word Perfect. Source file yang diketikkan
R E G I S T E R. = Code Segment Register = Data Segment Register = Stack Segment Register = Extra Segment Register. 3.
R E G I S T E R Register adalah sebagian kecil memori komputer yang dipakai untuk tempat penampungan data dengan ketentuan bahwa data yang terdapat dalam register dapat diproses dalam berbagai operasi
Mikroprosesor. Bab 3: Arsitektur Mikroprosesor. INTEL 8086 Generasi Awal Prosesor PENTIUM. Arsitektur Mikroprosesor 1
Mikroprosesor Bab 3: Arsitektur Mikroprosesor Generasi Awal Prosesor PENTIUM Arsitektur Mikroprosesor 1 20 bit Arsitektur Mikroprosesor 16 bit Register Antrian (FIFO) Arsitektur Mikroprosesor 2 Prosesor
OF DF IF TF SF ZF AF PF CF
MODUL II THE PROCESSOR STATUS AND FLAGS REGISTER Flags register merupakan register yang digunakan untuk menunjukkan kondisi dari suatu keadaan (ya atau tidak). Registr ini juga merupakan register 16 bit
MODUL V STACK dan PENGENALAN PROCEDURE
MODUL V STACK dan PENGENALAN PROCEDURE Stack Stack merupakan bagian memori yang digunakan untuk menyimpan nilai dari suatu register secara sementara. Operasi stack dinamakan juga LIFO (Last In First Out).
Bahasa Rakitan PENGERTIAN REGISTER
PENGERTIAN REGISTER Dalam pemrograman dengan bahasa Assembly, mau tidak mau anda harus berhubungan dengan apa yang dinamakan sebagai register. Lalu apakah yang dimaksud dengan register itu sebenarnya?
Mata Kuliah : Bahasa Rakitan Materi ke-3
Mata Kuliah : Bahasa Rakitan Materi ke-3 Struktur Register REGISTER Register adalah sebagian kecil memory komputer yang dipakai i untuk tempatt penampungan dt data. Data yang terdapat dalam register dapat
MAKALAH REGISTER. Disusun Untuk Memenuhi Tugas Pada Semester 3 Jurusan D3 Teknik Elektro Dengan Mata Kuliah Sistem Digital & Mikroprosessor
MAKALAH REGISTER Disusun Untuk Memenuhi Tugas Pada Semester 3 Jurusan D3 Teknik Elektro Dengan Mata Kuliah Sistem Digital & Mikroprosessor Disusun Oleh : Nisvi Fatimah 2213030006 INSTITUT TEKNOLOGI SEPULUH
SISTEM KERJA MIKROPROSESOR
1 SISTEM KERJA MIKROPROSESOR Percobaan I Tujuan Percobaan 1. Mempelajari hubungan bahasa tingkat rendah dengan arsitektur mikroprosesor. 2. Memahami konsep pemograman modular dan pengolahan data dalam
Menggunakan Bahasa Pemrograman Assembly
BAGIAN 1 Tujuan Pembelajaran Umum: 1. Mahasiswa trampil menggunakan bahasa pemrograman assembly Tujuan Pembelajaran Khusus: 1. Mahasiswa memahami konstruksi program assembly 2. Mahasiswa memahami proses
Kuis : Bahasa Rakitan (UAS)
Kuis : Bahasa Rakitan (UAS) Nama NIM Kelas :.. :.. :.. (Jawaban dikerjakan pada lembar soal ini, dikumpulkan melalui asisten dengan print out paling lambat dan email ke [email protected]) Teknis pengumpulan
IMPLEMENTASI PENGISIAN REGISITER DATA DAN OPERASI ARITMATIKA MENGGUNAKAN PROGRAM COMMAND PROMPT, BAHASA ASSEMBLER
IMPLEMENTASI PENGISIAN REGISITER DATA DAN OPERASI ARITMATIKA MENGGUNAKAN PROGRAM COMMAND PROMPT, BAHASA ASSEMBLER Hambali Program Studi Sistem Informasi, STMIK Logika Medan email: [email protected]
Daftar Isi. Daftar Isi Pertemuan 6: Perintah Masukkan dari Keyboard P6.1. Teori Masukkan dari Keyboard... 3
Daftar Isi Daftar Isi... 1 Pertemuan 6: Perintah Masukkan dari Keyboard... 2 P6.1. Teori... 3 Masukkan dari Keyboard... 3 Masukkan Satu Karakter... 4 Masukkan Lebih Dari Satu Karakter... 7 Interrupt...
PEMROGRAMAN BAHASA RAKITAN
BUKU AJAR PEMROGRAMAN BAHASA RAKITAN oleh : Adian Fatchur Rochim, ST, MT Program Studi Sistem Komputer Fakultas Teknik Universitas Diponegoro 2009 KATA PENGANTAR Puji syukur dipanjatkan kehadirat Allah
PERTEMUAN : 4 EKSPLORASI DEBUG
PERTEMUAN : 4 EKSPLORASI DEBUG Jurusan Teknik Informatika STT PLN [email protected] Riki Ruli S - http://blogriki.wordpress.com A ( Assemble/Address) : Memulai pembuatan program assembly dengan Debug
Instruksi-Instruksi Pemindahan Data. Sistem Komputer Universitas Gunadarma
Instruksi-Instruksi Pemindahan Data Sistem Komputer Universitas Gunadarma Sekilas Tentang MOV Intruksi MOV diperkenalkan bersamasama dengan instruksi bahasa mesin yang dapat digunakan dalam bermacammacam
Karakteristik Instruksi Mesin
PERTEMUAN Karakteristik Instruksi Mesin Instruksi mesin (machine intruction) yang dieksekusi membentuk suatu operasi dan berbagai macam fungsi CPU. Kumpulan fungsi yang dapat dieksekusi CPU disebut set
Microcontroller: Bahasa Pemrograman Assembly 8051
Microcontroller: Bahasa Pemrograman Assembly 8051 Oleh: Ali Sofyan Kholimi Universitas Muhammadiyah Malang E-Mail / IM: [email protected] Blog: http://kholimi-id.blogspot.com Tujuan Belajar Mendaftar register
PETA MEMORI MIKROPROSESOR 8088
1. Bagan Dasar µp 8088 PETA MEMORI MIKROPROSESOR 8088 Gambar 1. Bagan Dasar µp 8088 Elemen didalam mikroprosesor adalah : CU (Control Unit) adalah manajer dari semua unit. CU mengatur keselarasan kerja
Materi 3. Komponen Mikrokomputer SYSTEM HARDWARE DAN SOFTWARE DADANG MULYANA
Materi 3 SYSTEM HARDWARE DAN SOFTWARE DADANG MULYANA dadang mulyana 2012 1 Komponen Mikrokomputer Video display (jenis dan resolusi) Keyboard Drive Disk Unit system Prosessor Pendukung dadang mulyana 2012
BAB 3 UNIT KONTROL. Universitas Gadjah Mada 1
BAB 3 UNIT KONTROL Unit kontrol bertanggung jawab atas terbentuknya operasi yang sesuai dengan instruksi yang terdapat pada program. Eksekusi instruksi dilakukan satu persatu, dimulai dari awal program,
Pertemuan ke 7 Mode Pengalamatan. Computer Organization Eko Budi Setiawan
Pertemuan ke 7 Mode Pengalamatan Computer Organization Eko Budi Setiawan Mode Pengalamatan Mengatasi keterbatasan format instruksi Dapat mereferensi lokasi memori yang besar Mode pengalamatan yang mampu
BAHASA PEMOGRAMAN AT89S/Cxx (assembly)
1 BAHASA PEMOGRAMAN AT89S/Cxx (assembly) Operand dalam pemograman mikrokontroler adalah data yang tersimpan dalam memory, register dan input/output (I/O). Instruksi yang dikenal secara umum dikelompokan
Bab 1. Pemrograman dan Bahasa Rakitan. 1.1 Pendahuluan
Bab 1 Pemrograman dan Bahasa Rakitan 1.1 Pendahuluan Komputer dalam melaksanakan tugasnya tidak dapat dipisahkah dari peralatan lainnya yang mendukung kegiatan kerja komputer secara menyeluruh. Di samping
Pada pembahasan kali ini, digunakan instruksi MOV untuk menjelaskan mode pengalamatan data. Format penulisannya adalah :
Pada pembahasan kali ini, digunakan instruksi MOV untuk menjelaskan mode pengalamatan data. Format penulisannya adalah : MOV Reg2,Reg1 MOV disebut sebagai opcede Reg1 dan Reg2 disebut sebagai operand Reg1
Daftar Isi. Daftar Isi Pertemuan 3: Pengenalan TASM P3.1. Teori Pengenalan Turbo Assembler Struktur Program...
Daftar Isi Daftar Isi... 1 Pertemuan 3: Pengenalan TASM... 2 P3.1. Teori... 3 Pengenalan Turbo Assembler... 3 Struktur Program... 4 Membuat Program Menggunakan TASM... 6 Variabel... 8 Addressing Modes...
BAB II LANDASAN TEORI LANDASAN TEORI
BAB II LANDASAN TEORI LANDASAN TEORI 2.1 Bahasa-Bahasa Komputer Pemakaian Komputer dewasa ini telah sedemikian pesatnya sejalan dengan kemajuan teknologi Komputer itu sendiri. Berbagai bidang seperti Industri,
INTRUKSI-INTRUKSI BAHASA PEMROGRAMAN ASSEMBLY
INTRUKSI-INTRUKSI BAHASA PEMROGRAMAN ASSEMBLY Mubtasir [email protected] Abstrak Program yang ditulis dengan bahasa Assembly terdiri dari label, kode mnemonic dan lain sebagainya, pada umumnya dinamakan
PERTEMUAN SET INSTRUKSI MIKROKONTROLER AT 89C51
PERTEMUAN SET INSTRUKSI MIKROKONTROLER AT 89C51 Pendahuluan Dalam materi sebelumnya sudah di bahas untuk menjalankan suatu tugas maka mikrokontroler 89C51 membutuhkan sebuah program yang terdiri dari susunan
Mode Pengalamatan. Sistem Komputer Universitas Gunadarma
Mode Pengalamatan Sistem Komputer Universitas Gunadarma Mode Pengalamatan Data Gambar 3.1 Intruksi MOV yang menggambarkan sumber, tujuan dan aliran data. Gambar 3.2 menggambarkan semua variasi yang mungkin
Mikroprosesor. Pertemuan 8. By: Augury
Mikroprosesor Pertemuan 8 By: Augury [email protected] Sinyal pada Mode Maksimum Status siklus bus Status siklus bus ( S0, S1, S2 ) Sinyal ini merupakan keluaran yang akan diberikan oleh IC lain
Daftar Isi. Daftar Isi Pertemuan 4: Operator Aritmatika, Logika dan Instruksi Banding dan Lompatan P4.1. Teori... 3
Daftar Isi Daftar Isi... 1 Pertemuan 4: Operator Aritmatika, Logika dan Instruksi Banding dan Lompatan... 2 P4.1. Teori... 3 Operasi Aritmatika... 3 Operasi Logika... 8 Pergeseran Bit... 11 Instruksi Banding...
BAB VII KOMPUTER SEDERHANA SAP-3 (SIMPLE AS POSSIBLE-3)
Tony Darmanto, ST / IV / TI / STMIK Widya Dharma / Hal 1 BAB VII KOMPUTER SEDERHANA SAP-3 (SIMPLE AS POSSIBLE-3) 7.1. Model Pemrograman Komputer SAP-3 adalah komputer 8-bit yang memiliki keselarasan (compatibel)
KONFIGURASI PIN-PIN MIKROPROSESOR Z 80. Yoyo somantri Dosen Jurusan Pendidikan Teknik Elektro FPTK Universitas Pendidikan Indonesia
KONIGURASI PIN-PIN MIKROPROSESOR Z 80 Yoyo somantri Dosen Jurusan Pendidikan Teknik Elektro PTK Universitas Pendidikan Indonesia 1. Konfigurasi Pengelompokan pin pin dari mikroprosesor Z80 dapat dilihat
MODUL BAHASA RAKITAN PENDIDIKAN INFORMATIKA
MODUL BAHASA RAKITAN PENDIDIKAN INFORMATIKA PRODI PENDIDIKAN INFORMATIKA FAKULTAS ILMU PENDIDIKAN 2016 1 MODUL I REGISTER I. Tujuan Praktikan dapat mengerti dan memahami tentang Register Praktikan dapat
LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR APLIKASI DASAR INSTRUKSI ARITMATIKA DAN OPERASI LOGIK
LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR APLIKASI DASAR INSTRUKSI ARITMATIKA DAN OPERASI LOGIK Disusun oleh : Nama : Yudi Irwanto (021500456) Prodi : Elektronika Instrumentasi Tanggal Praktikum : 6 April
Mata Kuliah : Bahasa Rakitan
Mata Kuliah : Bahasa Rakitan Materi ke-4 Program Bahasa Rakitan dengan DEBUG.COM Perintah dan Fungsi dalam DEBUG.COM DEBUG, menjalankan program DEBUG : A> DEBUG nama file. COM Q (Quit), keluar dari program
Daftar Isi. Daftar Isi Pertemuan 2: Pengenalan Debug dan Interrupt P2.1. Teori Pengenalan DEBUG... 3
Daftar Isi Daftar Isi... 1 Pertemuan 2: Pengenalan Debug dan Interrupt... 2 P2.1. Teori... 3 Pengenalan DEBUG... 3 Perbedaan Program COM dan EXE... 3 Perintah-perintah Dasar DEBUG... 4 Perintah-perintah
Diktat Kuliah Organisasi dan Interaksi
Mikroprosesor dan Antarmuka Diktat Kuliah Organisasi dan Interaksi Nyoman Bogi Aditya Karna Sisfo IMelkom [email protected] http://bogi.blog.imtelkom.ac.id Institut Manajemen elkom http://www.imtelkom.ac.id
Secara fisik, kerja dari sebuah mikrokontroler dapat dijelaskan sebagai siklus
Bahasa Assembler Secara fisik, kerja dari sebuah mikrokontroler dapat dijelaskan sebagai siklus pembacaan instruksi yang tersimpan didalam memori. Mikrokontroler menentukan alamat dari memori program yang
Sistem Komputer. Komputer terdiri dari CPU, Memory dan I/O (Arsitektur Von-Neumann) Ada tiga bus dalam sistem komputer
ELEKTRONIKA DIGITAL TEORI ANTARMUKA Sistem Komputer Komputer terdiri dari CPU, Memory dan I/O (Arsitektur Von-Neumann) Komponen komputer dihubungkan oleh bus. Ada tiga bus dalam sistem komputer Alamat
Set Instruksi & Mode Pengalamatan. Team Dosen Telkom University 2016
Set Instruksi & Mode Pengalamatan Team Dosen Telkom University 2016 Karakteristik Instruksi Mesin Set intruksi adalah kumpulan lengkap dari instruksi yang dapat dieksekusi oleh CPU Set instruksi adalah
Bahasa Pemrograman Assembler 8051
Bahasa Pemrograman Assembler 8051 A. Struktur Bahasa Assembler Program bahasa assembly berisikan : 1. Instruksi instruksi mesin 2. pengarah pengarah assembler 3. kontrol kontrol assembler 4. komentar komentar
BAB IV IMPLEMENTASI DAN PENGUJIAN IMPLEMENTASI DAN PENGUJIAN
BAB IV IMPLEMENTASI DAN PENGUJIAN IMPLEMENTASI DAN PENGUJIAN Perintah-perintah Mikroprosesor INTEL 8088/8086 yang didukung di dalam perangkat lunak ini adalah modus pengalamatan (MOV), penjumlahan (ADD),
MODE PENGALAMATAN PROGRAM MEMORI
MODE PENGALAMATAN PROGRAM MEMORI Mode pengalamatan program memori menggunakan instruksi JMP dan CALL, terdiri dari tiga bentuk yang berbeda: langsung, relatif, dan tak langsung. Bagian ini mengenal tiga
PERINTAH-PERINTAH DASAR (UMUM)
PERINTAH-PERINTAH DASAR (UMUM) Data movement instruction Pada setiap program kita akan menghadapi pemindahan data antara memory dan register CPU pemindahan tersebut bisa dari memory ke beberapa register,
LAPORAN PRAKTIKUM. Praktek Mikroprosesor 1 Job Sheet 2
LAPORAN PRAKTIKUM Instruksi Aritmatika dan Operasi Logika Praktek Mikroprosesor 1 Job Sheet 2 Nama : DENNY SETIAWAN NIM : 3201311036 Kelas : V B Kelompok : 1 Anggota Kelompok : Denny Setiawan Ranto susilo
BAB VIII OPERASI ARITMATIKA
BAB VIII OPERASI ARITMATIKA 8.1. OPERASI PENAMBAHAN 8.1.1. ADD Untuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC serta INC. Perintah ADD digunakan dengan syntax : ADD Tujuan,Asal Perintah
SATUAN ACARA PERKULIAHAN Mata Kuliah: BAHASA RAKITAN Jurusan / Jenjang / Kode / SKS : SI / D3 / KK /2
SATUAN ACARA PERKULIAHAN Mata Kuliah: BAHASA RAKITAN Jurusan / Jenjang / Kode / SKS : SI / D3 / KK-13223 /2 Minggu Pokok Bahasan dan TIU 1 Pendahuluan 1. Karakteristik Bahasa Rakitan 1.1. Posisi Bahasa
Diktat Kuliah intel 8088
Mikroprosesor dan Antarmuka Diktat Kuliah intel 888 Nyoman Bogi Aditya Karna Sisfo IMTelkom [email protected] http://bogi.blog.imtelkom.ac.id Institut Manajemen Telkom http://www.imtelkom.ac.id Bagan
Set Instruksi: Set instruksi?
Set Instruksi: 1 Set instruksi? Operasi dari CPU ditentukan oleh instruksiinstruksi yang dilaksanakan atau dijalankannya. Instruksi ini sering disebut sebagai instruksi mesin (machine instructions) atau
MODUL III FLOW CONTROL INSTRUTIONS
MODUL III FLOW CONTROL INSTRUTIONS Intruksi lompatan (jump) dan perulangan (loop) digunakan untuk pengambilan keputusan dan mengulang bagian-bagian kode. Untuk mengontrol instruksi lompatan (jump) dan
BAHASA PEMROGRAMAN MIKROKOMPUTER
BAHASA MESIN BAHASA PEMROGRAMAN MIKROKOMPUTER PROGRAM BAHASA MESIN Sebuah program diperlukan saat mikrokomputer digunakan untuk melaksanakan sederetan operasi (menghitung, memasukkan dan mengeluarkan data)
PEMROGRAMAN 8085 Kelompok Instruksi Email : [email protected] [email protected]@gmail Web Site : www.salahuddinali.com Kelompok Instruksi Transfer Data MOV MVI transfer data transfer
PROGRAM STUDI TEKNIK KOMPUTER JURUSAN TEKNIK KOMPUTER POLITEKNIK NEGERI SRIWIJAYA PALEMBANG TK Praktikum Bahasa Rakitan Hand On Lab 4
Jl Srijaya Negara Bukit Besar Palembang 30139, Telpon : +62711 353414 PROGRAM STUDI TEKNIK KOMPUTER JURUSAN TEKNIK KOMPUTER POLITEKNIK NEGERI SRIWIJAYA PALEMBANG TK Praktikum Bahasa Rakitan Hand On Lab
Konsep Mikroprogramming. Sistem Komputer Universitas Gunadarma
Konsep Mikroprogramming Sistem Komputer Universitas Gunadarma Struktur Register µp Model programming 8086 sampai Pentium Pro menggunakan program visible karena registerregisternya digunakan langsung dalam
BAB III ALGORITMA DAN PERANCANGAN ALGORITMA DAN PERANCANGAN
BAB III ALGORITMA DAN PERANCANGAN ALGORITMA DAN PERANCANGAN Model proses pengembangan perangkat lunak yang penulis gunakan adalah Model Linear Sequential atau sering disebut Water Fall Model. Metode pengembangan
Memori Semikonduktor
Memori Semikonduktor Tiga jenis yang umum digunakan saat ini adalah: 1. Memori semi konduktor yang memakai teknologi LSI (Large-scale integration), adalah istilah teknis dalam bahasa Inggris di bidang
a b a AND b a OR b a XOR b a NOT a
MODUL IV LOGIC, SHIFT, and ROTATE INSTRUCTIONS Untuk mengubah bit-bit secara individual dalam komputer maka menggunakan operasi logika. Nila biner dari 0 dan 1 diperlakukan sebagai salah (0) dan benar
MAKALAH MODE DAN FORMAT PENGALAMATAN SET INSTRUKSI. Nama : Annisa Christyanti Kelas : XI TJA 3 NIS :
MAKALAH MODE DAN FORMAT PENGALAMATAN SET INSTRUKSI Nama : Annisa Christyanti Kelas : XI TJA 3 NIS : 3103113017 TEKNIK JARINGAN AKSES SMK TELKOM SANDHY PUTRA PURWOKERTO TAHUN AJARAN 2014/2015 Mode dan Format
Set Instruksi. Set Instruksi. Set Instruksi adalah kumpulan
Bab 10 Disusun Oleh : Rini Agustina, S.Kom, M.Pd Definisi: lengkap instruksi yang dapat adalah kumpulan dimengerti CPU Sifat2: 1. Merupakan Kode Mesin 2. Dinyatakan dalam Biner 3.Biasanya digunakan dalam
ARSITEKTUR KOMPUTER SET INSTRUKSI
LOGO ASSALAMU ALAIKUM ARSITEKTUR KOMPUTER SET INSTRUKSI Disajikan Oleh : RAHMAD KURNIAWAN, S.T., M.I.T. TEKNIK INFORMATIKA UIN SUSKA RIAU Karakteristik dan Fungsi Set Instruksi Operasi dari CPU ditentukan
Organisasi & Arsitektur Komputer
Organisasi & Arsitektur Komputer 1 Set Instruksi Eko Budi Setiawan, S.Kom., M.T. Eko Budi Setiawan [email protected] www.ekobudisetiawan.com Teknik Informatika - UNIKOM 2013 Arsitektur Komputer
TEORI MIKROPROSESOR 8088
TEORI MIKROPROSESOR 8088 I. MIKROPROSESOR 8088 Mikroprosesor 8088 mulai diperkenalkan oleh Intel Corporation pada tahun 1978. Mikroprosesor ini mengawali sejarah perkembangan mikroprosesor Intel selanjutnya,
Kumpulan instruksi lengkap yang dimengerti
Set Instruksi: 1 Set instruksi? Kumpulan instruksi lengkap yang dimengerti oleh CPU Operasi dari CPU ditentukan oleh instruksiinstruksi yang dilaksanakan atau dijalankannya. Instruksi ini sering disebut
Modul Kuliah Bahasa Rakitan. Harry Witriyono, M.Kom. I. Bahasa Rakitan, Microprocessor dan Bilangan
Modul Kuliah Bahasa Rakitan Oleh : I. Bahasa Rakitan, Microprocessor dan Bilangan 1. Bahasa Rakitan dan Posisinya dengan Bahasa Lain. Manusia dapat melakukan interaksi secara efektif dengan menggunakan
Assembly Basic Programming. By. Rita Wiryasaputra,ST., M. Cs Universitas Indo Global Mandiri 2012
Assembly Basic Programming By. Rita Wiryasaputra,ST., M. Cs Universitas Indo Global Mandiri 2012 Memulai Bahasa Rakitan Untuk membuat pemrograman bhs rakitan diperlukan compiler dlm hal ini adalah TASM
BAB I TUGAS MATA KULIAH SISTEM MIKROPROSESOR DOSEN PEMBERI TUGAS : FATAH YASIN, ST, MT.
1 BAB I TUGAS MATA KULIAH SISTEM MIKROPROSESOR DOSEN PEMBERI TUGAS : FATAH YASIN, ST, MT. A. Deskripsi Tugas 1. Jelaskan perbedaan mikroprosesor dan mikrokontroler. 2. Jelaskan mode-mode pengalamatan yang
Pemrograman Assembler dengan Debug
Pemrograman Assembler dengan Debug dadang mulyana 2012 1 Implementasi bahasa assembly bisa menggunakan 2 cara: 1. Menggunakan Debug 2. Pemrograman dengan Software Assembler dadang mulyana 2012 2 1 Debug
DASAR PEMROGRAMAN. PENGANTAR BAHASA C ( Sejarah, Struktur Pemrograman, Tipe Data, Operator ) Djoko Soerjanto, M.Kom
DASAR PEMROGRAMAN PENGANTAR BAHASA C ( Sejarah, Struktur Pemrograman, Tipe Data, Operator ) Djoko Soerjanto, M.Kom https://www.facebook.com/groups/dasarpemrogramanc TUJUAN Mengenal sejarah, struktur, sintaks
Mode Pengalamatan (Addressing Mode) Keluarga Prosesor 8086
Mode Pengalamatan (Addressing Mode) Keluarga Prosesor 8086 Mode Pengalamatan Pada Mikroprosesor Keluarga 8086 Merupakan cara memberikan perintah transfer/pemindahan data dari lokasi satu ke lokasi lainnya.
DASAR KOMPUTER. Assembly Language
DASAR KOMPUTER Assembly Language CPU Register Register PC General purpose registers AX - the accumulator register (divided into AH / AL). BX - the base address register (divided into BH / BL). CX - the
7.Lokasi hasil pemrosesan
SRI SUPATMI,S.KOM 6. Lokasi Operand Ada beberapa pilihan dalam menempatkan operand (lokasi operand) yaitu pada: memori utama, register CPU, I/O port dan pada instruksi itu sendiri. Membiarkan operand dalam
Eksplorasi Prosesor 8086 Dengan Program DEBUG
dapat digunakan untuk mengeksplorasi keluarga prosesor 8086 termasuk PENTIUM pada PC telah disertakan setiapkali user melakukan instalasi WINDOWS Untuk menjalankan DEBUG, click Start-Run, kemudian ketik
PERTEMUAN SET INSTRUKSI MIKROKONTROLER AT 89C51
PERTEMUN SET INSTRUKSI MIKROKONTROLER T 89C5 PERTEMUN SET INSTRUKSI MIKROKONTROLER T 89C5 Pendahuluan Dalam materi sebelumnya sudah di bahas untuk menjalankan suatu tugas maka mikrokontroler 89C5 membutuhkan
Daftar Isi. Daftar Isi Pertemuan 5: Subroutine, Macro, Stack dan Pointer P5.1. Teori Subroutine (Procedure) Macro...
Daftar Isi Daftar Isi... 1 Pertemuan 5: Subroutine, Macro, Stack dan Pointer... 2 P5.1. Teori... 3 Subroutine (Procedure)... 3 Macro... 5 Stack... 9 Pointer... 11 P5.2. Studi Kasus... 18 P5.3. Latihan...
MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1
MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1 A. Tujuan Pada akhir praktikum ini, peserta dapat: 1. Memahami komponen arsitektur komputer tingkat bawah. 2. Menggunakan simulator untuk
BAB XXVII TURBO DEBUGGER
BAB XXVII TURBO DEBUGGER 27.1. Program Anda Salah? Dalam membuat program, kita biasanya akan selalu mengalami suatu kesalahan. Kesalahan dalam pembuatan sebuah program dapat dibagi menjadi dua, yaitu kesalahan
OPERASI ARITMATIKA. Untuk menambah dalam bahas Assembler digunakan perintah ADD, ADC serta INC Sintaks : ADD Tujuan,Asal
1. Operasi Penjumlahan 1.1. ADD OPERASI ARITMATIKA Untuk menambah dalam bahas Assembler digunakan perintah ADD, ADC serta INC ADD Tujuan,Asal Contoh : Perintah ADD akan menambahkan nilai pada tujuan dan
Tahun Akademik 2015/2016 Semester I DIG1B3 Konfigurasi Perangkat Keras Komputer
Tahun Akademik 2015/2016 Semester I DIG1B3 Konfigurasi Perangkat Keras Komputer SAP-3 Mohamad Dani (MHM) E-mail: [email protected] Hanya dipergunakan untuk kepentingan pengajaran di lingkungan Telkom
KALKULATOR ASSEMBLY Lutfi Budi Ilmawan
KALKULATOR ASSEMBLY Lutfi Budi Ilmawan 1. Analisis Kebutuhan Awal Penggunaan aplikasi kalkulator dengan menggunakan bahasa assembly sesuai dengan kode program yang terlampir membutuhkan operand-operand
J. Informatika AMIK-LB Vol.1 No.2 /Mei/2013
PERANGKAT LUNAK PEMBELAJARAN OPERASI ARITMATIKA PADA MIKROPROSESOR INTEL 8088/8086 DENGAN METODE CBT (Computer Based Training) Oleh SITI MUSTAWA Dosen Prodi Manajemen Informatika, AMIK Labuhanbatu Rantauprapat,
Mengenal bahasa assembly
Mengenal bahasa assembly adiatma [email protected] Abstrak Komputer adalah mesin penghitung elektronik yang cepat dan dapat menerima informasi input digital, kemudian memprosesnya sesuai dengan program
ARSITEKTUR SET INSTRUKSI. Ptputraastawa.wordpress.com
ARSITEKTUR SET INSTRUKSI [email protected] Ptputraastawa.wordpress.com Karakteristik Dan Fungsi Set Instruksi Operasi dari CPU ditentukan oleh instruksi-instruksi yang dilaksanakan atau dijalankannya.
BAB 3 Pemrograman Zilog Z80 Lanjutan
BAB 3 Pemrograman Zilog Z8 Lanjutan Buku: Bahasa Oleh : Setiawardhana Bahasa Assembly (Buku( Komputer 3) oleh : Son Kuswadi Politeknik Elektronika Negeri Surabaya Pokok Bahasan Addressing Mode? FLAG? Instruksi
Diktat Kuliah Instruksi dan Segmentasi
Mikroprosesor dan Antarmuka Diktat Kuliah Instruksi dan Segmentasi Nyoman Bogi Aditya Karna Sisfo IMTelkom [email protected] http://bogi.blog.imtelkom.ac.id Institut Manajemen Telkom http://www.imtelkom.ac.id
Simple As Possible (SAP) - 2. Abdul Syukur
Simple As Possible (SAP) - 2 Abdul Syukur [email protected] http://skurlinux.blogspot.com 053740514 Arsitektur Komputer SAP-2 Persamaan dengan SAP-1 : Sama-sama komputer bit. Kesamaan ini dapat
8/4/2011. Microprocessor & Microcontroller Programming. Bahasa Pemrograman. Bahasa Pemrograman. Bahasa Pemrograman
Microprocessor & Microcontroller Programming Program adalah susunan atau urutan perintah-perintah sederhana yang diberikan kepada komputer untuk memecahkan beberapa permasalahan. Jika sebuah program telah
DIKTAT BAHASA RAKITAN
DIKTAT BAHASA RAKITAN Riki Ruli S Modul I dan II Page 1 PERTEMUAN : 1 PENGENALAN BAHASA ASSEMBLY Deskripsi singkat : Dalam pertemuan ini akan dibahas mengenai pengenalan sistem komputer dan bahasa assembly
