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:
Iron - two circuits connecting Covox'a.
Information - introduce a time limit on exchanges in Moscow.
Advertising - Advertisements and announcements ...

В этот день...   29 April