13 августа 1999 |
|
#################### #################### ######### ########## ######### ### ######### ######### ######## ######### ######### ####### ###### ##### ####### ######### ########## ####### ###### ###### # #################### ######## # ####### # ######### ########## ######### ########## ### ######### 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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November