• Tidak ada hasil yang ditemukan

MENCETAK ANGKA 20.1. MASALAH DALAM MENCETAK ANGKA

Dalam dokumen Pemrograman Dengan Bahasa Assembly (1) (Halaman 116-121)

Pada assembler, untuk mencetak suatu angka tidaklah semudah mencetak angka pada bahasa tingkat tinggi. Hal ini dikarenakan baik oleh BIOS maupun DOS tidak disediakan fungsinya. Misalkan kita mempunyai suatu angka 7, untuk mencetaknya kita harus menerjemahkan ke dalam kode ASCII 55 dahulu barulah mencetaknya. Demikian halnya bila ingin mencetak angka 127, maka kita juga harus menterjemahkannya dalam kode ASCII 49, 50 dan 55 untuk kemudian dicetak.

Selanjutnya akan kita lihat, bagaimana caranya untuk mencetak angka dalam bentuk desimal maupun hexadesimal.

20.2. MENCETAK ANGKA DALAM BENTUK DESIMAL

Cara yang paling banyak dilakukan oleh programmer assembler, untuk mencetak angka dalam bentuk desimal adalah dengan membagi angka tersebut dengan 10. Kemudian sisa pembagiannya disimpan dalam stack. Pada saat pencetakan, angka-angka yang disimpan dalam stack akan diambil satu persatu untuk dicetak.

Misalkan anda mempunyai angka 345, maka hasil pembagian dengan 10 sebanyak 3 kali akan menghasilkan sisa berturut-turut 5, 4 dan 3. Sisa pembagian ini kemudian disimpan pada stack. Karena sifat stack yang LIFO <Last In First Out>, maka pada saat pengambilan angka pada stack untuk dicetak akan diambil berturut-turut angka 345 !.

;/============================================\; ; Program : CD-ANGKA.ASM ; ; Author : S’to ; ; Fungsi : Mencetak angka yang bernilai ; ; antara 0 sampai 65535 dalam ; ; format desimal ; ;\============================================/; .MODEL SMALL .CODE ORG 100h TData : JMP Proses

Test_Angka DW 65535 ; Angka yang akan dicetak Proses:

MOV AX,Test_Angka ; AX = angka yang akan dicetak MOV BX,10 ; BX = penyebut

XOR CX,CX ; CX = 0 Ulang :

XOR DX,DX ; Cegah sisa bagi menjadi pembilang ! DIV BX ; Bagi angka yang akan dicetak dengan 10 PUSH DX ; Simpan sisa bagi dalam stack

INC CX ; CX ditambah 1

CMP AX,0 ; Apakah hasil bagi sudah habis ? JNE Ulang ; Jika belum, ulangi lagi !

Cetak :

POP DX ; Ambil 1 angka yang disimpan

ADD DL,'0' ; Ubah angka tersebut dalam kode ASCII MOV AH,02 ;

INT 21h ; Cetak angka tersebut LOOP Cetak ; ulangi

INT 20h END TData

Program 20.1. Mencetak angka dalam bentuk desimal

Bila program 20.1. dijalankan, maka pada layar akan ditampilkan: 65535

20.3. MENCARI DAN MENAMPILKAN BILANGAN PRIMA

Apa itu bilangan prima? Bilangan prima adalah bilangan yang hanya habis dibagi oleh dirinya sendiri dan 1. Contoh dari bilangan prima ini adalah 2, 3, 5, dan sebagainya.

Secara matematika, untuk mengetest apakah suatu bilangan adalah prima atau bukan, adalah dengan cara pembagian. Misalkan kita ingin mengetahui apakah angka 7 adalah prima atau bukan, kita akan mencoba untuk membaginya dengan 6, 5, 4,..2. Ternyata semua sisa pembagiannya adalah tidak nol atau tidak habis dibagi. Sebagai kesimpulannya, angka 7 adalah prima.

Pada program 20.2. akan anda lihat bagaimana mencari dan menapilkan semua angka prima yang terletak antara angka 0 sampai 1000. Kita akan menggunakan program 20.1. untuk menampilkan angka prima yang telah berhasil dicari.

Cetak_Klm MACRO Klm ; Macro untuk mencetak kalimat MOV AH,09

LEA DX,Klm INT 21h ENDM

CDesimal MACRO Angka

LOCAL Ulang, Cetak

MOV AX,Angka ; AX = angka yang akan dicetak MOV BX,10 ; BX = penyebut

XOR CX,CX ; CX = 0 Ulang :

XOR DX,DX ; Cegah sisa bagi menjadi pembilang ! DIV BX ; Bagi angka yang akan dicetak dengan 10 PUSH DX ; Simpan sisa bagi dalam stack

INC CX ; CX ditambah 1

CMP AX,0 ; Apakah hasil bagi sudah habis ? JNE Ulang ; Jika belum, ulangi lagi !

Cetak :

ADD DL,'0' ; Ubah 1 angka dalam kode ASCII MOV AH,02 ;

INT 21h ; Cetak angka tersebut LOOP Cetak ; ulangi

ENDM

;/================================================\; ; Program : PRIMA.ASM ; ; Author : S’to ; ; Fungsi : Mencari dan menampilkan angka ; ; prima dari 0 sampai 1000 ; ;\================================================/; .MODEL SMALL .CODE ORG 100h TData :JMP Awal Batas DW 1000 Prima DW 0 I DW 2 J DW 2 Spasi DB ' $'

Header DB 9,9,9,'Bilangan Prima 1 sampai 1000 : ',13,10 DB 9,9,9,'---',13,10,10,'$' Awal :

Cetak_Klm Header Proses :

MOV AX,Batas ; Jika bilangan yang dicek CMP AX,I ; sudah sama dengan Batas JE Exit ; maka selesai

ForI :

MOV J,2 ; J untuk dibagi oleh I MOV Prima,0 ; Prima = Tidak

ForPrima:

MOV AX,Prima ;

CMP AX,0 ; Apakah prima = Tidak ?

JNE TambahI ; jika Prima = Ya, lompat ke TambahI MOV AX,I ;

CMP AX,J ; I = J ?

JNE Tidak ; Jika tidak sama, lompat ke Tidak CDesimal I ; Cetak angka prima

Cetak_Klm Spasi ; Cetak spasi MOV Prima,1 ; Prima = Ya

JMP TambahJ ; Lompat ke TambahJ Tidak :

MOV DX,0 ; MOV AX,I ; MOV BX,J ;

DIV BX ; Bagi I dengan J CMP DX,0 ; Apakah sisa bagi=0?

JNE TambahJ ; Jika tidak sama lompat ke TambahJ MOV Prima,1 ; Prima = Ya

TambahJ :

INC J ; Tambah J dengan 1

JMP ForPrima ; Ulangi, bagi I dengan J TambahI :

INC I ; Tambah I dengan 1

JMP Proses ; Ulangi Cek I = prima atau bukan Exit :

INT 20h END TData

Bila program 20.2. dijalankan, maka pada layar akan ditampilkan: Bilangan Prima 0 sampai 1000 :

--- 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997

Dengan program 20.2. bilangan prima antara 0 sampai 65535 dapat anda ditampilkan.

20.4. MENCETAK ANGKA DALAM BENTUK HEXADESIMAL

Untuk mencetak angka dalam bentuk hexadesimal, adalah lebih mudah daripada mencetak angka delam bentuk desimal. Hal ini dikarenakan sifat dari hexadesimal yang setiap angkanya terdiri atas 4 bit.

Untuk itu anda bisa membuat suatu tabel untuk hexadesimal yang terdiri atas angka 0 sampai F. Kemudian ambillah angka yang ingin dicetak secara 4 bit untuk digunakan sebagai penunjuk dalam mencetak angka tersebut.

Cetak MACRO

MOV DL,Tabel_Hex[BX] ; MACRO untuk MOV AH,02 ; mencetak

INT 21h ; huruf ke BX pada tabel_Hex ENDM

;/======================================================\; ; Program : CH-ANGKA.ASM ; ; Author : S’to ; ; Fungsi : Mencetak angka yang bernilai antara ; ; 0000 sampai 255 <FFh> dalam format ; ; hexadesimal ; ;\======================================================/; .MODEL SMALL .CODE ORG 100h TData : JMP Proses Tabel_Hex DB '0123456789ABCDEF'

Test_Angka DB 255 ; Angka yang akan dicetak 255=FFh Proses:

SUB BH,BH ; Jadikan BH=0

MOV BL,Test_Angka ; BL = angka yang akan dicetak PUSH BX ; Simpan angka tersebut

MOV CL,4 ; Ambil 4 bit tinggi dari + SHR BL,CL ; BL untuk dicetak

Cetak ; Cetak 1 angka hexa tingginya POP BX ; Ambil angka yang disimpan AND BL,0Fh ; Ambil 4 bit rendah dari + Cetak ; BL untuk dicetak

INT 20h END TData

Program 20.3. Mencetak angka dalam bentuk hexadesimal

Bila program 20.3. dijalankan, maka pada layar akan tercetak: FF

BAB XXI

PENGAKSESAN PORT DAN PENGAKTIFAN SPEAKER

Dalam dokumen Pemrograman Dengan Bahasa Assembly (1) (Halaman 116-121)