#################### ####################
######### ########## ######### ###
######### ######### ########
######### ######### ####### ###### ##### #######
######### ########## ####### ###### ###### #
#################### ######## # ####### #
######### ##########
######### ########## ###
######### a$h ####################
(c) Demiurge Ash
Второй урок: загрузка файла.
Пояснения сразу даются по тексту исходника.
;------------------------------------
.MODEL tiny
.CODE
ORG 256
start:
;------подготовка------
mov si,80h ;берем адрес коммандной строки (КС)
push si ;запоминаем
lodsw ;перекидываем из КС в регистр ax
;кол-во символов и, заодно, пропускаем
;первый пробел
xor cx,cx ;обнуляем регистр
or cl,al ;если кол-во символов в КС равно нулю,
je error ;то переходим на ошибку синтаксиса КС
space:
lodsb ;символ из КС в регистр ax
cmp al,20h ;проверка на пробел
je space ;если да то пропускаем
dec si ;уменьшаем значение и
mov dx,si ;запоминаем адрес КС в регистре dx
pop si ;вспоминаем первоначальный адрес КС
add si,cx ;прибавляем к нему длину всей КС
inc si ;переход на конец строки
mov byte ptr [si],0 ;зaнyляem конец строки
;----открытие файла----
mov ax,ЗdOOh ;подготовка вызова функции DOS
;для открытия файла (только чтение)
int 21h ;вызов функции
jb no_file ;если такого файла нет, то переходим на
;ошибку открытия файла
;-----загрузка файла---
mov bx,ax ;в bx номер полученного дескриптора
mov dx,offset buff ;адрес буфера загрузки файла
mov ah,Зfh ;номер функции
mov cx,8000h ;задаем максимальный размер буфера
;загрузки (файл можно грузить частями)
int 21h ;вызов функции
jb no_file ;если файл не найден, то переходим на
;ошибку открытия файла
; файл загружен,
; делайте c ним что хотите ;-)
jmp exit ;на выход
;----печать сообщений--
no_file:
mov dx,offset Mess2 ;адрес первого сообщения
jmp print
error:
mov dx,offset Mess1 ;адрес второго сообщения
print:
mov ah,9
int 21h ;печать сообщений
;----ВЫХОД-------------
exit:
mov ah,Чch
int 21h ;выход в DOS
;----------------------
Mess1 db 'Command line syntax: SECOND filename.',13,10,'$'
Mess2 db 'File not found',13,10,'$'
buff db 8000h (?)
end start
;------------------------------------
Все это набивается в любом редакторе (очень удобен для этого
встроеный в Dos Navigator), затем списывается на диск, в файл c
расширением, к примеру, second.asm
Теперь, если y вас есть ассемблер, можно откомпилить в
com-файл. Через коммандную строку задаем:
tasmx /m2 second.asm
и получаем объектный файл second.obj, линкyem его в .com:
tlink /t /x second.obj
и лицезреем новый файл second.com - запускайте!
;------------------------------------
Thanks 4 advices 2 Pyrodex and Dark Lion.
Other articles: