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

Глава 1 стр 7
Читаем данные из графического файла в память начиная с метки
Показана программа, которая считала 64 байта из графического файла bukva04e.bmp
в память компьютера. Мы наглядно увидели несколько байт (64 байт), скачанных
в память по адресу, на который указывает метка Finish ($ - метка конца программы).
Здесь применен оператор equ:

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

Эта программа более компактна, чем предыдущая, так как не выводится сообщения
об успешном завершении и не используется массив, для хранения скачанных байт.
Байты из файла скачаиваются в память сразу за кодом программы, который заканчивается
знаком $.


CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h

Begin:

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

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

; ------------- Закроем файл ----------------
call Close_file

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

mov ah,2
mov dl,7
int 21h
ret

; === Процедуры (подпрограммы) ===
; --- Открытие файла ---
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

; === Данные ===
File_name db 'bukva04e.bmp',0
Finish equ $ ;Метка конца программы

CSEG ends
end Begin


Вопрос:

Что в общем случае должно быть на входе процедуры Close_file ?


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

Hosted by uCoz