• Tidak ada hasil yang ditemukan

Kalkulator Assembly

N/A
N/A
Protected

Academic year: 2021

Membagikan "Kalkulator Assembly"

Copied!
11
0
0

Teks penuh

(1)

KALKULATOR ASSEMBLY

Lutfi Budi Ilmawan

1. Analisis Kebutuhan Awal

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 linux dengan arsitektur prosesor intel 32 bit.

Pada proses aritmetika digunakan register al dan register bl untuk menyimpan nilai

inputan angka. Di mana register al dan bl ini adalah register 8 bit. Berikut register-register

dam jumlah bitnya:

2. Algoritma Program

a) Proses penjumlahan

Untuk proses penjumlahan digunakan instruksi add seperti terlihat pada gambar di

bawah:

Instruksi add di atas berarti nilai dalam register bl dijumlahkan ke dalam nilai register al,

jadi nilai akhir tersimpan pada register al.

b) Proses Pengurangan

Untuk proses penguragan digunakan instruksi sub, penggunaannya bisa dilihat pada

gambar di bawah:

Instruksi sub di atas untuk mengurangkan nilai pada register al dengan nilai pada register

bl, dan hasilnya akan disimpan di register al.

c) Proses Perkalian

Untuk proses perkalian digunakan instruksi sub. Instruksi sub menggunakan register

tertentu sebagai multiplicand dan hasil operasinya, tergantung pada jumlah bit pada

multiplier-nya.

Multiplicand

Multiplier

Hasil kali

AL

8 BIT

AX

AX

16 BIT

DX , AX

EAX

32 BIT

EDX , EAX

Jumlah Bit

Register

32 bit

EAX, EBX, ECX, EDX

16 bit

AX, BX, CX, DX

(2)

Pada program kalkulator ini menggunakan register 8 bit sebagai operand-nya. Jadi

multiplicand yang digunakan adalah register al.

Dari gambar di atas diketahui bahwa register bl adalah register 8 bit, maka

multiplicand-nya adalah register al dan hasil perkalianmultiplicand-nya akan disimpan pada register ax.

d) Proses Pembagian

Pada proses pembagian digunakan instruksi div, format penulisan instruksi div sebagai

berikut:

div [nama_register]

Sama dengan instruksi sub, instruksi div menggunakan register-register tertentu untuk

operand-nya.

Hasil bagi

Pembagi

Dividend

Ax

8 bit

AL

Dx

16 bit

AX

Edx

32 bit

EAX

Program kalkulator yang dibuat menggunakan operand dengan register 8 bit. Penggunaan

instruksi sub pada program kalkulator yang dibuat dapat dilihat pada gambar di bawah:

Dari gambar di atas diketahui bahwa yang digunakan register bl (register 8 bit), maka

dividend yang digunakan adalah register al dan hasil bagi akan tersimpan pada register

ax.

3. Flowchart Program Kalkulator

Flowchart dari program kalkulator sebagai mana diperlihatkan pada gambar di bawah.

Mula-mula user menginputkan nilai pertama kemudian nilai kedua, nilai yang dimasukkan

harus berupa integer. Setelah memasukkan nilai, user kemudian memilih jenis operasi, angka

1 untuk proses penjumlahan, angka 2 untuk proses pengurangan, angka 3 untuk proses

perkalian, dan angka 4 untuk proses pembagian. Jika dimasukkan angka selain 1 sampai

dengan angka 4, maka program akan melakukan perulangan untuk melakukan input operasi

sampai jenis operasi yang dimasukkan benar. Seperti terlihat pada gambar di bawah:

(3)

Instruksi yang digunakan untuk meembandingkan nilai antara operand adalah instruksi cmp.

Instruksi cmp pada gambar di atas berarti membandingkan nilai dari register ah dengan

angka 1. Instruksi je (jump if equal) untuk melakukan jump jika nilai dari operand yang

dibandingkan bernilai sama.Setelah memilih jenis operasi yang benar maka program akan

mengeksekusi statement sesuai dengan pilihan yang dimasukkan, kemudian hasil operasi

akan ditampilkan. Flowchart dapat program dapat dilihat pada gambar di bawah:

start

Read

num1, num2, opc

opc = 1? result = num1 + num2

opc = 2? result = num1 - num2

opc = 3? result = num1 * num2

opc = 4? result = num1 / num2

write result end write ‘Pilihan Salah’

Y

Y

Y

Y

N

N

N

N

(4)

4. Implementasi

a) Proses Compile

Program dengan bahasa assembly ini dijalankan pada komputer dengan arsitektur intel 32

bit. Dan di-compile pada sistem operasi linux dengan menggunakan nasm, nasm

merupakan compiler untuk bahasa assembly pada linux. Nama file source code program

adalah kalkulator.asm perintahnya:

$ nasm -f elf kalkulator.asm

b) Proses Linking

Proses linking output file menjadi file executable dengan memasukkan perintah:

$ ld -m elf_i386 -s -o kalkulator kalkulator.o

c) Proses Running Program

Untuk menjalankan hasil file executable dengan menjalankan perintah:

$ ./kalkulator

Setelah program dijalankan maka user akan diminta untuk melakukan input terhadap

nilai I.

Selanjutnya tekan enter untuk melakukan input untuk nilai II.

Setelah melakukan input angka, selanjutnya melakukan input terhadap jenis operasi. Jenis

operasi dapat dipilih berdasarkan angka:

1 untuk proses penjumlahan

2 untuk proses pengurangan

3 untuk proses perkalian

4 untuk proses pembagian

(5)
(6)

LAMPIRAN KODE PROGRAM

section .data ; Messages msg1 db 10,'-Kalkulator Sederhana-',10,0 lmsg1 equ $ - msg1 msg2 db 10,'Angka I: ',0 lmsg2 equ $ - msg2 msg3 db 'Angka II: ',0 lmsg3 equ $ - msg3 msg4 db 10,'1. Penjumlahan',10,0 lmsg4 equ $ - msg4 msg5 db '2. Pengurangan',10,0 lmsg5 equ $ - msg5 msg6 db '3. Perkalian',10,0 lmsg6 equ $ - msg6 msg7 db '4. Pembagian',10,0 lmsg7 equ $ - msg7 msg8 db 'Pilih Operasi: ',0 lmsg8 equ $ - msg8 msg9 db 10,'Hasil Operasi: ',0 lmsg9 equ $ - msg9 msg10 db 10,'Pilihan Salah',10,0 lmsg10 equ $ - msg10 nlinea db 10,10,0 lnlinea equ $ - nlinea section .bss

; Spaces reserved for storing the values provided by the user. opc: resb 2 num1: resb 2 num2: resb 2 result: resb 2 section .text global _start _start:

; Menampilkan isi text dari variabel msg1 mov eax, 4

(7)

mov ebx, 1 mov ecx, msg1 mov edx, lmsg1 int 80h

; Menampilkan isi text dari variabel msg2 mov eax, 4

mov ebx, 1 mov ecx, msg2 mov edx, lmsg2 int 80h

; Input variabel num1 mov eax, 3

mov ebx, 0 mov ecx, num1 mov edx, 2 int 80h

; Menampilkan isi text dari variabel msg3 mov eax, 4

mov ebx, 1 mov ecx, msg3 mov edx, lmsg3 int 80h

; Input variabel num2 mov eax, 3

mov ebx, 0 mov ecx, num2 mov edx, 2 int 80h

; Menampilkan isi text dari variabel msg4 mov eax, 4

mov ebx, 1 mov ecx, msg4 mov edx, lmsg4 int 80h

; Menampilkan isi text dari variabel msg5 mov eax, 4

mov ebx, 1 mov ecx, msg5 mov edx, lmsg5 int 80h

; Menampilkan isi text dari variabel msg6 mov eax, 4

mov ebx, 1 mov ecx, msg6 mov edx, lmsg6 int 80h

; Menampilkan isi text dari variabel msg7 mov eax, 4

(8)

mov ebx, 1 mov ecx, msg7 mov edx, lmsg7 int 80h

ulangi:

; Menampilkan isi text dari variabel msg8 mov eax, 4

mov ebx, 1 mov ecx, msg8 mov edx, lmsg8 int 80h

; Input jenis operasi mov ebx,0

mov ecx,opc mov edx,2 mov eax,3 int 80h

mov ah, [opc] ; memindahkan value dari jenis operasi ke registry ah sub ah, '0' ; Convert dari ascii ke decimal

; Membandingkan value dari jenis operasi yang dimasukkan untuk mengetahui jenis operasi yang akan dilakukan

cmp ah, 1 je add cmp ah, 2 je subtract cmp ah, 3 je multiply cmp ah, 4 je divide

; Jika jenis operasi yang dimasukkan tidak dalam daftar ; maka akan tampil pesan error dan aplikasi tertutup. mov eax, 4 mov ebx, 1 mov ecx, msg10 mov edx, lmsg10 int 80h jmp ulangi add:

; simpan nilai num1 dan num2 pada register al and bl mov al, [num1]

mov bl, [num2]

; Convert dari ascii ke decimal sub al, '0'

sub bl, '0'

; Proses penjumlahan add al, bl

(9)

; konversi dari decimal ke ascii add al, '0'

; move the result mov [result], al

; Menampilkan isi text dari variabel msg9 mov eax, 4

mov ebx, 1 mov ecx, msg9 mov edx, lmsg9 int 80h

; Menampilkan hasil operasi mov eax, 4

mov ebx, 1 mov ecx, result mov edx, 2 int 80h

; Proses penjumlahan selesai jmp exit

subtract:

; simpan nilai num1 dan num2 pada register al and bl mov al, [num1]

mov bl, [num2]

; Convert dari ascii ke decimal sub al, '0'

sub bl, '0'

; Proses pengurangan sub al, bl

; konversi dari decimal ke ascii add al, '0'

; move the result mov [result], al

; Menampilkan isi text dari variabel msg9 mov eax, 4

mov ebx, 1 mov ecx, msg9 mov edx, lmsg9 int 80h

; Menampilkan hasil operasi mov eax, 4

mov ebx, 1 mov ecx, result mov edx, 1 int 80h

(10)

; Proses pengurangan selesai jmp exit

multiply:

; simpan nilai num1 dan num2 pada register al and bl mov al, [num1]

mov bl, [num2]

; Convert dari ascii ke decimal sub al, '0'

sub bl, '0'

; Proses perkalian. AX = AL x BL mul bl

; konversi dari decimal ke ascii add ax, '0'

; move the result mov [result], ax

; Menampilkan isi text dari variabel msg9 mov eax, 4

mov ebx, 1 mov ecx, msg9 mov edx, lmsg9 int 80h

; Menampilkan hasil operasi mov eax, 4

mov ebx, 1 mov ecx, result mov edx, 1 int 80h

; Proses perkalian selesai jmp exit

divide:

; simpan nilai num1 dan num2 pada register al and bl mov al, [num1]

mov bl, [num2] mov dx, 0 mov ah, 0

; Convert dari ascii ke decimall sub al, '0'

sub bl, '0'

; Proses pembagian. AX = AL / BL div bl

(11)

add ax, '0' ; move the result mov [result], ax

; Menampilkan isi text dari variabel msg9 mov eax, 4

mov ebx, 1 mov ecx, msg9 mov edx, lmsg9 int 80h

; Print on screen the result mov eax, 4

mov ebx, 1 mov ecx, result mov edx, 1 int 80h

; Proses pembagian selesai jmp exit

exit:

mov eax, 4 mov ebx, 1 mov ecx, nlinea mov edx, lnlinea int 80h

; Akhir dari program mov eax, 1

mov ebx, 0 int 80h

Referensi

Dokumen terkait

Hasil dari penelitian ini adalah deskripsi bentuk tingkat tutur, alih kode dan campur kode pada penggunaan bahasa Jawa tukangojek di Terminal Bus Simo

Bagaimana karakteristik penggunaan bahasa Indonesia dalam kartu pilihan pendengar radio RSPD di Sukoharjo dilihat dari bentuk campur kode.. Bagaimana karakteristik penggunaan

Tujuan penelitian ini adalah (1) mendeskripsikan bentuk ragam/tingkat tutur, alih kode, campur kode, dan interferensi dalam penggunaan bahasa Jawa oleh penyetor

Alih kode bahasa dalam bentuk alih bahasa ini terjadi pada penggunaan bahasa Indonesia yang dilakukan oleh masyarakat tutur kemudian beralih bahasa ke bahasa Jawa dalam

Hasil dari penelitian ini adalah deskripsi bentuk tingkat tutur, alih kode dan campur kode pada penggunaan bahasa Jawa tukangojek di Terminal Bus Simo

Jadi, penggunaan kata mas yang dilakukan pedagang pakaian di Pasar Kolpajung Pamekasan merupakan bentuk campur kode berupa kata yang masuk dalam tuturan bahasa

Penggunaan kata kompre pada tuturan tersebut termasuk ke dalam bentuk campur kode dikarenakan penggunaan kata kompre yang merupakan kata dari Bahasa Remaja yang dituturkan oleh penutur

Adapun penggunaan campur kode yang paling dominan terjadi pada tayangan MasterChef Indonesia Season 9 yaitu alih kode ke luar dengan bentuk alih kode dari bahasa Indonesia ke dalam