PRAKTIKUM BAHASA RAKITAN MENCETAK HURUF, KALIMAT, DAN ANGKA TUJUAN 1.

Mahasiswa mampu melakukan pemrograman assembly menggunakan Turbo Assembler dan EMU8086 2. Mahasiswa mampu membuat program assembly untuk mencetak huruf , kalimat, dan angka DASAR TEORI Proses pencetakan huruf, kalimat, atau angka pada bahasa assembly secara umum memanfaatkan interupsi dos. Untuk mencetak sebuah kalimat maka dipergunakan INT 21h dengan kode servis 9 dengan ketentuan sebagai berikut : 1. Register AH diisi dengan 09h 2. Register DS:DX diisi dengan alamat kalimat yang akan dicetak 3. Jalankan INT 21h Untuk metode ini , maka secara default karakter $ akan dijadikan tanda akhir kalimat yang akan dicetak. Dalam implementasinya, akan sering dijumpai karakter kontrol. Karakter kontrol merupakan karakter yang khusus untuk melaksanakan fungsi tertentu. Macamnya sebagai berikut : Kode ASCII 7 8 9 10 13 Fungsi Bel Memberikan suara beep Backspace Memindahkan kursor 1 kolom ke belakang Horizontal tab Memindah kursor 8 kolom ke kanan Line feed Memindah kursor 1 kolom ke bawah Carriage return Memindahkan kursor ke ke awal baris Tabel 1. Tabel Karakter Kontrol ASCII Nama

Selain karakter kontrol tersebut, juga ada karakter kontrol lainnya, yang dipergunakan untuk komunikasi komputer dengan periferalnya, antara lain : Kode ASCII Nama 0 Null 1 Start of heading 2 Start of text

1

Register CX diisi dengan panjang kalimat yang akan ditampilkan 7. Register BH diisi dengan halaman tampilan 4. Interupsi yang dipergunakan yaitu INT 10h dengan langkah sebagai berikut : 1. Register ES:BP diisi alamat kalimat yang akan dicetak 8. Tabel Karakter Kontrol ASCII Lengkap Mencetak kalimat juga bisa menggunakan atribut seperti pada pencetakan huruf. Register AX diisi dengan 1300h 2. Jalankan INT 10h 2 . Register DH diisi dengan posisi Y kalimat akan ditampilkan 6. Register BL diisi dengan atribut yang diinginkan 3.3 End of text 4 End of transmission 5 Enquiry 6 Acknowledge 7 Bel 8 Backspace 9 Horizontal tab 10 Line feed 11 Vertical tabulation 12 Form feed 13 Carriage return 14 Shift out 15 Shift in 16 Data link escape 17 Device control 18 Negative acknowledge (NACK) 19 Synchronous idle 20 End of transmission block 21 Cancel 22 End of medium 23 Substitute 24 Escape 25 File separator 26 Group separator 27 Record separator 28 Unit separator 29 Spasi 30 Delete Tabel 1. Register DL diisi dengan posisi X kalimat akan ditampilkan 5.

. untuk selanjutnya hasil pembagian disimpan ke stack pointer. .09h DX. . Fungsi : Mencetak kalimat . Pembagian memanfaatkan register AX dan BX. Atribut Kalimat Mencetak angka untuk bahasa assembly tidak semudah pada bahasa tingkat tinggi. Mencetak kalimat Tuliskan program berikut ini pada text editor dan simpan sebagai file kal00. . . Program : kal00. Hal ini dikarenakan tidak ada fungsi khusus yang dapat digunakan. .10. Servis ke 9 Ambil Alamat Offset Kal0 Cetak perkarakter sampai tanda $ Ambil Alamat Offset Kal0 Cetak perkarakter sampai tanda $ Ambil Alamat Offset KAl0+7 Cetak perkarakter sampai tanda $ Ambil Offset kal1 Cetak perkarakter sampai ketemu $ 3 . Cara yang sering digunakan adalah dengan melakukan pembagian bertingkat dengan 10.13.Pengaturan atribut yang diinginkan dapat dilihat seperti pada tabel berikut : Bit ke Nama 7 BL (Blink) Warna dasar Warna tulisan 6 5 4 3 2 1 0 R G B I R G B (Red) (Green) (Blue) (Intensitas (Red) (Green) (Blue) warna) Tabel 3.Kal0 21h DX.'$' db 'DIBELAKANG TANDA $ TIDAK BISA DICETAK ' AH. dengan Int 21 servis 9 . .Kal0+7 21h DX.OFFSET Kal0 21h DX.Code ORG 100h Kalimat : JMP Kal0 Kal1 Proses: MOV MOV INT LEA INT LEA INT LEA INT Proses db 'PROSES PENCETAKAN STRING '.=====================================. .asm. . PROSEDUR PERCOBAAN 1. . . . Misal ingin cetak angka 2.asm .~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~. Setelah pembagian selesai maka data di stack pointer dikonversi ke ASCII dan ditampilkan ke layar.Model Small . .KAL1 21h . . maka kita harus mencari nilai kode ASCII-nya yaitu 32h baru bisa dicetak ke layar.

1300h . Ubah nilai BL menjadi : 65. 180.10010101b . AX = 1300h .35 . . . . Halaman tampilan 0 MOV DL. b. Ubah nilai DL dan DH lalu amati apa yang terjadi pada tulisan di layar Anda 4 . .End INT 20h Kalimat . . kembali ke DOS End Kalimat b. Cetak kalimat ! INT 20h . Fungsi : Mencetak kalimat disertai .Code ORG 100h Kalimat : JMP Proses Kal0 db ' Menulis kalimat dengan Atributnya ' Proses: MOV AX. . Buka EMU8086. . .============================================= . Input : . 128.-----------------------------------------------. . .Model Small . Servis 13h subfungsi 00 MOV BL. 255. atributnya . CX = Panjang kalimat<dalam karakter>. Selesai. DL = Posisi X . INT 10h . BH = Halaman tampilan . Selesai. ES:BP = Alamat awal string . .Kal0 .00 . Atribut tulisan MOV BH. BL = Atribut . DH = Posisi Y . 200. Ubah nilai Kal0 dan Kal1 sesuai dengan keinginan Anda dan lihat hasilnya 3. Posisi Y MOV CX. Tulis source code program berikut lalu jalankan di EMU8086 dan amati hasilnya dengan seksama.-----------------------------------------------.20 . Compile program menggunakan EMU8086 c.=============================================. Mencetak kalimat dengan atribut a. Banyaknya karakter dalam string LEA BP. . ES:BP alamat string INT 10h . kembali ke DOS a. 0 dan amati yang terjadi c. Program : kal01.12 . . Posisi X MOV DH.asm . . . .

format desimal . . Cetak_Klm Macro Klm MOV AH. . .1234. 75. AX = angka yang akan dicetak . antara 0 sampai 65535 dalam . Cetak angka tersebut .02 INT 21h LOOP Cetak INT 20h End TData . Ubah nilai Test_Angka ke 32. ulangi lagi ! . Macro untuk mencetak kalimat 5 .ASM . 50.33445.============================================ . Bagi angka yang akan dicetak .3. Fungsi : Mencetak angka yang bernilai . Tulis source code program berikut lalu jalankan di EMU8086 dan amati hasilnya dengan seksama.CX Ulang : XOR DX.10 XOR CX. Ambil 1 angka yang disimpan .Code ORG 100h TData : JMP Proses Test_Angka dw 65535 Proses: MOV AX. BX = penyebut .DX ! DIV BX dengan 10 PUSH DX INC CX CMP AX.0 JNE Ulang Cetak : POP DX ADD DL. Mencetak angka dalam bentuk desimal a.'0' ASCII MOV AH. CX = 0 . ulangi b. No servis yang dipergunakan . Angka yang akan dicetak .Test_Angka MOV BX.============================================ . Ubah angka tersebut dalam kode .Model Small .123456 dan amati apa yang terjadi 4. Cegah sisa bagi menjadi pembilang . Simpan sisa bagi dalam stack CX ditambah 1 Apakah hasil bagi sudah habis ? Jika belum. Tulis source code program berikut lalu jalankan di EMU8086 dan amati hasilnya dengan seksama.09 . Program : angka01. Mencari dan menampilkan angka prima a. .

'Bilangan Prima 1 sampai 1000 : '. ForI : MOV J. AX = angka yang akan dicetak MOV BX. Bagi angka yang akan dicetak dengan 10 PUSH DX . MOV AX. Cetak angka tersebut LOOP Cetak .DX . .'$' Cetak_Klm Header Proses : MOV AX. CMP AX.Code ORG 100h TData : JMP Awal Batas Prima I J Spasi Header Awal : dw dw dw dw db db db 1000 0 2 2 ' $' 9.Model Small . lompat ke Tidak 6 .02 .0 . .Angka .9. JE Exit . CX ditambah 1 CMP AX. Ubah 1 angka dalam kode ASCII MOV AH.9. BX = penyebut XOR CX. CMP AX. MOV Prima.10.9. ForPrima: MOV AX.================================================.13.I .LEA DX. lompat ke TambahI I = J ? Jika tidak sama. Simpan sisa bagi dalam stack INC CX . Cegah sisa bagi menjadi pembilang ! DIV BX .0 .'------------------------'.10 .10 9.9.0 . JNE TambahI .I . Fungsi : Mencari dan menampilkan angka .================================================. .'0' .CX . Jika bilangan yang dicek sudah sama dengan Batas maka selesai J untuk dibagi oleh I Prima = Tidak Apakah prima = Tidak ? jika Prima = Ya.J . Cetak MOV AX. Jika belum.Batas . . Ambil 1 angka yang disimpan ADD DL. CMP AX. Program : angka02. .Prima .13.Klm INT 21h EndM CDesimal Macro Angka Local Ulang. CX = 0 Ulang : XOR DX. ulangi lagi ! Cetak : POP DX .10. JNE Tidak .2 . INT 21h . prima dari 0 sampai 1000 . Apakah hasil bagi sudah habis ? JNE Ulang . ulangi EndM .ASM .

CDesimal I Cetak_Klm Spasi MOV Prima.Test_Angka . . Tulis source code program berikut lalu jalankan di EMU8086 dan amati hasilnya dengan seksama. hexadesimal .4 .ASM . . . Ambil 4 bit rendah dari + Cetak . Program : angka03. Jadikan BH=0 MOV BL. Tambah J dengan 1 . .0 JNE TambahJ MOV Prima.0Fh .J . BL untuk dicetak 7 . . BL untuk dicetak Cetak . MOV AX.======================================================.02 . Cetak 1 angka hexa tingginya POP BX .Model Small . MOV BX. bagi I dengan J . Ambil 4 bit tinggi dari + SHR BL.======================================================. . Simpan angka tersebut MOV CL. Angka yang akan dicetak 255=FFh Proses: SUB BH. .Tabel_Hex[BX] . Menampilkan angka dalam bentuk heksadesimal a.1 JMP TambahJ Tidak : MOV DX. . Ambil angka yang disimpan AND BL.0 .1 TambahJ : INC J JMP ForPrima TambahI : INC I JMP Proses Exit : INT 20h End TData . BL = angka yang akan dicetak PUSH BX .BH . DIV BX CMP DX.CL . . . huruf ke BX pada tabel_Hex EndM . . MACRO untuk MOV AH. Cetak angka prima Cetak spasi Prima = Ya Lompat ke TambahJ . Fungsi : Mencetak angka yang bernilai antara . Ulangi Cek I = prima atau bukan 5. Tambah I dengan 1 . Bagi I dengan J Apakah sisa bagi=0? Jika tidak sama lompat ke TambahJ Prima = Ya . mencetak INT 21h . Ulangi.I . .Code ORG 100h TData : JMP Proses Tabel_Hex db '0123456789ABCDEF' Test_Angka db 255 . 0000 sampai 255 <FFh> dalam format . Cetak Macro MOV DL.

End INT 20h TData 8 .