E N D
Turbo Assembly Mencetak angka
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.
Mencetak angka dalam 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 !.
.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
Mencetak angka dalam 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 • .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 ; Simpanangkatersebut • 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