Kalkulator Assembly

11

Click here to load reader

Transcript of Kalkulator Assembly

Page 1: Kalkulator Assembly

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

8 bit AH, AL, BH, BL, CH, CL, DH, DL

Page 2: Kalkulator Assembly

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 perkaliannya 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:

Page 3: Kalkulator Assembly

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

Page 4: Kalkulator Assembly

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

Page 5: Kalkulator Assembly

Tekan enter untuk melihat hasil operasi.

Page 6: Kalkulator Assembly

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

Page 7: Kalkulator Assembly

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

Page 8: Kalkulator Assembly

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

Page 9: Kalkulator Assembly

; 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

Page 10: Kalkulator Assembly

; 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

; Konversi dari decimal ke ascii

Page 11: Kalkulator Assembly

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