.model small
.data
oprand1 db 9 dup(0)
oprand2 db 9 dup(0)
natigeh db 20 dup('0')
len1 db 0
len2 db 0
len3 db 0
col db 0
row db 0
mot db 0
mot2 dw 0
mot3 dw 0
ka_ge dw 0
count dw 0
si1 dw 0
di1 dw 0
sign db 0
operate db 0
ja0 db 'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄ¿','$'
ja1 db '³ ³','$'
ja2 db 'ÃÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄ ÄÄÄÄÄ´','$'
ja3 db '³ 1 ³ 2 ³ 3 ³ 4 ³ 5 ³','$'
ja4 db 'ÃÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍ ÍÍÍÍÍ´','$'
ja5 db '³ 7 ³ 8 ³ 9 ³ 0 ³ esc ³','$'
ja6 db 'ÃÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍÅÍÍÍÍÍ ÍÍÍÍÍ´','$'
ja7 db '³ + ³ - ³ * ³ / ³ = ³','$'
ja8 db 'ÀÍÍÍÍÍÁÍÍÍÍÍÁÍÍÍÍÍÁÍÍÍÍÍ ÍÍÍÍÍÙ',0ah,0dh,'$'
.code
calculator proc
;//////////////////////////////////////////
mov ax,@data
mov ds,ax
call cls
call shekl
calculatorp:
call amaliat
mov ah,00h
int 16h
cmp al,27
je calc_ret
call start
jmp calculatorp
calc_ret:
mov ah,4ch
int 21h
calculator endp
;/////////////////////////////////
cls proc
push ax
push bx
push cx
push dx
mov bl,0h
mov cx,0000h
mov dx,184fh
mov bh,07h
mov al,00h ;cls function
mov ah,06h
int 10h
mov dx,0000h
call gotoxy
pop dx
pop cx
pop bx
pop ax
ret
cls endp
;////////////////////////////
operatore proc
cmp al,'*'
jne opr1
jmp opr_ret
opr1:
cmp al,'+'
jne opr2
jmp opr_ret
opr2:
cmp al,'-'
jne opr3
jmp opr_ret
opr3: cmp al,'/'
jne opr_num
opr_ret: mov operate,al
call cout_char
mov mot,1
mov mot1,1
opr_num:
ret
operatore endp
;////////////////////////////
detect proc
cmp al,'9'
jg det_ret
cmp al,'0'
jl det_ret
call cout_char
sub al,'0'
mov [si],al
dec si
inc len1
det_ret:
ret
detect endp
;////////////////////////////
harekat proc
har: cmp mot1,0
jne har_ret2
cmp len1,9
je har_ret2
call getkey
call detect
cmp mot,0
jne har1
call operatore
har1:
cmp al,'='
je har_ret1
cmp al,27
je har_ret
jmp har
har_ret:
mov ah,4ch
int 21h
har_ret1:cmp mot,0
je har
har_ret2:
ret
harekat endp
;////////////////////////////////
amaliat proc
mov row,5
mov col,55
mov len1,0
mov operate ,0
lea si,oprand1
add si,8
mov mot,0
mov mot1,0
call harekat
mo2:
cmp operate,0
jne mo1
call getkey
call operatore
jmp mo2
mo1:
mov row,5
mov col,27
call cls2
mov row,5
mov col,55
mov si1,9
mov ax,word ptr len1
sub si1,ax
lea si,oprand2
add si,8
mov len1,0
mov mot1,0
call harekat
cmp al,'='
je play
ba:
mov ah,00h
int 16h
cmp al,'='
je play
cmp al,27
jne ba
mov ah,4ch
int 21h
play:
mov di1,9
mov ax,word ptr len1
sub di1,ax
mai2:
cmp operate ,'-'
jne kalc1
kalc_a:
call proc_sub
call cout1
jmp exit
kalc1:cmp operate ,'/'
jne kalc2
kalc1_s:
call proc_div
jmp exit
kalc2:
cmp operate ,'*'
jne kalc3
call proc_zarb
call cout1
jmp exit
kalc3: cmp operate ,'+'
jne exit
call proc_jam
call cout1
exit:
ret
amaliat endp
;//////////////////////////////
cout_char proc
mov ah,0
push ax
mov ch,0
mov cl,len1
sub col,cl
mov dh,row
mov dl,col
inc dl
call gotoxy
c_char:
cmp cx,0
je c_char1
call re_makan
mov dl,col
call gotoxy
call cout
add dl,2
mov col,dl
dec col
call gotoxy
dec cx
jmp c_char
c_char1:
pop ax
mov dh,5
mov dl,55
call gotoxy
call cout
ret
cout_char endp
;/////////////////////////////
shekl proc
push ax
push cx
push dx
mov dl,26
mov dh,4
mov col,dl
mov row,dh
call gotoxy
mov cx,9
lea dx,ja0
jad: mov ah,09h
int 21h
add dx,32
push dx
inc row
mov dh,row
mov dl,col
call gotoxy
pop dx
loop jad
pop dx
pop cx
pop ax
ret
shekl endp
;////////////////////////////
gotoxy proc
mov ah,02h
int 10h
ret
gotoxy endp
;////////////////////////////
cout proc
mov ah,0eh
int 10h
ret
cout endp
;////////////////////////////
getkey proc
mov ah,07h
int 21h
ret
getkey endp
;////////////////////////////
re_makan proc
mov ah,08h
int 10h
ret
re_makan endp
;////////////////////////////
proc_jam proc
mov mot,0
mov len3,0
lea si,oprand1
lea di,oprand2
call norm
mov cx,9
jam_2: cmp si1,0
jg jam7
mov al,0
jmp jams
jam7: mov al,[si]
jams:mov ah,0
cmp di1,0
jle jamd
mov ah,[di]
jamd:
add ah,al
add ah,mot
mov mot,0
cmp ah,10
jl jam1
sub ah,10
mov mot,1
jmp jam3
jam1:
mov mot,0
jam3:
add ah,'0'
mov [bx],ah
inc len3
inc si
inc di
dec bx
dec si1
dec di1
loop jam_2
jam_cha:mov al,mot
add al,'0'
mov [bx],al
ret
proc_jam endp
;//////////////////////////////
proc_sub proc
mov mot,0
mov di,si1
cmp di,di1
jg menha0_3
cmp di,di1
jl menha_1
lea si,oprand1
add si,8
lea di,oprand2
add di,8
menha0_4:
mov al,[di]
cmp [si],al
jl menha0_3
dec si
dec di
loop menha0_4
jmp menha_1
menha0_3:
mov al,operate
mov sign,al
mov di,si1
mov si,di1
mov si1,si
mov di1,di
lea si,oprand2
lea di,oprand1
jmp menha_2
menha_1:
lea si,oprand1
lea di,oprand2
menha_2:
mov len3,0
call norm
mov cx,si1
menha2:
cmp di1,0
jg menha3
mov al,0
jmp men1
menha3:mov al,[di]
men1:
mov ah,0
cmp si1,0
jg menha6
jmp menha_ret
menha6: mov ah,[si]
inc len3
cmp ah,al
jge menha1_1
mov mot2,si
menha3_6:mov dl,0
inc si
cmp [si],dl
jne menha3_3
mov dl,9
mov [si],dl
jmp menha3_6
menha3_3:mov dl,1
sub [si],dl
mov si,mot2
add ah,10
jmp menha1_1
menha1_1:
sub ah,al
add ah,'0'
mov [bx],ah
inc si
inc di
dec bx
dec si1
dec di1
loop menha2
menha_ret:
ret
proc_sub endp
;////////////////////////////
proc_zarb proc
lea si,oprand1
lea di,oprand2
call norm
mov mot,0
mov cl,10
mov ax,si1
mov mot2,ax
mov len3,bl
con:
cmp di1,0
je zarb_ret
push bx
push si
mov dl,[di]
l1:
cmp si1,0
je l2
mov ch,mot
mov cl,[bx]
sub cl,'0'
add ch,cl
mov al,[si]
mov ah,0
mul dl
add al,ch
mov cl,10
div cl
mov mot,al
add ah,'0'
mov [bx],ah
dec bx
inc si
dec si1
jmp l1
l2: mov dx,mot2
mov si1,dx
mov al,mot
add al,'0'
mov [bx],al
mov mot,0
mov len3,bl
pop si
pop bx
dec bx
dec di1
inc di
jmp con
zarb_ret:lea ax,natigeh
add ax,19
mov bh,0
mov bl,len3
sub ax,bx
mov len3,al
ret
proc_zarb endp
;////////////////////////////
proc_div proc
mov count,0
mov al,byte ptr si1
mov len1,al
mov al,byte ptr di1
mov len2,al
lea si,oprand1
lea di,oprand2
call norm
mov mot2,si
mov mot3,di
;========
tagh_al1 :
mov ax,di1
cmp si1,ax
jg tagh1_1
cmp si1,ax
je tagh2
tagh_ret1:
call cout_taghsim
jmp tagh_ret
;==========
tagh2:mov cx,si1
lea si,oprand1
lea di,oprand2
add si,8
add di,8
tagh2_1:
mov al,[di]
cmp [si],al
jg tagh1
cmp [si],al
jl tagh_ret1
dec si
dec di
loop tagh2_1
inc count
jmp tagh_ret1
;==========
tagh1: mov di,mot3
mov si,mot2
tagh1_1:
mov len3,0
mov cx,di1
tagh3_2:
mov al,[di]
cmp [si],al
jge tagh3
mov bx,si
tagh3_6: mov ah,0
inc bx
cmp [bx],ah
jne tagh3_3
mov ah,9
mov [bx],ah
jmp tagh3_6
tagh3_3:
mov ah,1
sub [bx],ah
mov ah,10
add [si],ah
tagh3:
sub [si],al
inc si
inc di
loop tagh3_2
;==============
lea si,oprand1
add si,8
tagh5_3: mov ah,0
cmp [si],ah
jne tagh3_4
dec si
mov bx,si1
tagh5_2: mov al,[si]
mov [si+1],al
dec si
dec bx
cmp bx,0
jne tagh5_2
inc len3
dec si1
lea si,oprand1
add si,8
jmp tagh5_3
;==============
tagh3_4:
inc count
mov ax,65000
cmp count,ax
jne d2
mov count,0
inc ka_ge
d2: cmp si1,0
jne d1
jmp tagh_ret1
d1: mov si,mot2
mov di,mot3
mov ah,0
mov al,len3
add si,ax
mov len3,0
mov mot2,si
jmp tagh_al1
tagh_ret:
ret
proc_div endp
;////////////////////////////
norm proc
mov cx,9
add si,si1
sub cx,si1
mov si1,cx
mov cx,9
add di,di1
sub cx,di1
mov di1,cx
lea bx,natigeh
add bx,19
ret
norm endp
;////////////////////////////
cout1 proc
call cls2
mov col,27
mov row,5
mov cl,len3
mov ch,0
inc cx
mov mot,0
mov mot1,0
mov al,sign
call cout_ch
cout2:mov al,[bx]
cmp al,'0'
je cout_1
mov mot,1
cout_1:
cmp mot,0
jne cout4
inc mot1
jmp cout5
cout4:
call cout_ch
cout5:
inc bx
loop cout2
cout6: mov al,len3
inc al
cmp mot1,al
jne cout7
mov al,'0'
dec col
call cout_ch
cout7:
ret
cout1 endp
;////////////////////////////
cout_taghsim proc
mov col,27
mov row,5
call cls2
call start1
mov ah,0
mov ax,ka_ge
lea si,oprand1
add si,5
call bintoascy
lea si,oprand2
add si,4
mov ax,65000
call bintoascy
mov si1,4
mov di1,5
call proc_zarb
mov si,0
mov cx,9
a1:mov oprand2[si],0d
mov oprand1[si],0d
inc si
loop a1
mov ax,count
lea si,oprand2
add si,4
call bintoascy
mov ch,0
mov cl,len3
mov si,8
mov di,20
sub di,cx
di_ch:
mov al,natigeh[di]
sub al,'0'
mov oprand1[si],al
dec si
inc di
loop di_ch
mov si1,9
mov ah,0
mov al,len3
sub si1,ax
mov di1,4
call proc_jam
call cout1
ret
cout_taghsim endp
;////////////////////////////
cls2 proc
mov dh,5
mov dl,26
c1: mov al,' '
inc dl
call gotoxy
call cout
cmp dl,55
jne c1
ret
cls2 endp
;////////////////////////////
start proc
mov si1,0
mov di1,0
mov ka_ge,0
mov len1,0
mov len2,0
mov len3,0
mov mot3,0
mov mot2,0
mov mot1,0
mov mot,0
mov sign,0
mov operate,0
call start1
mov col,27
mov row,5
call cls2
ret
start endp
;=================
start1 proc
mov si,0
mov cx,9
res:
mov al,0
mov oprand1[si],al
mov oprand2[si],al
inc si
loop res
mov si,0
mov cx,20
res1:
mov al,'0'
mov natigeh[si],al
inc si
loop res1
ret
start1 endp
;////////////////////////////
bintoascy proc
mov bx,10
back:mov dx,0
div bx
mov [si],dl
inc si
cmp ax,0
ja back
ret
bintoascy endp
;///////////////////////////
cout_ch proc
mov dl,col
mov dh,row
call gotoxy
call cout
inc col
ret
cout_ch endp
;///////////////////////////
end calculator
اینهم برای دانلود
Calc.zip
exe شو از لینک های زیر دانلود کنند
mohammadsarbandi@yahoo.com
mohammadsarbandi@gmail.com
http://sarbandi.persiangig.ir/CPP/
http://sarbandi.persiangig.ir/CPP/8-QUEENF.EXE
http://sarbandi.persiangig.ir/CPP/EIGH_QEENF1.EXE