You are on page 1of 8

Eddy yudianto 09050310 34

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 sintaxsintax 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

Eddy yudianto 09050310 34

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# ORG 100h JMP START msg DB '==EDDY YUDIANTO==',0 register DX: START: ; fungsinya membuat berkas COM ; loncat ke program START ; simpan alamat label msg ke ; fungsi program yang dipanggil

Eddy yudianto 09050310 34


MOV AH, 2 MOV BX, 0 ulang: MOV DL, msg[BX] simpan di DL CMP DL, 0 JZ program INT 21h CALL bunyi_bel INC BX JMP ulang bunyi_bel PROC dipanggil MOV DL, 7 MOV AH, 2 INT 21h RET bunyi_bel ENDP program: ; fungsi program yang dipanggil msg1 db 13,10,"Masukkan angka pertama: ","$" ; mengeluarkan pesan kalimat1 msg2 db 13,10,"Masukkan angka kedua: ","$" ; mengeluarkan pesan kalimat2 msg3 db 13,10,"Pilih operasi hitung (+, -, *,/): ","$" ; mengeluarkan pesan kalimat3 msg4 db 13,10,"Hasilnya: ","$" ; mengeluarkan pesan kalimat hasil error db " ERROR","$" ; mengeluarkan pesan kalimat error nline db 13,10,"$" ; baris baru nega db "-","$" ; mengeluarkan pesan tanda negatif remainder db " remainder","$" ; mengeluarkan pesan hasil bagi jika tersisa saat membagi input1 label byte maxinput1len db 2 curinput1len db ? input1field db 2 dup(?) input2 label byte kalimat maxinput2len db 2 ; mengeluarkan pesan ; maksimum digit yang dapat dimasukkan adalah 2 ; masukkan nilai pada label 1 ; maksimum digit yang dapat dimasukkan adalah 2 ; data yang dimasukkan masih kosong ; fungsi mencetak karakter' ; merupakan tanda indeks data ; fungsi program yang dipanggil ; membaca karakter dan ; apakah kode ASCII 0? ; jika YA, program! ; jika TIDAK, cetak karakter! ; memanggil bunyi bip ; menaikkan indeks ; ulangi program ulang ; fungsi program yang ; fungsi untuk mengeluarkan bunyi bip (ASCII code)

Eddy yudianto 09050310 34


curinput2len db ? input2field db 2 dup(?) oper label byte maxoperlen db 2 curoperlen db ? operfield db 2 dup(?) .code main proc mov ax,@data mov ds,ax lea dx,msg1 mov ah,09h int 21h sintax berikutnya mov ah,0Ah lea dx,input1 input1 int 21h sintax berikutnya mov ah, 02 mov dl, 07h beep int 21h sub input1field,30h 30h mov al,input1field mov ah,0 push ax mov bx,0 mov bl,curinput1len mov input1field[bx],"$" lea dx,msg2 mov ah,09h int 21h mov ah,0Ah lea dx,input2 offset dx int 21h mov ah, 02 mov dl, 07h beep int 21h sub input2field,30h input2field mov al,input2field mov ah,0 push ax mov bx,0 mov bl,curinput2len ; set inputfiled1 ke al ; set 0 ke ah ; push semua ; set 0 ke bx ; set curinout1len ke bl ;set inputfield dari bx ; dx adalah offset msg2 ;set 09h ke ah ;set 0AH ke ah ; dx input2 adalah ; data yang dimasukkan masih kosong

; set @data ke ax ; set ax ke ds ; dx adalah offset dari msg1 ; set 09h (tab) ke ah ; sela waktu untuk ; set input1 ke dx ; dx adalah offset ; sela waktu untuk ; set 02 ke ah ;07h kode ascii untuk ;menghasilkan suara ; opernd input1field operand

;07h kode ascii untuk ; operand 30h operand ; set input2field ke al ; set 0 ke ah ; simpan ax ; set 0 ke bx ; set curinput2len ke bl

Eddy yudianto 09050310 34


mov input2field[bx],"$" lea dx,msg3 mov ah,09h int 21h mov ah,0Ah lea dx,oper int 21h mov ah, 02 mov dl, 07h beep int 21h mov bx,0 mov bl,curoperlen mov operfield[bx],"$" lea dx,msg4 mov ah,09h int 21h pop bx push pop ax push cmp operfield,'+' je plus cmp operfield,'-' je minus cmp operfield,'*' je times cmp operfield,'/' je divide lea dx,error mov ah,09h int 21h jmp x plus: add ax,bx call print_ax jmp x minus: cmp ax,bx jae minusa jnae minusb minusa: sub ax,bx call print_ax jmp x minusb: sub bx,ax mov ax,bx push ax ; tambahkan bx dengan ax ; panggil program print ax : loncat ke program x ; kurangkan bx dengan ax ; loncat jika operand pertama bukan satu dan tidak sama loncat jika operand pertama satu dan tidak sama ; operand bx operan ax ;loncat ke program x ; operand ax operan bx ; set bx ke ax ; simpan ax ; set input2field ke bx ; dx adalah offset msg3 ; set 09h ke ah ; set 0ah ke ah ; dx adalah offset oper ; set 02 ke ah ;07h kode ascii untuk ; set 0 ke bx ; set curoperlen ke bl ; set operfield ke bx ; dx adalah offset msg4 ; set 09h ke ah ; keluarkan bx dari ; keluarkan ax dari

; dx adalah offset error ; set 09h ke ah ;loncat ke program x

Eddy yudianto 09050310 34


lea dx,nega mov ah,09h int 21h pop ax push call print_ax jmp x times: mul bx call print_ax jmp x divide: div bl call print_al mov al,ah push ax lea dx,remainder mov ah,09h int 21h pop ax push call print_al x: mov ah,4ch int 21h main endp print_ax proc cmp ax, 0 jne print_ax_r push ax mov al, '0' mov ah, 0eh int 10h pop ax ret print_ax_r: pusha mov dx, 0 cmp ax, 0 je pn_done mov bx, 10 div bx call print_ax_r mov ax, dx add al, 30h mov ah, 0eh int 10h ; set 4ch ke ah ; fungsi mengalikan bx dengan operand ax : panggil program print ax : loncat ke program x ; fungsi mengalikan bx dengan operand ax : panggil program print al ; set ah ke al ; simpan ax ; dx adalah offset remainder ; set 09h ke ah ; keluarkan ax dari ;loncat ke program x ; dx adalah offset nega ; set 09h ke ah ; keluarkan ax dari

; simpan ax ; set 0 ke al ; set 0eh ke ah ; keluarkan ax dari pish ; push semual ; set 0 ke dx ; set 10 ke bx ; set dx ke ax ; set 0eh ke ah

Eddy yudianto 09050310 34


jmp pn_done pn_done pn_done: popa ret print_ax endp print_al proc cmp al, 0 jne print_al_r push ax mov al, '0' mov ah, 0eh int 10h pop ax ret print_al_r: pusha mov ah, 0 cmp ax, 0 je pn_don mov dl, 10 div dl call print_al_r print_al_r mov al, ah add al, 30h mov ah, 0eh int 10h jmp pn_don pn_don pn_don: popa ret print_al endp end main ;loncat ke program ; push semua ; tampilkan ax endp ; tampilkan al proc ; simpan ax ; set 0 ke al ; set 0eh ke ah ; keluarkan ax dari push ; program ; push semua(ax,bx, ah,dll) ; set 0 ke ah ; set 10 ke dl ; panggil program ; set ah ke al ; set 0eh ke ah ;loncat ke program ; keluarkan semua ; cetak al endp

Eddy yudianto 09050310 34

You might also like