Anda di halaman 1dari 29

LAPORAN TUGAS AKHIR

ORGANISASI KOMPUTER & BAHASA ASSEMBLY


KALKULATOR

Kelas

INF 2B Praktikum 1

Nama

Michael Julyus C. M.

NIM

J3C113038

PROGRAM KEAHLIAN MANAJEMEN INFORMATIKA


DIREKTORAT PROGRAM DIPLOMA
INSTITUT PERTANIAN BOGOR
BOGOR
2014
Michael Julyus C. M. | J3C113038

KATA PENGANTAR

Puji dan Syukur Penulis Panjatkan ke Hadirat Tuhan Yang Maha Esa karena berkat
limpahan Rahmat dan Karunia-Nya sehingga penulis dapat menyusun laporan ini tepat
pada waktunya. Laporan ini membahas mengenai program kalkulator yang dibuat dalam
bahasa assembly.
Dalam penyusunan laporan ini, penulis banyak mendapat tantangan dan hambatan akan
tetapi dengan bantuan dari berbagai pihak tantangan itu bisa teratasi. Olehnya itu, penulis
mengucapkan terima kasih yang sebesar-besarnya kepada semua pihak yang telah
membantu dalam penyusunan makalah ini, semoga bantuannya mendapat balasan yang
setimpal dari Tuhan Yang Maha Esa.
Penulis menyadari bahwa laporan ini masih jauh dari kesempurnaan baik dari bentuk
penyusunan maupun materinya. Kritik konstruktif dari pembaca sangat penulis harapkan
untuk penyempurnaan makalah selanjutnya.
Akhir kata semoga laporan ini dapat memberikan manfaat kepada kita sekalian.

Bogor, 21 Desember 2014

Penulis

Michael Julyus C. M. | J3C113038

DAFTAR ISI

KATA PENGANTAR............................................................................................
DAFTAR ISI.......................................................................................................
I.

PENDAHULUAN.......................................................................................

II.

TEORI PENUNJANG..................................................................................
Menecetak Kalimat Dengan Fungsi DOS...............................................5
Operasi Aritmatika................................................................................6
Operasi Penambahan..........................................................................6
Operasi Pengurangan..........................................................................8
Operasi Perkalian...............................................................................8
Operasi Pembagian..........................................................................10
Bandingkan dan Lompat.....................................................................11
Lompat tanpa syarat.........................................................................11
Membandingkan dengan CMP............................................................11
Lompat yang mengikuti CMP.............................................................12
Lompat Bersyarat............................................................................13

III.

LISTING PROGRAM................................................................................

IV.

ANALISA PROGRAM...............................................................................

V.

PENUTUP..............................................................................................
Kesimpulan..........................................................................................27
Saran...................................................................................................27

DAFTAR PUSTAKA...........................................................................................

Michael Julyus C. M. | J3C113038

I.

PENDAHULUAN

Latar Belakang
Dalam bidang pendidikan, kalkulator adalah suatu alat yang sangat membantu
terhadap proses pengtirungan operasi aritmatika yang akurat, tepat, dan cepat. Bukan
hanya dalam bidang pendidikan, melainkan dalam bidang perbisnisan, ekonomi maupun
bidang lainnya pun akan dapat sangat terbantu dengan kalkulator sebagi alat / media
perhitungan yang akurat. Oleh karena itu, pada tugas akhir organisasi komputer dan bahasa
Assembly ini, penulis sengaja membuat program kalkulator yang dibuat menggunakan
bahasa Assembly ini agar dapat digunakan dalam proses penghitungan yang tepat.

Tujuan
Tujuan dibuatnya program kalkulator ini yaitu untuk memudahkan pengguna dalam
melakukan penghitungan operasi aritmetika dengan cepat dan benar.
Adapun tujuan dibuatnya laporan program kalkulator ini, yaitu agar:
1. Pembaca dapat memahami dan menerapkan operasi aritmatika dalam bahasa
Assembly.
2. Pembaca dapat memahami dan menerapkan cara mendapatkan alamat efektif
(Addressing Modes) dengan benar.
3. Pembaca dapat memahami dan menerapkan bagaimana mengaplikasikan fungi
perbandingan dengan bahasa Assembly.
4. Pembaca dapat memahami dan menerapkan bagaimana cara melompat ke proses
yang diinginkan dalam bahasa Assembly.

II.

TEORI PENUNJANG

Michael Julyus C. M. | J3C113038

Menecetak Kalimat Dengan Fungsi DOS


Interupsi merupakan inti dari sebuah program assembly. Interupsi memungkinkan sebuah
program assembly untuk meminta komputer melakukan proses sesuai dengan nilai register
yang dipergunakan sebagai dasar interupsinya. Setelah Anda bisa mencetak sebuat karakter
ataupun kalimat dengan int 21, ada baiknya untuk mencetak kalimat dengan karakter yang
panjang kita menggunakan prinsip String. Untuk itu digunakan fasilitas int 21h yang
lainnya, yaitu dengan Service 09h pada AH.
Penyimpanan String menggunakan register DX sebagai penampung variabel. String/Pesan
yang tersimpan dalam variabel tersebut harus diakhiri dengan tanda $ (dollar). Ada
beberapa hal yang harus diperhatikan dan ditambahkan, salah satunya adalah
mendefinisikan variabel. Variabel akan mengambil tempat pada memory untuk
menyimpan data String.
Besarnya memory yang dipakai oleh variabel ini ditentukan oleh besarnya data pada
variabel tersebut. Variabel ini dapat didenisikan dengan DEBUG ataupun menggunakan
compiler.
Untuk mencetak kalimat,dapat digunakan interupsi 21 register 9 dengan aturan:
INPUT
AH =9
DS:DX = Alamat String ($) tersebut
Ket=karakter $ dijadikan tanda akhir tulisan

Karakter Kontrol
Kita telah menggunakan 2 buah karakter control ,yaitu 10 . Karakter kontrol yang tersedia
untuk operasi yang sering digunakan terdapat 5, yaitu 07, 08, 09, 10 dan 13

Kode

Nama

Fungsi

07

Bel

memberikan suara BEEP

08

Backspace (BS)

memindahkan kursor 1 kolom ke belakang

Michael Julyus C. M. | J3C113038

09

Horizontal Tab

memindahkan kursorr 8 kolom ke kanan

10

Line Feed (LF)

memindahkan kursor 1 baris ke bawah

13

Carriage Return (CR)

memindahkan kursor menuju awal baris

Selain dari karakter kontrol pada gambar diatas masih terdapat karakter-karakter kontrol
lain, yang sebagian besar digunakan untuk keperluan komunikasi komputer dengan
periferalnya. Karakter kontrol yang tersedia padaASCII secara lengkap bisa anda lihat
pada gambar dbawah ini.

CODE

NAMA

CODE

NAMA

00

NUL

16

Data Link Escape

01

Start Of Heading

17

Device Control

02

Start Of Text

18

Negative Acknowledge

03

End Of Text

19

Synchronous Idle

04

End Of Transmission

20

End Of Transmission Block

05

Enquiry

21

Cancel

06

Acknowledge

22

End Of Medium

07

Bel

23

Substitute

08

Backspace

24

| Escape

Michael Julyus C. M. | J3C113038

09

Horisontal Tabulation

25

File Separator

10

Line Feed

26

Group Separator

11

Vertical Tabulation

27

Record Separator

12

Form Feed

28

Unit Separator

13

Carriage Return

29

Space

14

Shift Out

30

Delete

15

Shift In

Operasi Aritmatika
Operasi Penambahan
ADD
Untuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC
serta INC. Perintah ADD digunakan dengan syntax :
ADD Tujuan,Asal
Perintah ADD ini akan menambahkan nilai pada Tujuan dan Asal. Hasil yang
didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi
Tujuan:=Tujuan + Asal. Sebagai contohnya:
MOV AH,15h ; AH:=15h
MOV AL,4h

; AL:=4h

ADD AH,AL

; AH:=AH+AL, jadi AH=19h

Michael Julyus C. M. | J3C113038

Perlu anda perhatikan bahwa pada perintah ADD ini antara Tujuan dan Asal harus
mempunyai daya tampung yang sama, misalnya register AH(8 bit) dan AL(8 bit), AX(16
bit) dan BX(16 bit).
Mungkin ada yang bertanya-tanya, apa yang akan terjadi bila tujuan tempat hasil
penjumlahan disimpan tidak mencukupi seperti pertambahan 1234h dengan F221h.

Pada pertambahan diatas dapat dilihat bahwa pertambahan bilangan 1234 dengan
F221 akan menghasilkan nilai 10455. Supaya lebih jelas dapat anda lihat pada
pertambahan binernya dihasilkan bit ke 17, padahal register terdiri atas 16 bit saja. Operasi
pertambahan yang demikian akan menjadikan carry flag menjadi satu, Contoh:

MOV AX,1234h

; NIlai AX:=1234h dan carry=0

MOV BX,0F221h

; Nilai BX:=F221h dan carry=0

ADD AX,BX

; Nilai AX menjadi 0455h dan carry=1

ADC
Perintah ADC digunakan dengan cara yang sama pada perintah ADD, yaitu :
ADC Tujuan,Asal
Perbedaannya pada perintah ADC ini Tujuan tempat menampung hasil
pertambahan

Tujuan

dan

Asal

ditambah

lagi

dengan

carry

flag

(Tujuan:=Tujuan+Asal+Carry). Pertambahan yang demikian bisa memecahkan masalah


seperti yang pernah kita kemukakan, seperti pertambahan pada bilangan 12345678h +
9ABCDEF0h.
Seperti yang telah kita ketahui bahwa satu register hanya mampu menampung 16
bit, maka untuk pertambahan seperti yang diatas dapat digunakan perintah ADC untuk
memecahkannya, Contoh:
Michael Julyus C. M. | J3C113038

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

Hasil penjumlahan akan ditampung pada register

AX:CX yaitu ACF13568h.

Adapun flag-flag yang terpengaruh oleh perintah ADD dan ADC ini adalah
CF,PF,AF,ZF,SF dan OF.

Operasi Pengurangan
SUB

Untuk Operasi pengurangan dapat digunakan perintah SUB dengan syntax:


SUB Tujuan,Asal
Perintah SUB akan mengurangkan nilai pada Tujuan dengan Asal. Hasil yang
didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi
Tujuan:=Tujuan-Asal.
Contoh :
MOV AX,15 ; AX:=15
MOV BX,12 ; BX:=12
SUB AX,BX ; AX:=15-12=3
SUB AX,AX ; AX=0
Untuk me-nolkan suatu register bisa anda kurangkan dengan dirinya sendiri seperti
SUB AX,AX.

Michael Julyus C. M. | J3C113038

Operasi Perkalian
Untuk perkalian bisa digunakan perintah MUL dengan syntax:
MUL Sumber
Sumber disini dapat berupa suatu register 8 bit (contohnya: BL,BH,..), register 16
bit (contohnya: BX,DX,..) atau suatu varibel. Ada 2 kemungkinan yang akan terjadi pada
perintah MUL ini sesuai dengan jenis perkalian 8 bit atau 16 bit.
Bila Sumber merupakan 8 bit seperti MUL BH maka komputer akan mengambil
nilai yang terdapat pada BH dan nilai pada AL untuk dikalikan. Hasil yang didapat akan
selalu disimpan pada register AX. Bila sumber merupakan 16 bit seperti MUL BX maka
komputer akan mengambil nilai yang terdapat pada BX dan nilai pada AX untuk dikalikan.
Hasil yang didapat akan disimpan pada register DX dan AX (DX:AX), jadi register DX
menyimpan Word tingginya dan AX menyimpan Word rendahnya.

Program 8.4. Proses perkalian dengan MUL

Pada program 8.4. kita mendefinisikan angka untuk variabel 'A'=1EF dan 'B'=2FE
dengan DW. Karena tidak digunakan EQU, maka varibel 'A' dan 'B' dapat dirubah bila
diinginkan.

Michael Julyus C. M. | J3C113038

Hasil Program bab8-4

Operasi Pembagian
Operasi pada pembagian pada dasarnya sama dengan perkalian. Untuk operasi
pembagian digunakan perintah DIV dengan syntax:
DIV Sumber
Bila sumber merupakan operand 8 bit seperti DIV BH, maka komputer akan
mengambil nilai pada register AX dan membaginya dengan nilai BH. Hasil pembagian 8
bit ini akan disimpan pada register AL dan sisa dari pembagian akan disimpan pada
register AH.
Bila sumber merupakan operand 16 bit seperti DIV BX, maka komputer akan
mengambil nilai yang terdapat pada register DX:AX dan membaginya dengan nilai BX.
Hasil pembagian 16 bit ini akan disimpan pada register AX dan sisa dari pembagian akan
disimpan pada register DX.

Michael Julyus C. M. | J3C113038

Program 8.5. Proses pembagian bilangan 16 bit

Bandingkan dan Lompat


Lompat tanpa syarat
Perintah JMP (Jump), sudah pernah kita gunakan, dimana perintah ini digunakan
untuk melompati daerah data program. Perintah JMP digunakan dengan syntax:
JMP Tujuan
Perintah JMP ini dikategorikan sebagai Unconditional Jump, karena perintah ini
tidak menyeleksi keadaan apapun untuk melakukan suatu lompatan. Setiap ditemui
perintah ini maka lompatan pasti dilakukan.
Selain dari perintah jump tanpa syarat, masih banyak perintah Jump yang
menyeleksi suatu keadaan tertentu sebelum dilakukan lompatan. Perintah jump dengan
Michael Julyus C. M. | J3C113038

penyeleksian kondisi terlebih dahulu biasanya diikuti dengan perintah untuk melihat
kondisi, seperti membandingkan dengan perintah "CMP"(Compare).

Membandingkan dengan CMP


Perintah CMP (Compare) digunakan untuk membandingkan 2 buah operand,
dengan syntax:
CMP Operand1,Operand2
CMP akan membandingkan operand1 dengan operand2 dengan cara mengurangkan
operand1 dengan operand2. CMP tidak mempengaruhi nilai Operand1 dan Operand2,
perintah CMP

hanya akan mempengaruhi flags register sebagai hasil perbandingan.

Adapun flag-flag yang terpengaruh oleh perintah CMP ini adalah:

- OF akan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan bertanda
- SF akan 1, bila operand1 lebih kecil dari operand2, pada operasi bilangan bertanda
- ZF akan 1, jika operand1 nilainya sama dengan operand2
- CF akan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan tidak bertanda

Perlu anda ingat bahwa CMP tidak dapat membandingkan antar 2 lokasi memori.

Lompat yang mengikuti CMP


Perintah CMP yang hanya mempengaruhi flag register, umumnya diikuti dengan
perintah lompat yang melihat keadaan pada flags register ini. Jenis perintah lompat yang
biasanya mengikuti perintah CMP, terdapat 12 buah seperti pada Tabel 13.1.
Pada Tabel 13.1. terlihat bahwa terdapat dua operasi yang berbeda, yaitu operasi
bilangan bertanda dan tidak bertanda. Bilangan bertanda adalah bilangan yang akan
membedakan bilangan negatif dan positif(Mis. 37 dan -37). Sedangkan bilangan tidak
bertanda adalah bilangan yang tidak akan membedakan positif dan negatif, jadi angka -1
Michael Julyus C. M. | J3C113038

untuk operasi bilangan bertanda akan dianggap FFh pada bilangan tidak bertanda. Lebih
jauh mengenai bilangan bertanda dan tidak ini bisa anda lihat pada BAB I.

Tabel 13.1. Perintah Jump yang mengikuti CMP


NO
.
1

PERINTAH LOMPAT
JA <Jump If Above>

KONDISI
Lompat, jika Operand1 > Operand2 untuk bilangan tidak
bertanda

JG <Jump If Greater>

Lompat, jika Operand1 > Operand2 untuk bilangan


bertanda

JE <Jump If Equal>

Lompat, jika Operand1 = Operand2

JNE <Jump If Not Equal>

Lompat, jika Operand1 tidak sama dengan Operand2

JB <Jump If Below>

Lompat, jika Operand1 < Operand2 untuk bilangan tidak


bertanda

JL <Jump If Less>

Lompat, jika Operand1 < Operand2 untuk bilangan


bertanda

JBE <Jump If Below or Lompat, jika operand1 <= Operand2 untuk bilangan tidak
Equal>

bertanda

JLE <Jump If Less or Equal>

Lompat, jika Operand1 <= Operand2 untuk bilangan


bertanda

JAE <Jump If Above or Lompat, jika Operand1 >= Operand2 untuk bilangan tidak
Equal>

10

bertanda

JGE <Jump If Greater or Lompat, jika Operand1 >= Operand2 untuk bilangan
Equal>

bertanda

Michael Julyus C. M. | J3C113038

Menggunakan Perintah Lompat Bersyarat

Bila program 13.1. dijalankan, maka akan tampak pada layar:


Bilangan A lebih besar dari bilangan B
Anda bisa mengganti nilai pada variabel Bil A dan Bil B untuk melihat hasil yang
akan ditampilkan pada layar.

Lompat Bersyarat
Pada gambar 13.1. anda telah melihat sebagian dari perintah lompat bersyarat. Kini
akan kita lihat lompat bersyarat lainnya yang tersedia, seperti pada gambar 13.2. Tidak
seperti lompat tanpa syarat, Lompat bersyarat hanya dapat melompat menuju label yang
berjarak -128 sampai +127 byte dari tempat lompatan.

Michael Julyus C. M. | J3C113038

Tabel 13.2. Daftar Perintah Jump


NO
.
1

PERINTAH LOMPAT
JA <Jump If Above>

KONDISI
Lompat, jika Operand1 > Operand2, untuk bilangan tidak
bertanda

JG <Jump If Greater>

Lompat, jika Operand1 > Operand2, untuk bilangan


bertanda

JE <Jump If Equal>

Lompat, jika Operand1 = Operand2

JNE <Jump If Not Equal>

Lompat, jika Operand1 tidak sama dengan Operand2

JB <Jump If Below>

Lompat, jika Operand1 < Operand2, untuk bilangan tidak


bertanda

JL <Jump If Less>

Lompat, jika Operand1 < Operand2, untuk bilangan


bertanda

JBE <Jump If Below or Equal>

Lompat, jika operand1 <= Operand2, untuk bilangan


tidak bertanda

JLE <Jump If Less or Equal>

Lompat, jika Operand1 <= Operand2, untuk bilangan


bertanda

JAE <Jump If Above or Equal>

Lompat, jika Operand1 >= Operand2, untuk bilangan


tidak bertanda

10

JGE <Jump If Greater or Equal>

Lompat, jika Operand1 >= Operand2, untuk bilangan


bertanda

11

JC <Jump Carry>

Lompat, jika Carry flag=1

12

JCXZ <Jump If CX is Zero>

Lompat, jika CX=0

13

JNA <Jump If Not Above>

Lompat, jika Operand1 < Operand2 dengan CF=1 atau


ZF=1

14

JNAE <Jump If Not Above nor Lompat, jika Operand1 < Operand2 dengan CX=1
Michael Julyus C. M. | J3C113038

Equal>
15

JNB <Jump If Not Below>

Lompat, jika Operand1 > Operand2 dengan CF=0

16

JNBE <Jump If Not Below nor Lompat, jika Operand1 > Operand2 dengan CF=0 dan
Equal>

ZF=0

17

JNC <Jump If No Carry>

Lompat, jika CF=0

18

JNG <Jump If Not Greater>

Lompat, jika Operand1 <= Operand2 dengan ZF=1 atau


SF tidak sama OF

19

JNGE <Jump If Not Greater Nor Lompat, jika Operand1 <= Operand2 dengan SF tidak
Equal>

sama OF

20

JNL <Jump If Not Less>

Lompat, jika Operand1 >= Operand2 dengan SF=OF

21

JNLE <Jump If Not Less Nor Equal> Lompat, jika Operand1 > Operand2 dengan ZF=0 dan
SF=OF

22

JNO <Jump If No Overflow>

Lompat, jika tidak terjadi tidak terjadi Overflow

23

JNP <Jump If Not Parity>

Lompat, jika Ganjil

24

JNS <Jump If No Sign>

Lompat, jika SF=0

25

JNZ <Jump If Not Zero>

Lompat, jika tidak 0

26

JO <Jump On Overflow>

Lompat, jika OF=1

27

JP <Jump On Parity>

Lompat, jika Genap

28

JPE <Jump If Parity Even>

Lompat, jika PF=1

29

JPO <Jump If Parity Odd>

Lompat, jika PF=0

30

JS <Jump On Sign>

Lompat, jika SF=1

31

JZ <Jump Is zero>

Lompat, jika 0

Bila dilihat pada Tabel 13.2., perintah untuk lompat sebenarnya sangat mudah
untuk digunakan karena setiap huruf melambangkan suatu kata. Dengan demikian kita
tidak perlu untuk mengingat-ingat semua perintah diatas, kita hanya harus ingat bahwa
huruf J=Jump, E=Equal, N=Not, S=Sign, Z=Zero, P=Parity, O=Overflow, C=Carry,
Michael Julyus C. M. | J3C113038

G=Greater Than, A=Above, L=Less dan B=Below.

Catatan:
Huruf G dan L yang artinya Greater Than dan Less digunakan khusus untuk
operasi bilangan bertanda. Sedangkan Huruf A dan B yang artinya Above dan Below
digunakan khusus untuk operasi bilangan tidak bertanda.

Program 13.2. Perbandingan karakter

Bila program 13.2. dijalankan, maka pada layar akan ditampilkan:


Teknik Komputer IPB
The Best Diplome in IPB ....!!
Angka 7 pada akhir kalimat digunakan untuk menghasilkan suara beep. Bila anda masih
ingat pada addressing mode yang telah kita pelajari, maka program 13.2. tentunya tidak
ada masalah.

Michael Julyus C. M. | J3C113038

III.

LISTING PROGRAM

Berikut adalah listing program dari program kalkulator yang telah dibuat:

Michael Julyus C. M. | J3C113038

Michael Julyus C. M. | J3C113038

Michael Julyus C. M. | J3C113038

Michael Julyus C. M. | J3C113038

IV.

ANALISA PROGRAM

Model SMALL
Tanda directive ini digunakan untuk memberitahukan kepada assembler bentuk
memory yang digunakan oleh program kita.

ORG 100h
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.

1. Analisis Kebutuhan Awal

Michael Julyus C. M. | J3C113038

Penggunaan aplikasi kalkulator dengan menggunakan bahasa assembly sesuai


dengan kode program yang terlampir membutuhkan operand-operand dalam
bentuk integer. Operand-operand tersebut menggunakan register 8 bit. Untuk
kebutuhan proses, program akan melakukan penjumlahan, pengurangan, perkalian
dan pembagian. Sedangkan output yang dihasilkan dalam bentuk integer. Kode
program yang dibuat dapat berjalan pada sistem operasi windows maupun linux
dengan arsitektur prosesor intel 32 bit.
Pada proses aritmatika digunakan register AX dan register bx untuk
menyimpan nilai inputan angka. Di mana register AX dan bx ini adalah register 16
bit. Berikut register-register dam jumlah bitnya:

Jumlah Bit
32 bit
16 bit
8 bit

Register
EAX, EBX, ECX, EDX
AX, BX, CX, DX
AH, AL, BH, BL, CH, CL, DH, DL

Penggunaan Library
Dalam listing program di atas digunakan perintah untuk menggunakan library
'emu8086.inc'. Fungsi library yang digunakan yaitu:
define_print_string
define_scan_num
define_print_num
define_print_num_uns
Tujuan digunakannya library tersebut yaitu agar dapat memudahkan dalam proses
pencetakan dan pengambilan nilai yang diinputkan oleh user. Sehingga listing
program pun tidak terlalu panjang dikarenakan source code-nya pun memang tidak
begitu banyak jika dibandingkan dengan yang tanpa menggunakan library (manual).
Sehingga program pun akan menjadi efektif dan efisien.

2. Algoritma Program
a) Proses Pencetakan Kalimat
Untuk mencetak kalimat digunakan instruksi sebagai berikut:

Michael Julyus C. M. | J3C113038

program db 0dh,0ah,'Kalkulator',0
Instruksi di atas digunakan untuk memberikan nilai kalimat Kalkulator kepada label
program. Sedangkan instruksi 0dh,0ah digunakan untuk memberikan nilai kontrol
dimana nilai kontrol 13 berfungsi untuk memindahkan kursor menuju awal baris dan
karakter kontrol 10 berfungsi untuk memindahkan kursor 1 baris ke bawah.

b) Proses Penjumlahan
Untuk proses penjumlahan digunakan instruksi ADD seperti terlihat pada
perintah di bawah:
ADD AX,BX
Instruksi add di atas berarti nilai dalam register bx dijumlahkan ke dalam nilai
register AX, jadi nilai akhir tersimpan pada register AX.

c) Proses Pengurangan
Untuk proses penguragan digunakan instruksi SUB, penggunaannya bisa dilihat
pada perintah di bawah:
SUB AX,BX
Instruksi sub di atas untuk mengurangkan nilai pada register AX dengan nilai
pada register BX, dan hasilnya akan disimpan di register ax.

d) Proses Perkalian
Untuk proses perkalian digunakan instruksi MUL. Instruksi MUL
menggunakan register tertentu sebagai multiplicand dan hasil operasinya,
tergantung pada jumlah bit pada multiplier-nya.
Multiplicand
AL
AX
EAX

Multiplier
8 BIT
16 BIT
32 BIT

Hasil kali
AX
DX , AX
EDX , EAX

Pada program kalkulator ini menggunakan register 16 bit sebagai operandnya. Jadi multiplicand yang digunakan adalah register BX.
MUL BX

Michael Julyus C. M. | J3C113038

Dari perintah di atas diketahui bahwa register BX adalah register 16 bit, maka
multiplicand-nya adalah register AX dan hasil perkaliannya akan disimpan pada
register DX dan AX (DX:AX), jadi register DX menyimpan Word tingginya dan
AX menyimpan Word rendahnya.

e) Proses Pembagian
Pada proses pembagian digunakan instruksi DIV, format penulisan instruksi
DIV sebagai berikut:
DIV [nama_register]
Sama dengan instruksi MUL, instruksi DIV menggunakan register-register
tertentu untuk operand-nya.
Hasil bagi
AX
DD
EDX

Pembagi
8 bit
16 bit
32 bit

Dividend
AL
AX
EAX

Program kalkulator yang dibuat menggunakan operand dengan register 16 bit.


Penggunaan instruksi SUB pada program kalkulator yang dibuat dapat dilihat
pada perintah di bawah:
DIV BX
Dari gambar di atas diketahui bahwa yang digunakan register BX (register 16
bit), maka dividend yang digunakan adalah register DX:AX dan hasil bagi
akan tersimpan pada register AX dan Six dari pembagian akan disimpan pada
register DX.

f) Proses Bandingkan dan Lompat


Untuk melakukan perintah lompat tanpa syarat digunakan perintah JMP. Berikut ini
adalah penggunaan perintah JMP.
JMP ulangi
Pada perintah di atas proses berjalannya program akan langsung melompat ke
label ulangi.
Untuk membandingkan operand1 dan operand2 digunakan perintah CMP. Dan
untuk melakukan lompat yang mengikuti CMP, maka digunakan perintah lompat
bersyarat. Pada program kalkulator ini menggunakan perintah JZ untuk
Michael Julyus C. M. | J3C113038

melakukan lompat tersebut. Berikut adalah penggunaan perintah CMP yang


diikuti dengan perintah JZ.
CMP h_ AL, 1
JZ jumlah_
Pada perintah di atas proses program akan membandingkan antara nilai 1 dan
register AL. Jika hasilnya adalah 0, maka proses selanjutnya adalah melompat ke
label jumlah_

g) Proses Mendapatkan Alamat Efektif


Instruksi yang digunakan untuk mendapatkan alamat efektif dari suatu data bisa
digunakan dengan perintah LEA (Load Efective Address). Register yang bisa
digunakan pada addressing ini adalah BX, BP, SI, dan DI. Di bawah ini adalah
perintah yang digunakan.
LEA SI
Instruksi LEA pada perintah di atas berarti mendapatkan alamat efektif dari
register SI.
3. Tahapan Penggunaan Program Kalkulator
Mula-mula program menampilkan beberapa pilihan operasi yang dari program
kalkulator. Kemudian, program meminta user untuk menginputkan nomor dari
pilihan operasi yang ingin digunakan. Setelah user memasukkan inputan, program
akan menampilkan operasi yang dipilih oleh user dan meminta user untuk
menginputkan nilai pertama serta nilai kedua. Nilai yang dimasukkan harus berupa
integer. Apabila user memasukkan angka pilihan selain 1 sampai dengan 4, maka
program akan melakukan perulangan untuk menginputkan nomor pilihan kembali
sampai nomor pilihan yang dimasukkan oleh user benar. Setelah memasukkan nilai,
program akan menampilkan hasil ouput, kemudain program akan berhenti.

Michael Julyus C. M. | J3C113038

V.

PENUTUP

Kesimpulan
Dari program di atas, dapat disimpulkan bahwa dalam bahasa Assembly, kita dapat
mengambil alamat efektif dari satu data yaitu dengan menggunakan fungsi addressing
modes.

Saran
Sebelum menggunakan fungsi addessing modes, sebaiknya dianalisa telebih dahulu fungsi
addressing modes yang mana yang merupakan perintah fungsi addressing modes yang
benar yang kita butuhkan sehingga proses berjalannya program tersebut dapat berjalan
dengan baik tanpa terjadi kesalahan.

Michael Julyus C. M. | J3C113038

DAFTAR PUSTAKA

Suheri, Asep, ST, MT. Modul Praktikum Organisasi Komputer & Bahasa Assembly. 2012.
Bogor: Program Diploma Institut Pertanian Bogor.

Michael Julyus C. M. | J3C113038