Назад | Начало урока | Вперед
Содержание

Глава 1 стр 8
Читаем из файла в память и из памяти в новый файл
Эта программа считывает данные (16 байт) из файла и помещает их в память - в массив mas_w.
Затем из массива данные считываются в новый файл.
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h

Begin:

; ------------- Откроем файл ----------------
mov dx,offset File_from
call Open_file ;Открываем файл
jc Error_file ;Ошибка?

; ------------- Прочитаем файл ----------------
mov bx,ax ;поместим в bx номер файла
mov ah,3Fh ;Функция чтения файла
mov cx,10h ;сколько байт будет считано
lea dx,mas_w ;! Адрес, куда будут читаться данные
int 21h
; ------------- Закроем файл ----------------
call Close_file

;---открываем файл с помощью функции "создания"
LEA DX,File_to ;DS:DX указывают на путь к файлу
MOV CX,0 ;атрибуты файлы (здесь обычные)
MOV AH,3CH ;номер функции
INT 21H ;открываем файл
jc Error_file ;Ошибка открытия файла?
MOV Handle1,AX ;запоминаем номер файла

;---записываем в файл 16 байтов
MOV AH,40H ;номер функции
MOV BX,Handle1 ;номер файла в BX
MOV CX,10h ;число байт, которые надо записать
LEA DX,mas_w ;DS:DX указывают на буфер данных
INT 21H ;записываем данные
JC Out_prog ;проверка на ошибки
CMP CX,10h ;и их обработка
JNE Out_prog ;

mov ah,3Eh ;Закрываем файл
mov bx,Handle1
int 21h
mov dx,offset Mess_ok

Out_prog:

mov ah,9
int 21h
int 20h ;Выходим из программы

; ---------- Не смогли найти / открыть файл -----------------
Error_file:

mov dx,offset Mess_error
jmp Out_prog

; === Процедуры (подпрограммы) ===
; --- Открытие файла ---
Open_file proc
;процедура Open_file - открытие файла
;На входе: dx - адрес с именем файла

cmp Handle,0FFFFh
jne Quit_open
mov ax,3D00h
int 21h
mov Handle,ax
ret
Quit_open:
stc
ret
Handle dw 0FFFFh
Open_file endp

; --- Закрытие файла ---
Close_file proc

mov ah,3Eh
mov bx,Handle
int 21h
ret
Close_file endp

; === Данные ===
Handle1 dw 0
File_from db 'bukva04e.bmp',0
Mess_error db 'No open (find) file '
Mess_ok db 'Data from memory is writed in file succesfully!$'
File_to db 'file_to.txt',0, '$'

mas_w label word
rept 10

dw 0000h
endm

Finish equ $ ;Метка конца программы

CSEG ends
end Begin


Анализ

Поскольку данные считываются в 16-ричном виде из памяти и затем выводятся в новый
текстовый файл, то естественно, что они не могут отобразиться затем правильно на экране
при чтении этого нового файла. Следовательно, предварительно, перед помещением данных
из памяти в новый файл их надо конвертировать в ASCII-код. Тогда в новом файле мы
увидим дамп памяти.


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz