IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Файлы и дескрипторы -->> Паскаль
Altair
сообщение 19.06.2004 21:06
Сообщение #1


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Как вставить в программу на паскале код открытия, закрытия и т.д. процедур для работы с файлами.
Иначе: мне нужно что-то вроде исходников процедур Assign, reset и т.д.
--------
Что такое дескриптор и можно-ли как то их использовать в пасе?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Dark
сообщение 21.06.2004 6:10
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


В общем то BlackShadow прав, но я добавлю еще кое что

FILE OPEN: Function 3Dh

IN:
ah= 3Dh
al= open mode

bits 7-3: нас неинтересует, лучше обнулять
bits 2-0: Access code
000 read only access
001 write only access
010 read and write access

DS:DX= указатель на имя файла в ASCIIZ формате ('test.txt'#0)

Returns:
CF=1 ошибка
AX= error code- don't worry about what they are, if the carry
is set, you didn't open the file.

CF=0 нет ошибок
AX= File Handle ; СОХРАНЯТЬ!!!

---- EXAMPLE ----

    [...]  ;header stuff

   .CODE          ;this stuff is used for all the examples

 FileName  db "TextFile.TXT",0
 FileHandle dw 0
 Buffer    db  300 dup (0)
 BytesRead dw  0
 FileSize  dd  0

   [...]  ;more stuff
   push ds
   mov     ax,3d00h   ; open file for read only
   mov     ax,seg FileName
   mov     ds,ax      ;we use CS, cause it's pointing to the CODE segment
                      ; and our file name is in the code segment
   mov     dx,offset FileName
   int     21h
   jc      FileError_Open

   mov     [FileHandle],ax

   [...]  ;etc...



----------------------------------------------------------------------------
FILE CLOSE: Function 3Eh

IN:
AH= 3Eh
BX= File Handle

RETURN:
CF=1 ошибка

---- EXAMPLE ----

    mov     bx,[FileHandle]
   mov     ah,3eh
   int     21h

----------------------------------------------------------------------------
FILE READ: Function 3Fh

IN:
AH= 3Fh
BX= File Handle
CX= сколько байт читать
DS:DX= куда поместить(FAR адрес памяти)

RETURN:
AX= количество прочитанных байт, если 0 - конец файла

---- EXAMPLE ----

    mov     bx,[FileHandle]
   mov     ax, seg buffer
   mov     ds,ax
   mov     dx,offset buffer
   mov     ah,3Fh
   mov     cx,300
   int     21h

   mov     [BytesRead],ax

----------------------------------------------------------------------------
FILE WRITE: Function 40h

IN:
AH= 40h
BX= File Handle
CX= сколько байт читать
DS:DX= откуда записывать на диск(FAR адрес памяти)

RETURN:
AX= количество записанных байт, если не равно тому что мы помещаем в cx - у нас ошибка

---- EXAMPLE ----

    mov     bx,[FileHandle]
   mov     ax,seg buffer
   mov     ds,ax
   mov     dx,offset buffer
   mov     ah,40h
   mov     cx,[BytesRead]
   int     21h

   cmp     cx,ax
   jne     FileError_Write


----------------------------------------------------------------------------
FILE CREATE: Function 3Ch

IN:
ah= 3Ch
cl= file attribute

bit 0: read-only
bit 1: hidden
bit 2: system
bit 3: volume label
bit 4: sub directory
bit 5: Archive
bit 6&7: reserved

DS:DX= указатель на имя файла в ASCIIZ формате ('test.txt'#0)


Returns:
CF=1 ошибка
AX= код ошибки

CF=0 нет ошибок
AX= File Handle ; СОХРАНЯТЬ!!
---- EXAMPLE ----

    mov     ah,3ch
   mov     ax,seg FileName
   mov     ds,ax      
   mov     dx,offset FileName
   mov     cx,0       ;no attributes
   int     21h
   jc      FileError_Create

   mov     [FileHandle],ax


----------------------------------------------------------------------------
FILE DELETE: Function 41h

IN:
ah= 41h
DS:DX= указатель на имя файла в ASCIIZ формате ('test.txt'#0)

Returns:
CF=1 ОШИБКА!!
AX= error code- 2= file not found, 3= path not found
5= access denied

CF=0 no error

---- EXAMPLE ----

    mov     ah,41h     ;kill the sucker
   mov     ax,seg FileName
   mov     ds,ax
   mov     dx,offset FileName
   int     21h
   jc      FileError_Delete


----------------------------------------------------------------------------
FILE MOVE POINTER: Function 42h

IN:
ah= 42h
BX= File Handle
CX:DX= 32 bit pointer куда переместиться?
AL= 0 offset from beginning of file
= 1 offset from curent position
= 2 offset from the end of the file

Returns:
CF=1 error occured
AX= error code- no move occured

CF=0 no error
DX:AX 32 bit pointer где мы оказались

---- EXAMPLE ----

    mov     ah,42h     ;НАХОЖДЕНИЕ РАЗМЕРА ФАЙЛА!!!
   mov     bx,[FileHandle]
   xor     cx,cx
   xor     dx,dx
   mov     al,2
   int     21h
   
   mov     [word low FileSize],ax
   mov     [word high FileSize],dx;load data into filesize


----------------------------------------------------------------------------
FILE CHANGE MODE: Function 43h

IN:
ah= 43h
DS:DX= указатель на имя файла в ASCIIZ формате ('test.txt'#0)
al= 0
returns file attributes in CX
al= 1
sets file attributes to what's in CX

Returns:
CF=1 error occured
AX= error code- 2= file not found, 3= path not found.
5= access denied

CF=0 no error

---- EXAMPLE ---- Lets erase a hidden file in your root directory...

FileName db "C:\msdos.sys",0

    [...]

   mov     ah,43h         ;change attribute to that of a normal file
   mov     ax,cs
   mov     ds,ax
   mov     dx,offset FileName
   mov     al,1           ;set to whats in CX
   mov     cx,0           ;attribute = 0
   int     21h

   mov     ah,41h         ;Nuke it with the delete command
   int     21h


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 15.07.2025 9:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"