PDA

View Full Version : مبتدی: نوشتن در فایل



maryam abs
دوشنبه 24 مرداد 1390, 21:50 عصر
سلام
من این کدا رو نوشتم فایل رو ایجاد میکنه ولی داخل فایل چیزی نمی نویسه
اینا دیتا سگمنتن
buffer_1 db 25,?,25 dup(' ')
buffer_2 db 25 dup(' '),'$'
handle dw 0
file_name db 'student.dat',00h

اینام کد سگمنت
call clrscr
mov ah,02 ;set cursor
mov bh,00
mov dl,10;soton
mov dh,10;satr
int 10h
call creat_file
mov ah,0ah ;input keyboard
mov dx,offset buffer_1
int 21h

call write_file
call close_file

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
creat_file proc near

mov ah,3ch
mov cx,0
lea dx,file_name
int 21h
jc c_error
mov handle,ax
jmp c_exit
c_error:
mov dx,offset er_creat
call show_er
c_exit:ret

creat_file endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
write_file proc
mov ah,40h
lea bx,handle
mov cx,25

mov dx,offset buffer_1+2
int 21h
jnc w_exit
mov dx,offset er_write
call show_er
w_exit: ret

write_file endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
close_file proc
mov ah,3eh
mov bx,handle
int 21h
jnc cl_exit
mov dx,offset er_close
call show_er
cl_exit:ret



close_file endp
;>>>>>>>>>>>>>>>>>>>>>>>>>
ممنون میشم اگه راهنماییم کنید و بگید مشکلشو

با تشکر

xman_1365_x
شنبه 26 شهریور 1390, 00:32 صبح
یک بار نوشتم اما پرید ،حواسم نبود تو این پیج لوگین کنم :لبخند:
کار با فایل قبلا توضیح داده شده! با این حال مشکل برنامه توی پروسیجر نوشتن در فایل بود که هندل بجای MOV از LEA استفاده کردین!
موقع گذاشتن سورس کامل بزارین چون کسی حوصله کامل کردن یا بررسی کد نداره
برنامه اصلاح شده بالا


.model small
.stack 128

.data
buffer_1 db 25,?,25 dup(' ')
buffer_2 db 25 dup(' '),'$'
handle dw 0
file_name db 'c:\student.dat',00h

er_creat db "Error create file",13,10,'$'
er_write db "Error write file",13,10,'$'
er_close db "Error close file",13,10,'$'

pkey db 13,10,"File successfully craeted,press any key for end program...$"

.code
start:
.startup
mov es,dx
call clrscr
mov ah,02 ;set cursor
mov bh,00
mov dl,10;soton
mov dh,10;satr
int 10h
call creat_file
mov ah,0ah ;input keyboard
mov dx,offset buffer_1
int 21h

call write_file
call close_file

lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx

; wait for any key....
mov ah, 1
int 21h

mov ax, 4c00h ; exit to operating system.
int 21h

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
creat_file proc near

mov ah,3ch
mov cx,0
lea dx,file_name
int 21h
jc c_error
mov handle,ax
jmp c_exit
c_error:
mov dx,offset er_creat
call show_er
c_exit:ret

creat_file endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
write_file proc
mov ah,40h
mov bx,handle
mov cx,5

mov dx,offset buffer_1+2
int 21h
jnc w_exit
lea dx, er_write
call show_er

w_exit: ret

write_file endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
close_file proc
mov ah,3eh
mov bx,handle
int 21h
jnc cl_exit
mov dx,offset er_close
call show_er
cl_exit:ret



close_file endp
;>>>>>>>>>>>>>>>>>>>>>>>>>
clrscr proc near
; Code for clearing the screen, equvalent to clrscr() in C,C++
mov ax,0600h ;AH=06(SCROLL),AL=00 (FULL SCREEN)
mov bh,07h ;0=BLACK BAKGROUND,7=WHITE FOREGROUND
mov cx,0000h ;UPPER LEFT ROW:COLUMN
mov dx,2479h ;24TH ROW,79TH COLUMN
int 10h ;EXECUTE INTERRUPT 10H [ VIDEO BIOS]
mov ah,02h ;FUNCTION FOR SETTING THE CURSOR
mov bh,0 ;STARTING PAGE NUMBER
mov dh,0 ;STARTING ROW
mov dl,0 ;STARTING COLUMN
int 10h ;EXECUTE INTERRUPT 10H [ VIDEO BIOS]
ret
endp

;>>>>>>>>>>>>>>>>>>>>>>>>>
show_er proc near
mov ah,9
int 21h
ret
endp

end start

و اینم نمونه دیگه:


org 100h
mov ah, 3ch
mov cx, 0
mov dx, offset filename
mov ah, 3ch
int 21h ; create file...
mov handle, ax

mov bx, handle
mov dx, offset data
mov cx, data_size
mov ah, 40h
int 21h ; write to file...

mov al, 0
mov bx, handle
mov cx, 0
mov dx, 7
mov ah, 42h
int 21h ; seek...

mov bx, handle
mov dx, offset buffer
mov cx, 4
mov ah, 3fh
int 21h ; read from file...

mov bx, handle
mov ah, 3eh
int 21h ; close file...
ret

filename db "c:\myfile.txt", 0
handle dw ?
data db " hello files! "
data_size=$-offset data
buffer db 4 dup(' ')

موفق باشی