Anda di halaman 1dari 10

LEMBARAN PENGESAHAN

No. Praktikum : 02/PBA/TI/2016

Judul Praktikum : Mencetak Huruf, Kalimat, dan Angka

Nama : Cut Mila

NIM : 1657301016

Jurusan : Teknologi Informasi dan Komputer

Program Studi : Teknik Informatika

Tanggal Percobaan : 23 November 2016

Tanggal Penyerahan : 09 Januari 2017

Nilai :

Dosen Pembimbing : Hendrawaty, S. T., M. T

Buket Rata, 09 Januari 2017

Dosen pembimbing

Hendrawaty. S. T., M. T
NIP. 197002261998022001

1
Daftar Isi
LEMBARAN PENGESAHAN................................................................................................. 1

Daftar Isi ................................................................................................................................... 2

TUJUAN ................................................................................................................................... 3

DASAR TEORI ........................................................................................................................ 3

PROSEDUR PERCOBAAN .................................................................................................... 4

HASIL PERCOBAAN dan ANALISA .................................................................................... 5

1. Mencetak Angka dalam Bentuk Desimal ......................................................................... 5

ANALISA KESELURUHAN .................................................................................................. 8

KESIMPULAN ......................................................................................................................... 9

LAPORAN SEMENTARA .................................................................................................... 10

2
PRAKTIKUM MIKROPROSESOR DAN BAHASA RAKITAN
MENCETAK HURUF, KALIMAT, DAN ANGKA

TUJUAN
Mahasiswa mampu membuat program assembly untuk mencetak angka.

DASAR TEORI
1. MASALAH DALAM 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.
Selanjutnya akan kita lihat, bagaimana caranya untuk mencetak angka dalam bentuk
desimal maupun hexadesimal.

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 !

3
PROSEDUR PERCOBAAN
1. Mencetak angka dalam bentuk desimal
a. Tulis source code program berikut ini pada text editor lalu compile ,linking,
dan jalankan hasilnya serta amati hasilnya dengan seksama.
;============================================
; Program : angka01.ASM
; 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 ; No servis yang dipergunakan
INT 21h ; Cetak angka tersebut
LOOP Cetak ; ulangi
INT 20h
End TData

b. Ubah nilai Test_Angka ke 32, 50, 75,1234,33445,123456 dan amati apa yang
terjadi

4
HASIL PERCOBAAN dan ANALISA
1. Mencetak angka dalam bentuk desimal
a. Tulis source code program berikut ini pada text editor lalu compile ,linking,
dan jalankan hasilnya serta amati hasilnya dengan seksama.
;============================================
; Program : angka01.ASM
; 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 ; No servis yang dipergunakan
INT 21h ; Cetak angka tersebut
LOOP Cetak ; ulangi
INT 20h
End TData
Berikut ini dalah hasil percobaan dan analisa no 1.a
1.a.
Perintah Penjelasan/fungsi

JMP Proses Digunakan untuk menempati atau melewati bagian


proses.
Test angka dw 65535 Digunakan untuk menampilkan keluaran 65535.
MOV AX,Test angka Digunakan untuk memindahkan isi dari test angka ke
register AX.

5
MOV BX,10 Digunakan untuk memindahkan data 10 ke register
BX.
XOR CX,CX Register CX akan bernilai nol (0) apabila nilai atau
datanya sama, dan akan bernilai satu (1) apabila nilai
atau datanya tidak sama, dikarenakan menggunkan
gerbang XOR.
XOR DX,DX Register DX akan bernilai satu (1) apabila nilai atau
datanya tidak sama, dan akan bernilai nol (0) apabila
nilai atau datanya sama, dikarenakan menggunkan
gerbang XOR.
DIV BX Digunakan untuk membagi angka yang akan dicetak
dengan isi dari register BX.
PUSH DX Digunakan untuk memasukkan nilai pada register DX.
INC CX Digunakan untuk mengincremenkan nilai yang ada
pada register CX.
CMP AX,0 Digunakan untuk memeriksa apakah isi dari register
AX jika dibagi sisanya 0 atau tidak, jika ada sisa maka
terjadi proses pembandingan.
JNE Ulang Digunakan untuk melakukan lompatan apabila
operand1 tidak sama dengan operand2.
POP DX Digunakan untuk mengambil nilai yang ada di register
DX (pada stack).
ADD DL,’O’ Digunakan untuk mengubah angka ke dalam kode
ASCII.
MOV AH,02 Digunakan untuk memindahkan data 02 ke register
AH.
INT 21 H Digunakan untuk mencetak program yang telah dibuat.
Loop Cetak Digunakan untuk mengulang proses cetak.
INT 21 H Digunakan untuk mengakhiri program yang sudah
dicetak.
END TData Digunakan untuk mengakhiri program Tdata.
Analisa :
Pada program diatas setelah di ketik maka di compile kemudian di link,
maka hasil yang keluar adalah “65535” . Pada program ini menggunakan operator
logika XOR, operator XOR yang artinya menghasilkan nol (0) untuk nilai yang sama
dan satu (1) untuk nilai yang berbeda, dan fungsi dari “ DIV BX ” adalah untuk angka
yang akan dicetak dengan 10, harus dibagi 10 karena register “BX” memiliki nilai 10.
Pada program ini juga menggunakan “PUSH, CMP, JNE”, CMP adalah untuk

6
membandingkan 2 operand. Jika sudah habis dibagi atau tidak dan menghasilkan sisa
maka akan membandingkannya, dan JNE adalah lompatan artinya melompat jika
operand1 dan operand2 setelah proses perbandingan selesai, apabila operand1 dan
operand2 tidak sama maka dia akan melompat.

b. Ubah nilai Test_Angka ke 32, 50, 75,1234,33445,123456 dan amati apa yang
terjadi
Berikut ini adalah hasil percobaan dan analisa no 1.b
1.b. Setelah nilai Test_Angka diubah ke 32, 50, 75, 1234, 33445, 123456,
maka yang terjadi adalah outputnya akan mengeluarkan angka yang diinputkan,
seperti bibawah ini :
Test angka dw Output
32 32
50 50
75 75
12341 12341
33445 33445
12345 12345

7
ANALISA KESELURUHAN
Pada program ini menggunakan operator logika XOR, operator XOR yang
artinya menghasilkan nol (0) untuk nilai yang sama dan satu (1) untuk nilai yang
berbeda, Pada program ini juga menggunakan “PUSH, CMP, JNE”, CMP adalah
untuk membandingkan 2 operand. Jika sudah habis dibagi atau tidak dan
menghasilkan sisa maka akan membandingkannya, dan JNE adalah lompatan artinya
melompat jika operand1 dan operand2 setelah proses perbandingan selesai, apabila
operand1 dan operand2 tidak sama maka dia akan melompat. Dan Setelah nilai
Test_Angka diubah ke 32, 50, 75, 1234, 33445, 123456, maka yang terjadi adalah
outputnya akan mengeluarkan angka yang diinputkan yaitu : 32, 50, 75, 1234, 33445,
123456.

8
KESIMPULAN
Pada program ini menggunakan operator logika XOR, operator XOR yang
artinya menghasilkan nol (0) untuk nilai yang sama dan satu (1) untuk nilai yang
berbeda, dan fungsi dari “ DIV BX ” adalah untuk angka yang akan dicetak dengan
10, harus dibagi 10 karena register “BX” memiliki nilai 10. Pada program ini juga
menggunakan “PUSH, CMP, JNE”. PUSH DX yang berarti Digunakan untuk
memasukkan nilai pada register DX. CMP AX yang berarti Digunakan untuk
memeriksa apakah isi dari register AX jika dibagi sisanya 0 atau tidak, jika ada sisa
maka terjadi proses pembandingan. JNE Ulang yang berarti Digunakan untuk
melakukan lompatan apabila operand1 tidak sama dengan operand2.

9
L
A
P
O
R
A
N

S
E
M
E
N
T
A
R
A

10

Anda mungkin juga menyukai