Arithmatic Operation in Assembly

Here is some of aritmetic operation in assembly. FYI i use TASM to compile this,
Menu.ASM
INCLUDE  PUSTAKA.MCR
.MODEL SMALL
.CODE
ORG 100h

Mulai :  JMP  Proses
         a Dw 16
         b Dw 8
         c Dw ?
         Kal0 DB 13,10,'A = $'
         Kal1 DB 13,10,'B = $'
         Kal2 DB 13,10,'  Menu : $'
         Kal3 DB 13,10,'    1. Perkaliam $'
         Kal4 DB 13,10,'    2. Penjumlahan $'
         Kal5 DB 13,10,'    3. Pengurangan $'
         Kal6 DB 13,10,'    4. Pembagian $'   
         Kal7 DB 13,10,'    5. Kuadrat (Pangkat Dua) $'   
         Kal8 DB 13,10,'    6. Akar A $'   
         Kal9 DB 13,10,'Masukkan Pilihan : $'

         Kal10 DB 13,10,'A X B = $'
          Kal11 DB 13,10,'A + B = $'
         Kal12 DB 13,10,'A - B = $'
         Kal13 DB 13,10,'A : B = $'
         Kal14 DB 13,10,'A Pangkat 2 = $'
         Kal15 DB 13,10,'Akar A = $'
         Kal16 DB 13,10,'Pilihan Salah ! $'
         Kal17 DB 13,10,'Pilih Menu Lain? [Y/N]: $'
         Jwb   db 26,?,26 dup(?)
       
Proses:
            Cetak_Klm Kal0
            Cetak_Angka a
            Cetak_Klm Kal1
            Cetak_Angka b   
            Cetak_Klm Kal2
            Cetak_Klm Kal3
            Cetak_Klm Kal4
            Cetak_Klm Kal5
            Cetak_Klm Kal6
            Cetak_Klm Kal7
            Cetak_Klm Kal8
            Cetak_Klm Kal9

            Catat Jwb
            lea bx,Jwb+2        ; menunjuk byte ke-2 dari jawab
            cmp byte ptr [bx],'1'
            JE Kali
            cmp byte ptr [bx],'2'
            Je Tambah
            cmp byte ptr [bx],'3'
            Je Kurang
            cmp byte ptr [bx],'4'
            Je Bagi
            cmp byte ptr [bx],'5'
            Je Pangkat
            cmp byte ptr [bx],'6'
            Je Akar
            Jne Salah
Salah     :    Cetak_Klm Kal14
            JMP Proses
Kali    :   
            Cetak_Klm Kal10
            Perkalian a,b
            JMP Cetak
Tambah    :   Cetak_Klm Kal11
            Penjumlahan a,b
            JMP Cetak   
Kurang    :    Cetak_Klm Kal12
            Pengurangan a,b
            JMP Cetak
Bagi    :    Cetak_Klm Kal13
            Pembagian a,b
            JMP Cetak
Pangkat :   Cetak_Klm Kal14
            Kuadrat a
            JMP Cetak       
Akar    :   Cetak_Klm Kal15
            AkarKuadrat a
            JMP Cetak
Cetak    :           
            tampil
Ulang    :
            Cetak_Klm Kal17
            Catat Jwb
            lea bx,Jwb+2        ; menunjuk byte ke-2 dari jawab
            cmp byte ptr [bx],'Y'
            JE Lanjutkan
            cmp byte ptr [bx],'y'
            JE Lanjutkan
            JNE Keluar
Lanjutkan :    JMP Proses
Keluar  :
            INT   20h
END      Mulai
Pustaka.ASM
Cetak_Kar    Macro Kar
            MOV AH,02
            MOV DL,Kar
            INT 21H
            EndM
           
Cetak_Klm  MACRO  Klm        ; Macro untuk mencetak 
           LEA    DX,Klm     ; kalimat 
           MOV    AH,09
           INT    21h
           ENDM
   
Catat        MACRO j
            mov ah,0ah
            lea dx,j
            int 21h
            ENDM
      
Cetak_Angka MACRO Angka
            mov ax,angka
            Tampil
            endm
       
Perkalian MACRO a,b
            MOV AX,a
            Mul b
            endm
           
Penjumlahan MACRO a,b
            MOV AX,a
            ADD AX,b
            endm
           
Pengurangan MACRO a,b
            MOV AX,a
            SUB AX,b
            endm
           
Pembagian MACRO a,b
            SUB  DX,DX
            MOV AX,a
            DIV b
            endm
Kuadrat MACRO a
            MOV AX,a
            Mul a
            endm
AkarKuadrat     Macro a
        MOV CX,a
        MOV AX,-1
        CWD
        XOR BX,BX
Loopsqrt:
    INC AX
    INC DX
    INC DX
    ADD BX,DX
    CMP BX,CX
    JBE Loopsqrt

ENDM
           
Tampil Macro
            local looping, cetak
            mov bx,10 ;bx=10
            xor cx,cx ;cx=0
            looping:
            xor dx,dx
            div bx ;dx=ax/bx
            push dx ;push untuk menyimpan data ke dalam steck
            inc cx
            cmp ax,0
            jne looping
            cetak:
            pop dx ;pop untuk mengambil data dari stack
            add dl,'0' ;ubah angka menjadi code ascii
            mov ah,02h
            int 21h
            loop cetak
            endM
Previous
Next Post »