PDA

View Full Version : سوال: کار با فایلها در اسمبلی



kh1387
پنج شنبه 28 خرداد 1388, 14:43 عصر
با سلام
من میخوام یه برنامه ای بنویسم (با اسمبلی) که کارهای زیر رو انجام بده:
1- ایجاد فایل
2- نوشتن اطلاعاتی در فایل
3- بستن فایل
4- باز کردن فایل
5- خواندن اطلاعات از فایل
دوستان اگه کسی مثالی چیزی داره ممنون میشم کمکم کنه
با تشکر از شما خوبان و مسئولان سایت برنامه نویس:بوس:

tdkhakpur
پنج شنبه 28 خرداد 1388, 15:12 عصر
سلام
از وقفه های داس که مربوط به FCB هست میتوانید استفاده کنید خیلی ساده هستند فقط باید کاربرد هر رجیستر را بدانید.

Open-Source
پنج شنبه 28 خرداد 1388, 22:42 عصر
این یه نمونه کد کار با فایل هستش:

name "fileio"

; general rules for file system emulation:

; 1. the emulator emulates all drive paths in c:\emu8086\vdrive\
; for example: the real path for "c:\test1" is "c:\emu8086\vdrive\c\test1"

; 2. paths without drive letter are emulated to c:\emu8086\MyBuild\
; for example: the real path for "myfile.txt" is "c:\emu8086\MyBuild\myfile.txt"

; 3. if compiled file is running outside of the emulator rules 1 and 2 do not apply.

; ================================================== ================================
; run this example slowly in step-by-step mode and observe what it does.
; ================================================== ================================

org 100h

jmp start

dir1 db "c:\test1", 0
dir2 db "test2", 0
dir3 db "newname", 0
file1 db "c:\test1\file1.txt", 0
file2 db "c:\test1\newfile.txt", 0
file3 db "t1.txt", 0
handle dw ?

text db "lazy dog jumps over red fox."
text_size = $ - offset text
text2 db "hi!"
text2_size = $ - offset text2

start:
mov ax, cs
mov dx, ax
mov es, ax


; create c:\emu8086\vdrive\C\test1
mov dx, offset dir1
mov ah, 39h
int 21h

; create c:\emu8086\MyBuild\test2
mov dx, offset dir2
mov ah, 39h
int 21h

; rename directory: c:\emu8086\MyBuild\test2 to c:\emu8086\MyBuild\newname
mov ah, 56h
mov dx, offset dir2 ; existing.
mov di, offset dir3 ; new.
int 21h



; create and open file: c:\emu8086\vdrive\C\test1\file1.txt
mov ah, 3ch
mov cx, 0
mov dx, offset file1
int 21h
jc err
mov handle, ax
; write to file:
mov ah, 40h
mov bx, handle
mov dx, offset text
mov cx, text_size
int 21h
; close c:\emu8086\vdrive\C\test1\file1.txt
mov ah, 3eh
mov bx, handle
int 21h
err:
nop


; rename fileL c:\emu8086\vdrive\C\test1\file1.txt to c:\test1\newfile.txt
mov ah, 56h
mov dx, offset file1 ; existing.
mov di, offset file2 ; new.
int 21h


; delete file c:\emu8086\vdrive\C\test1\newfile.txt
mov ah, 41h
mov dx, offset file2
int 21h


; delete directory: c:\emu8086\vdrive\C\test1
mov ah, 3ah
mov dx, offset dir1
int 21h






; create and open file: c:\emu8086\MyBuild\t1.txt
mov ah, 3ch
mov cx, 0
mov dx, offset file3
int 21h
jc err2
mov handle, ax
; seek:
mov ah, 42h
mov bx, handle
mov al, 0
mov cx, 0
mov dx, 10
int 21h
; write to file:
mov ah, 40h
mov bx, handle
mov dx, offset text
mov cx, text_size
int 21h
; seek:
mov ah, 42h
mov bx, handle
mov al, 0
mov cx, 0
mov dx, 2
int 21h
; write to file:
mov ah, 40h
mov bx, handle
mov dx, offset text2
mov cx, text2_size
int 21h
; close c:\emu8086\MyBuild\t1.txt
mov ah, 3eh
mov bx, handle
int 21h
err2:
nop



; delete file c:\emu8086\MyBuild\t1.txt
mov ah, 41h
mov dx, offset file3
int 21h




; delete directory: c:\emu8086\MyBuild\newname
mov ah, 3ah
mov dx, offset dir3
int 21h


ret


امیدوارم به دردت بخوره:لبخندساده:

kh1387
یک شنبه 31 خرداد 1388, 12:31 عصر
دوست خوبم open-source (http://barnamenevis.org/forum/member.php?u=79096)
خیلی متشکرم از پاسختان
در کتاب آقای جعفر نژاد قبل از برنامه .286C نوشته شده
در موردش توضیحی بدید ممنون می شم.

Open-Source
یک شنبه 31 خرداد 1388, 18:22 عصر
lمیتونید بگید که آقای جعفرنژاد از چه اسمبلری استفاده میکنند.؟(به نظرم MASM کار میکنند!!!)
این .286C فکر کنم استفاده از بهضی دستورات مثل push را فراهم میکند(البته حدس میزنم).
من با fasm کار میکنم که نیازی به این چیزا نداره.

از دوستانی که با MASM کار میکنند کمک بخواه.

kh1387
چهارشنبه 03 تیر 1388, 08:43 صبح
.286C ابتدای برنامه مربوط به پردازنده های 80286 میشه
حالا سؤال من اینه که من کد ایجاد فایل رو می نویسم ولی برنامه فایلی ایجاد نمیکنه
علت چی می تونه باشه؟
متشکرم

.data
dir db "c:\test.dat",00h
.code
main proc
assume ds:@data
mov ah,3ch
mov cx,00h
lea dx,dir
int 21h
jc ali
mov ax,4c00h
int 21h
ali:
main endp
end main

kh1387
دوشنبه 08 تیر 1388, 22:28 عصر
کسی از دوستان نمیتونه راهنمایی کنه؟

leyla.az
جمعه 04 دی 1388, 20:55 عصر
بنویسید: Data segmentاین دستورات رو در بخش

PATHNAME DB 'FILENAME.ASC',0
HANDLE DW ?

این تابع رو هم در بخش کد:

CREATEFILE PROC NEAR
MOV AH,3CH
MOV CX,00
LEA DX,PATHNAME
INT 21H
MOV HANDLE,AX
RET
CREATEFILE ENDP


و توابع مفید دیگه:
;----------------------------------------
; CLOSE FILE
;----------------------------------------

CLOSEFILE PROC NEAR
MOV AH,3EH
MOV BX,HANDLE
INT 21H
RET
CLOSEFILE ENDP
;---------------------------------------------------------
;----------------------------------------
; OPEN FILE
;----------------------------------------

OPENFILE PROC NEAR
MOV AH,3DH
MOV AL,0
LEA DX,PATHNAME
INT 21H
MOV HANDLE,AX
RET
OPENFILE ENDP
;---------------------------------------------------------
;----------------------------------------
; READ FILE
;----------------------------------------

READFILE PROC NEAR
MOV AH,3FH
MOV BX,HANDLE
MOV CX,20
LEA DX,READNAME
INT 21H
RET
READFILE ENDP

mohammadtaheri2008
جمعه 27 دی 1392, 16:14 عصر
سلام دوستان
من تازه عضو شدم و تعریف سایت رو خیلی شنیدم
من یک پروژه دارم که یا باید با زبان اسمبلی باشه در محیط emu8085 یا به زبان اسمبلی در سی ++ باشه
موضوعش هم کتاب خانه هستش
کاربر ثبت کنه - کتاب ثبت کنه - جستجو داشته باشه - حذف داشته باشه
کسی هست که برنامش رو داشته باشه
خیلی بهش احتیاج دارم . به نمرش خیلی احتیاج دارم
ممنون میشم بهم برسونین