1. Заголовок или название темы должно быть информативным 2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE] 3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора. 5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM! 6. Проверяйте программы перед тем, как выложить их на форум!!
Как вставить в программу на паскале код открытия, закрытия и т.д. процедур для работы с файлами. Иначе: мне нужно что-то вроде исходников процедур Assign, reset и т.д. -------- Что такое дескриптор и можно-ли как то их использовать в пасе?
--------------------
Помогая друг другу, мы справимся с любыми трудностями! "Не опускать крылья!" (С)
В общем то 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 - у нас ошибка
---------------------------------------------------------------------------- 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 где мы оказались
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
--------------------
- Где я? - Во тьме. - В какой тьме? - Во тьме твоего мозга.
; VERY, VERY simple ANSI/text viewer ; ; Coded by Draeden [VLA] ;
DOSSEG .MODEL SMALL .STACK 200h .CODE Ideal
;===- Data -===
BufferSeg dw 0
ErrMsgOpen db "Error opening `" FileName db "ANSI.TXT",0,8,"'$" ;8 is a delete character ;0 is required for filename ;(displays a space) FileLength dw 0
;===- Subroutines -===
PROC DisplayFile NEAR push ds
mov ax,cs mov ds,ax mov ax,3d00h ;open file (ah=3dh) mov dx,offset FileName int 21h jc OpenError mov bx,ax ;move the file handle into bx
mov ds,[BufferSeg] mov dx,0 ;load to [BufferSeg]:0000 mov ah,3fh mov cx,0FFFFh ;try to read an entire segments worth int 21h
mov [cs:FileLength],ax
mov ah,3eh int 21h ;close the file
cld mov si,0 mov cx,[cs:FileLength] PrintLoop: mov ah,2 lodsb mov dl,al int 21h ;print a character
dec cx jne PrintLoop
pop ds ret
OpenError: mov ah,9 mov dx,offset ErrMsgOpen int 21h
pop ds ret ENDP DisplayFile
;===- Main Program -===
START: mov ax,cs mov ds,ax mov bx,ss add bx,200h/10h ;get past the end of the file mov [BufferSeg],bx ;store the buffer segment
call DisplayFile
mov ax,4c00h int 21h END START
--------------------
- Где я? - Во тьме. - В какой тьме? - Во тьме твоего мозга.