ورود

View Full Version : مشكل در انتقال بافر به يك فايل و خواندن از فايل



s_mokhtari
دوشنبه 15 خرداد 1391, 14:39 عصر
سلام
من ميخوام اطلاعات را كه از ورودي گرفتم داخل فايل بنويسم و بخونم


strlist lable byte
max db 20
len db 20
buffer 20 dup('')
mov ah,ofh
mov dx,offset buffer
int 21h

اينطوري اطلاعات را از كاربر گرفتم و توي بافر حالا چطور داخل فايل بريزم و نشان بدم
باتشكر

vahid1
دوشنبه 15 خرداد 1391, 21:51 عصر
توابع فايل را در تابع Int 21h سيستم عامل جستجو كنيد.

AH = 3Dh براي باز كردن فايل است. آدرس مسير و نام فايل را در DS:DX قرار دهيد و بياد داشه باشيد كه رشته‌ي حاوي مسير و نام فايل بايد با 0h تمام شده باشد. پس از باز شدن فايل شماره Handle آن در AX برگردانده مي‌شود كه بايد آن را در ساير تابع‌هاي فايل استفاده كنيد.

در ضمن اگر مي‌خواهيد فايل جديد ايجاد كنيد از تابع AH = 3Ch استفاده كنيد ساير پارامترهايش مانند بازكردن فايل است.

AH=40h نوشتن در فايل: BX شماره Handle فايل است كه از تابع قبلي (ايجاد يا باز كردن فايل) بدست آمده. و آدرس رشته‌اي يا همان بافر را در DS:DX قرار دهيد و اندازه رشته كه براي شما 20 حرف است را در CX


AH = 3Eh بستن فايل: در پايان با قرار دادن Handle در BX و فراخواني تابع Int 21h فايل را ببنديد.

كليه تابع‌هاي فايل اگر با خطا روبرو شوند CF را 1 كرده و كد خطا را در AX قرار خواهند داد پس بعد از هر فراخواني اگر CF صفر بود AX شماره Handle فايل است وگرنه كد خطا است.

در ضمن فراموش نكنيد تابع Int 21h مربوط به سيستم‌عامل است و ازاينرو در نگارش‌هاي مختلف رفتارهاي متفاوتي خواهد داشت. آنچه نوشتم براي Dos است البته در XP هم جواب مي‌دهد در سيستم‌عامل‌هاي جديدتر مسائل سطح دسترسي مطرح مي‌شود كه بايد مسير فايل‌تان و اجراي برنامه‌تان دقت كنيد.

موفق باشيد.

s_mokhtari
چهارشنبه 17 خرداد 1391, 07:16 صبح
با سلام
دوست عزيز ميشه كدشا برام بنويسيد
من درست متوجه نشدم
با تشكر

ssbostan
چهارشنبه 17 خرداد 1391, 12:01 عصر
با سلام؛
اين يك مثال ساده براي انجام عمليات خواندن از فايل و نوشتن در آن:




; = create file
mov ah, 3ch
mov cx, 0
mov dx, offset filename
int 21h

; = openning file
mov ah, 3dh
mov al, 02h
mov dx, offset filename
int 21h

; = write to file
mov bx, ax
xor ax, ax
mov ah, 40h
mov cx, offset write_buffer_end - offset write_buffer
mov dx, offset write_buffer
int 21h


; = close file
xor ax, ax
mov ah, 3eh
; bx=file handle
int 21h



; = openning file
mov ah, 3dh
mov al, 0
mov dx, offset filename
int 21h


; = read from file
mov bx, ax
xor ax, ax
mov ah, 3fh
mov cx, 16
mov dx, offset read_buffer
int 21h

; = close file
xor ax, ax
mov ah, 3eh
; bx=file handle
int 21h


; = print
mov ah, 09h
mov dx, offset read_buffer
int 21h




filename db "c:\myfile.txt", 0
write_buffer db "my name is saeid"
write_buffer_end db 0
read_buffer db 256 dup('$')



موفق باشيد.