PDA

View Full Version : سوال: نحوه و قالب ایجاد ، نوشتن ، ذخیره و بستن فایل چگونه است؟؟



laveran
دوشنبه 18 دی 1391, 19:20 عصر
سلام من میخوام یه فایلی ایجاد کنم داخلش نام و نام خانوادگی و مبلغ موجودی را از ورودی وارد کنم درنهایت فایل را ذخیره کنم. دستور ایجاد با 3ch و ذخیره و نوشتن با 40h و بستن با 3eh را میدونم و اینکار را برای یک ورودی مثل نام انجام میدم و برنامه کار میکنه اما وقتی ورودی دومی مثل نام خانوادگی میارم فایل ایجاد میشه ولی ذخیره نمیکنه.
قالب کلی برای اینکه بیش از یک ورودی داشته باشیم مثلا (نام و نام خانوادگی و موجودی) چجوریه؟؟ آیا برای هر کدوم از ورودی ها یک فایل جداگانه باید طراحی کرد یا نیازی نیست؟؟ لطفا راهنمایی کنید.
کد برنامه را در زیر گذاشتم این کد را برای دو ورودی نوشتم اما نمیدونم قالبش درسته یا نه؟؟ وقتی در کدنویسی یک ورودی تعریف میکنم فایل ایجاد کرده و ذخیره میکنه اما وقتی در کدنویسی برنامه دوتا ورودی تعریف میکنم فایل ایجاد میکنه ولی ذخیره نمیکنه. اگه کمکم کنید ممنون میشم.


.model small
.stack 64
.data
handel dw ?
pname db 'f:\MY_FILE2.TXT',00h

namepar label byte
maxlen db 30
namelen db ?
namerec db 30 dup (' '), 0dh,0ah
prompt db 'name? ',13,10
prompt2 db 'family? ',10,13

paralst label byte
maxlen1 db 30
namelen1 db ?
namerec2 db 40 dup(' '), 0dh,0ah


wrtmsg db '*** write error ***', 0dh, 0ah
tellmsg db '*** write error ***', 0dh, 0ah
errcde db 00

.code

main proc far
mov ax,@data
mov ds,ax
mov es,ax

call ijad
call zakhire
call bastan

call creat
call save
call close

mov ax,4c00h
int 21h


;-----------------------------------------

ijad proc near
mov ah,3ch
mov cx,00
lea dx,pname
int 21h
mov handel,ax
ijad endp

;-----------------------------------------

zakhire proc near
mov ah,40h
mov bx,01
mov cx,06
lea dx,prompt
int 21h

mov ah,0ah
lea dx,namepar
int 21h
cmp namelen,00
jz c90
mov al,20h
sub ch,ch
mov cl,namelen
lea di,namerec
add di,cx
neg cx
add cx,30
rep stosb
call e10writ


c90:
ret
zakhire endp

;-----------------------------------------

e10writ proc near
mov ah,40h
mov bx,handel
mov cx,32
lea dx,namerec
int 21h
jnc e110
lea dx,wrtmsg

mov namelen,00

e110:
ret
e10writ endp
;-----------------------------------------


bastan proc near
mov ah,3eh
mov bx,handel
int 21h
bastan endp
;-----------------------------------------


;-----------------------------------------

creat proc near
mov ah,3ch
mov cx,00
lea dx,pname
int 21h
mov handel,ax
creat endp
;-----------------------------------------

save proc near
mov ah,40h
mov bx,02
mov cx,08
lea dx,prompt2
int 21h

mov ah,0ah
lea dx,paralst
int 21h
cmp namelen1,00
jz c80
mov al,20h
sub ch,ch
mov cl,namelen1
lea di,namerec2
add di,cx
neg cx
add cx,30
rep stosb
call fun

c80:
ret
save endp
;-----------------------------------------
close proc near
mov ah,3eh
mov bx,handel
int 21h
close endp
;-----------------------------------------
fun proc near
mov ah,40h
mov bx,handel
mov cx,42
lea dx,namerec2
int 21h
jnc e20
lea dx,tellmsg

mov namelen1,00

e20:
ret
fun endp

end main