Project Akhir Orkom - Kalkulator Sederhana

35
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 Michael Julyus C. M. | J3C113038

description

Tugas Akhir Organisasi Komputer & Bahasa Assembly - Kalkulator Sederhana

Transcript of Project Akhir Orkom - Kalkulator Sederhana

LAPORAN TUGAS AKHIRORGANISASI KOMPUTER & BAHASA ASSEMBLYKALKULATOR

Kelas: INF 2B Praktikum 1Nama: Michael Julyus C. M.NIM : J3C113038

PROGRAM KEAHLIAN MANAJEMEN INFORMATIKADIREKTORAT PROGRAM DIPLOMAINSTITUT PERTANIAN BOGORBOGOR2014KATA 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

DAFTAR ISI

KATA PENGANTAR2DAFTAR ISI3I.PENDAHULUAN4II.TEORI PENUNJANG5Menecetak Kalimat Dengan Fungsi DOS5Operasi Aritmatika6Operasi Penambahan6Operasi Pengurangan8Operasi Perkalian8Operasi Pembagian10Bandingkan dan Lompat11Lompat tanpa syarat11Membandingkan dengan CMP11Lompat yang mengikuti CMP12Lompat Bersyarat13III.LISTING PROGRAM17IV.ANALISA PROGRAM21V.PENUTUP27Kesimpulan27Saran27DAFTAR PUSTAKA28

PENDAHULUAN

Latar BelakangDalam 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.

TujuanTujuan 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.

TEORI PENUNJANG

Menecetak Kalimat Dengan Fungsi DOSInterupsi 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:INPUTAH =9DS:DX = Alamat String ($) tersebutKet=karakter $ dijadikan tanda akhir tulisan

Karakter KontrolKita 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 13Kode NamaFungsi

07Belmemberikan suara BEEP

08Backspace (BS)memindahkan kursor 1 kolom ke belakang

09Horizontal Tabmemindahkan kursorr 8 kolom ke kanan

10Line Feed (LF)memindahkan kursor 1 baris ke bawah

13Carriage 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.CODENAMACODENAMA

00NUL 16Data Link Escape

01Start Of Heading 17Device Control

02Start Of Text 18Negative Acknowledge

03End Of Text 19Synchronous Idle

04End Of Transmission 20End Of Transmission Block

05Enquiry 21Cancel

06Acknowledge 22End Of Medium

07Bel 23Substitute

08Backspace 24| Escape

09Horisontal Tabulation 25File Separator

10Line Feed 26Group Separator

11Vertical Tabulation 27Record Separator

12Form Feed 28Unit Separator

13Carriage Return 29Space

14Shift Out 30Delete

15Shift In

Operasi Aritmatika Operasi PenambahanADDUntuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC serta INC. Perintah ADD digunakan dengan syntax : ADD Tujuan,AsalPerintah 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:=15hMOV AL,4h ; AL:=4hADD AH,AL ; AH:=AH+AL, jadi AH=19hPerlu 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=0MOV BX,0F221h ; Nilai BX:=F221h dan carry=0ADD AX,BX ; Nilai AX menjadi 0455h dan carry=1 ADCPerintah ADC digunakan dengan cara yang sama pada perintah ADD, yaitu : ADC Tujuan,AsalPerbedaannya 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:MOV AX,1234h ; AX = 1234h CF = 0MOV BX,9ABCh ; BX = 9ABCh CF = 0MOV CX,5678h ; BX = 5678h CF = 0MOV DX,0DEF0h ; DX = DEF0h CF = 0ADD CX,DX ; CX = 3568h CF = 1ADC AX,BX ; AX = AX+BX+CF = ACF1Hasil 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 PenguranganSUBUntuk Operasi pengurangan dapat digunakan perintah SUB dengan syntax:SUB Tujuan,AsalPerintah 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:=15MOV BX,12 ; BX:=12SUB AX,BX ; AX:=15-12=3SUB AX,AX ; AX=0Untuk me-nolkan suatu register bisa anda kurangkan dengan dirinya sendiri seperti SUB AX,AX.

Operasi Perkalian Untuk perkalian bisa digunakan perintah MUL dengan syntax:MUL SumberSumber 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.

Hasil Program bab8-4 Operasi PembagianOperasi pada pembagian pada dasarnya sama dengan perkalian. Untuk operasi pembagian digunakan perintah DIV dengan syntax: DIV SumberBila 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.

Program 8.5. Proses pembagian bilangan 16 bit

Bandingkan dan Lompat Lompat tanpa syaratPerintah JMP (Jump), sudah pernah kita gunakan, dimana perintah ini digunakan untuk melompati daerah data program. Perintah JMP digunakan dengan syntax:JMP TujuanPerintah 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 penyeleksian kondisi terlebih dahulu biasanya diikuti dengan perintah untuk melihat kondisi, seperti membandingkan dengan perintah "CMP"(Compare).

Membandingkan dengan CMPPerintah CMP (Compare) digunakan untuk membandingkan 2 buah operand, dengan syntax:CMP Operand1,Operand2CMP 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:

- OFakan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan bertanda- SFakan 1, bila operand1 lebih kecil dari operand2, pada operasi bilangan bertanda- ZFakan 1, jika operand1 nilainya sama dengan operand2- CFakan 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 CMPPerintah 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 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 CMPNO.PERINTAH LOMPATKONDISI

1JA Lompat, jika Operand1 > Operand2 untuk bilangan tidak bertanda

2JG Lompat, jika Operand1 > Operand2 untuk bilangan bertanda

3JE Lompat, jika Operand1 = Operand2

4JNE Lompat, jika Operand1 tidak sama dengan Operand2

5JB Lompat, jika Operand1 < Operand2 untuk bilangan tidak bertanda

6JL Lompat, jika Operand1 < Operand2 untuk bilangan bertanda

7JBE Lompat, jika operand1 = Operand2 untuk bilangan bertanda

Menggunakan Perintah Lompat Bersyarat

Bila program 13.1. dijalankan, maka akan tampak pada layar:Bilangan A lebih besar dari bilangan BAnda bisa mengganti nilai pada variabel Bil A dan Bil B untuk melihat hasil yang akan ditampilkan pada layar.

Lompat BersyaratPada 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.

Tabel 13.2. Daftar Perintah JumpNO.PERINTAH LOMPATKONDISI

1JA Lompat, jika Operand1 > Operand2, untuk bilangan tidak bertanda

2JG Lompat, jika Operand1 > Operand2, untuk bilangan bertanda

3JE Lompat, jika Operand1 = Operand2

4JNE Lompat, jika Operand1 tidak sama dengan Operand2

5JB Lompat, jika Operand1 < Operand2, untuk bilangan tidak bertanda

6JL Lompat, jika Operand1 < Operand2, untuk bilangan bertanda

7JBE Lompat, jika operand1 = Operand2, untuk bilangan bertanda

11JC Lompat, jika Carry flag=1

12JCXZ Lompat, jika CX=0

13JNA Lompat, jika Operand1 < Operand2 dengan CF=1 atau ZF=1

14JNAE Lompat, jika Operand1 < Operand2 dengan CX=1

15JNB Lompat, jika Operand1 > Operand2 dengan CF=0

16JNBE Lompat, jika Operand1 > Operand2 dengan CF=0 dan ZF=0

17JNC Lompat, jika CF=0

18JNG Lompat, jika Operand1 Operand2 dengan ZF=0 dan SF=OF

22JNO Lompat, jika tidak terjadi tidak terjadi Overflow

23JNP Lompat, jika Ganjil

24JNS Lompat, jika SF=0

25JNZ Lompat, jika tidak 0

26JO Lompat, jika OF=1

27JP Lompat, jika Genap

28JPE Lompat, jika PF=1

29JPO Lompat, jika PF=0

30JS Lompat, jika SF=1

31JZ 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, 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 IPBThe 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.

LISTING PROGRAM

Berikut adalah listing program dari program kalkulator yang telah dibuat:

ANALISA PROGRAM

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

ORG 100hPada 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 AwalPenggunaan 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 BitRegister

32 bitEAX, EBX, ECX, EDX

16 bitAX, BX, CX, DX

8 bitAH, AL, BH, BL, CH, CL, DH, DL

Penggunaan LibraryDalam listing program di atas digunakan perintah untuk menggunakan library 'emu8086.inc'. Fungsi library yang digunakan yaitu:define_print_stringdefine_scan_num define_print_numdefine_print_num_unsTujuan 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 Programa) Proses Pencetakan KalimatUntuk mencetak kalimat digunakan instruksi sebagai berikut:program db 0dh,0ah,'Kalkulator',0Instruksi 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 PenjumlahanUntuk proses penjumlahan digunakan instruksi ADD seperti terlihat pada perintah di bawah:ADD AX,BXInstruksi add di atas berarti nilai dalam register bx dijumlahkan ke dalam nilai register AX, jadi nilai akhir tersimpan pada register AX.

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

d) Proses PerkalianUntuk proses perkalian digunakan instruksi MUL. Instruksi MUL menggunakan register tertentu sebagai multiplicand dan hasil operasinya, tergantung pada jumlah bit pada multiplier-nya.MultiplicandMultiplierHasil kali

AL8 BITAX

AX16 BITDX , AX

EAX32 BITEDX , EAX

Pada program kalkulator ini menggunakan register 16 bit sebagai operand-nya. Jadi multiplicand yang digunakan adalah register BX.MUL BXDari 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 PembagianPada 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 bagiPembagiDividend

AX8 bitAL

DD16 bitAX

EDX32 bitEAX

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 BXDari 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 LompatUntuk melakukan perintah lompat tanpa syarat digunakan perintah JMP. Berikut ini adalah penggunaan perintah JMP.JMP ulangiPada 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 melakukan lompat tersebut. Berikut adalah penggunaan perintah CMP yang diikuti dengan perintah JZ.CMP h_ AL, 1JZ 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 EfektifInstruksi 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 SIInstruksi LEA pada perintah di atas berarti mendapatkan alamat efektif dari register SI.3. Tahapan Penggunaan Program KalkulatorMula-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. | J3C1130383

PENUTUP

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

SaranSebelum 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.

DAFTAR PUSTAKA

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

Michael Julyus C. M. | J3C113038281 2 3 4 h

F 2 2 1 h

+

1 0 4 5 5 h

Biner

Biner

0001 0010 0011 0100

1111 0010 0010 0001

+

1 0000 0100 0101 0101