poject assembly

10
Eddy yudianto 090503103 4 PROGRAM OPERASI 1 DIGIT DENGAN BUNYI BIP DENGAN EMU8086 Membuat program dengan sebuah program yang belum kita ketahui sangatlah susah, misalnya C++, Pascal, VB, dl tanpa mengetahui fungsi sintax-sintax yang digunakan karena untuk membangun sebuah program dengan tidak mengerti akan mendapatkan kendala. Assembly merupakan salah satu contoh program yang sulit untuk dikuasai, karena disamping assembky merupakan bahasa mesin yang hanya dapat dibaca oleh mesin itu sendiri dan jika dilihat di sekitar kita dan di internet artikel tentang assembly sangat sedikit, tidak seperti bahasa bahasa tingkat tinggi lainnya

Transcript of poject assembly

Page 1: poject assembly

Eddy yudianto 0905031034

PROGRAM OPERASI 1 DIGIT DENGAN BUNYI BIPDENGAN EMU8086

Membuat program dengan sebuah program yang belum kita ketahui sangatlah susah,

misalnya C++, Pascal, VB, dl tanpa mengetahui fungsi sintax-sintax yang digunakan karena untuk

membangun sebuah program dengan tidak mengerti akan mendapatkan kendala. Assembly

merupakan salah satu contoh program yang sulit untuk dikuasai, karena disamping assembky

merupakan bahasa mesin yang hanya dapat dibaca oleh mesin itu sendiri dan jika dilihat di sekitar

kita dan di internet artikel tentang assembly sangat sedikit, tidak seperti bahasa bahasa tingkat tinggi

lainnya

Page 2: poject assembly

Eddy yudianto 0905031034

Pada kesempatan ini, untuk memenuhi nilai Ujian Akhir Semester 4 kuliah Assembly, saya

ingin menjelaskan sedikit tentang contoh program Operasi 1 Digit yang source codenya saya dapat

dari internet dengan merubah dan menambahkan fungsi lain di dalamnya.

Untuk penjelasannya di samping kana dari sintak tersebut

Sintaxnya sebagai berikut:

; NAMA MADE EDDY YUDIANTO; NIM 0905031034; contoh program OPERASI 1 DIGIT DENGAN BUNYI BIP

#MAKE_COM# ; fungsinya membuat berkas COMORG 100h JMP START ; loncat ke program START

msg DB '==EDDY YUDIANTO==',0 ; simpan alamat label msg ke register DX:

START: ; fungsi program yang dipanggil MOV AH, 2 ; fungsi mencetak karakter' MOV BX, 0 ; merupakan tanda indeks data

Page 3: poject assembly

Eddy yudianto 0905031034

ulang: ; fungsi program yang dipanggil MOV DL, msg[BX] ; membaca karakter dan simpan di DL CMP DL, 0 ; apakah kode ASCII 0? JZ program ; jika YA, program! INT 21h ; jika TIDAK, cetak karakter! CALL bunyi_bel ; memanggil bunyi bip INC BX ; menaikkan indeks JMP ulang ; ulangi program ulang

bunyi_bel PROC ; fungsi program yang dipanggilMOV DL, 7 ; fungsi untuk mengeluarkan bunyi bip

(ASCII code) MOV AH, 2 INT 21h RETbunyi_bel ENDP

program: ; fungsi program yang dipanggilmsg1 db 13,10,"Masukkan angka pertama: ","$" ; mengeluarkan pesan kalimat1msg2 db 13,10,"Masukkan angka kedua: ","$" ; mengeluarkan pesan kalimat2msg3 db 13,10,"Pilih operasi hitung (+, -, *,/): ","$" ; mengeluarkan pesan kalimat3msg4 db 13,10,"Hasilnya: ","$" ; mengeluarkan pesan kalimat hasilerror db " ERROR","$" ; mengeluarkan pesan kalimat errornline db 13,10,"$" ; baris baru nega db "-","$" ; mengeluarkan pesan tanda negatifremainder db " remainder","$" ; mengeluarkan pesan hasil bagi jika

tersisa saat membagi

input1 label byte ; masukkan nilai pada label 1maxinput1len db 2 ; maksimum digit yang dapat

dimasukkan adalah 2curinput1len db ? ; data yang dimasukkan masih

kosonginput1field db 2 dup(?)

input2 label byte ; mengeluarkan pesan kalimatmaxinput2len db 2 ; maksimum digit yang dapat

dimasukkan adalah 2curinput2len db ? ; data yang dimasukkan masih

kosonginput2field db 2 dup(?)

oper label bytemaxoperlen db 2curoperlen db ?operfield db 2 dup(?)

.codemain proc

Page 4: poject assembly

Eddy yudianto 0905031034

mov ax,@data ; set @data ke axmov ds,ax ; set ax ke dslea dx,msg1 ; dx adalah offset dari msg1mov ah,09h ; set 09h (tab) ke ahint 21h ; sela waktu untuk sintax berikutnyamov ah,0Ah ; set input1 ke dxlea dx,input1 ; dx adalah offset input1int 21h ; sela waktu untuk sintax berikutnyamov ah, 02 ; set 02 ke ah

mov dl, 07h ;07h kode ascii untuk beepint 21h ;menghasilkan suara

sub input1field,30h ; opernd input1field –operand 30hmov al,input1field ; set inputfiled1 ke almov ah,0 ; set 0 ke ahpush ax ; push semuamov bx,0 ; set 0 ke bxmov bl,curinput1len ; set curinout1len ke blmov input1field[bx],"$" ;set inputfield dari bxlea dx,msg2 ; dx adalah offset msg2mov ah,09h ;set 09h ke ahint 21hmov ah,0Ah ;set 0AH ke ahlea dx,input2 ; dx input2 adalah offset dxint 21h mov ah, 02

mov dl, 07h ;07h kode ascii untuk beepint 21h

sub input2field,30h ; operand 30h – operand input2fieldmov al,input2field ; set input2field ke almov ah,0 ; set 0 ke ahpush ax ; simpan axmov bx,0 ; set 0 ke bxmov bl,curinput2len ; set curinput2len ke blmov input2field[bx],"$" ; set input2field ke bxlea dx,msg3 ; dx adalah offset msg3mov ah,09h ; set 09h ke ahint 21hmov ah,0Ah ; set 0ah ke ahlea dx,oper ; dx adalah offset operint 21h mov ah, 02 ; set 02 ke ah

mov dl, 07h ;07h kode ascii untuk beepint 21h

mov bx,0 ; set 0 ke bxmov bl,curoperlen ; set curoperlen ke blmov operfield[bx],"$" ; set operfield ke bxlea dx,msg4 ; dx adalah offset msg4mov ah,09h ; set 09h ke ahint 21h

Page 5: poject assembly

Eddy yudianto 0905031034

pop bx ; keluarkan bx dari pushpop ax ; keluarkan ax dari pushcmp operfield,'+'je pluscmp operfield,'-'je minuscmp operfield,'*'je timescmp operfield,'/'je dividelea dx,error ; dx adalah offset errormov ah,09h ; set 09h ke ahint 21hjmp x ;loncat ke program x

plus:add ax,bx ; tambahkan bx dengan axcall print_ax ; panggil program print axjmp x : loncat ke program x

minus:cmp ax,bx ; kurangkan bx dengan axjae minusa ; loncat jika operand pertama

bukan satu dan tidak samajnae minusb loncat jika operand pertama satu

dan tidak samaminusa:

sub ax,bx ; operand bx – operan ax call print_ax

jmp x ;loncat ke program xminusb:

sub bx,ax ; operand ax – operan bxmov ax,bx ; set bx ke axpush ax ; simpan axlea dx,nega ; dx adalah offset negamov ah,09h ; set 09h ke ahint 21hpop ax ; keluarkan ax dari push

call print_axjmp x ;loncat ke program x

times:mul bx ; fungsi mengalikan bx dengan

operand axcall print_ax : panggil program print axjmp x : loncat ke program x

divide:

Page 6: poject assembly

Eddy yudianto 0905031034

div bl ; fungsi mengalikan bx dengan operand ax

call print_al : panggil program print almov al,ah ; set ah ke alpush ax ; simpan axlea dx,remainder ; dx adalah offset remaindermov ah,09h ; set 09h ke ahint 21hpop ax ; keluarkan ax dari pushcall print_al

x:mov ah,4ch ; set 4ch ke ahint 21h

main endpprint_ax proccmp ax, 0jne print_ax_r push ax ; simpan ax mov al, '0' ; set 0 ke al mov ah, 0eh ; set 0eh ke ah int 10h pop ax ; keluarkan ax dari pish ret print_ax_r: pusha ; push semual mov dx, 0 ; set 0 ke dx cmp ax, 0 je pn_done mov bx, 10 ; set 10 ke bx div bx call print_ax_r mov ax, dx ; set dx ke ax add al, 30h mov ah, 0eh ; set 0eh ke ah int 10h jmp pn_done ;loncat ke program pn_donepn_done: popa ; push semua ret print_ax endp ; tampilkan ax endpprint_al proc ; tampilkan al proccmp al, 0jne print_al_r push ax ; simpan ax mov al, '0' ; set 0 ke al mov ah, 0eh ; set 0eh ke ah int 10h pop ax ; keluarkan ax dari push ret

Page 7: poject assembly

Eddy yudianto 0905031034

print_al_r: ; program pusha ; push semua(ax,bx, ah,dll) mov ah, 0 ; set 0 ke ah cmp ax, 0 je pn_don mov dl, 10 ; set 10 ke dl div dl call print_al_r ; panggil program print_al_r mov al, ah ; set ah ke al add al, 30h mov ah, 0eh ; set 0eh ke ah int 10h jmp pn_don ;loncat ke program pn_donpn_don: popa ; keluarkan semua ret print_al endp ; cetak al endpend main

Page 8: poject assembly

Eddy yudianto 0905031034