Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 23:08   #1
OkiDoki
Новичок
Джуниор
 
Регистрация: 09.01.2011
Сообщений: 1
По умолчанию Создание каталога

Доброго времени суток!
Имеется программа, которая должна создать каталог, в нем файл, в файл записать строку
вот текст
Код:
.model small
.stack 100h
 
.data
CR=13   ; код символа возврата каретки
LF=10   ; код символа перевода строки
 
filename db "SPO\KURS_SPO.txt",0
dname db "SPO", 0
handle dw ?
text db "Seize the day or die regreting"
text_size = $ - offset text
 
LOGO_R DB 05 ;
LOGO_C DB 00 ; 
LOGO   DB "Eto programma", cr, lf ; текст заставки
       DB "Sozdast calalog & file", cr, lf

LOGO_COLOR      DB 0Fh; цвет заставки
LOGO_L DW LOGO_COLOR-LOGO ; длина строки заставки
 
 
ERR_MKDIR DB "Can't create a catalog", cr, lf ; сообщение об ошибке
        DB "Program will be terminated", cr, lf ; создания каталога
        DB "Press any key..."
ERR_OPEN_FILE DB "Can't open file kurs_SPO.txt.", cr, lf ; сообщение об ошибке
        DB "Program will be terminated", cr, lf ; открытия файла
        DB "Press any key..."
ERR_CLOSE DB "Can't close file kurs_SPO.txt.", cr, lf ; сообщение об ошибке
        DB "Program will be terminated", cr, lf ; закрытия файла
        DB "Press any key..."
ERR_R   DB 1 ; номер строки для вывода сообщений об ошибке
ERR_C   DB 0 ; номер столбца для вывода сообщений об ошбке
ERR_COLOR DB 0Ch ; цвет сообщения FrgbYRGB 00001100 – ярко красные буквы на черном
ERR_L   DW ERR_R-ERR_OPEN_FILE ; длина сообщения об ошибке открытия файла
 
LAST_SEG SEGMENT 'ENDSEG'       ; фиктивный сегмент для определения размера программы
LAST_SEG ENDS
 
.code
 
start:
        
        mov ax, @data
        mov ds, ax
        
        int 21h
 
; освобождение избыточной памяти 
        mov ax, LAST_SEG        ; сегментный адрес конца программы
        mov dx, es              ; сегментный адрес начала программы
        sub ax, dx              ; размер программы в параграфах
        mov bx, ax              ; оставим его в BX
        MOV ah, 4ah             ; функция изменения размера блока
        int 21h
 
 
        mov bp,OFFSET LOGO      ;передаем в пару регистров ES:BP адрес начала строки
        MOV AX, DS
        MOV ES, AX
        MOV DH,LOGO_R   ;строка
        MOV DL,LOGO_C   ;столбец
        MOV CX,LOGO_L   ;устанавливаем длину строки
        MOV BL,LOGO_COLOR       ;цвет сообщения
        MOV AH, 13H     ;функция вывода строки в режиме телетайпа
        MOV AL, 1       
        INT 10H 
 
        MOV AH,00h    
        MOV AH, 00              
        MOV AL, 0DH            
        Int 10h                 
 
        
 
        lea dx,dname    ; создание каталога
        mov ah,39h     
        int 21h
        jc ERROR_MAKEDIR
        xor cx,cx       ;аттрибуты файла - обычный
        lea dx,filename ; создание файла в каталоге
        mov ah,3ch
        int 21h
        jc ERROR_OPEN_FILE      ;в случае ошибки
        mov handle,ax
 
;write to file
        mov ah,40h
        mov bx,handle
        mov dx, offset text
        mov cx, text_size
        int 21h
;close file
        mov ah,3eh
        mov bx, handle
        int 21h
        jc ERROR_CLOSE
        
ERROR_OPEN_FILE: ;обработка ошибки открытия файла
 
        MOV BP,OFFSET ERR_OPEN_FILE ; DS:BP содержит адрес строки с
        MOV AX, DS      ; сообщением об ошибке открытия файла
        MOV ES, AX
        MOV DH,ERR_R     
        MOV DL,ERR_C    
        MOV CX,ERR_L    
        MOV BL,ERR_COLOR        
        MOV AH, 13H     ; MOV AX,1301h – более эффективно, но менее читабельно
        MOV AL, 1
        INT 10H
 
        MOV AH,00h      ; ожидание нажатия клавиши
        INT 16h         
        JMP EXIT_LABEL
 
ERROR_MAKEDIR: 
        MOV BP,OFFSET ERR_MKDIR 
        MOV AX, DS     
        MOV ES, AX
        MOV DH,ERR_R     
        MOV DL,ERR_C    
        MOV CX,ERR_L    
        MOV BL,ERR_COLOR        
        MOV AH, 13H     
        MOV AL, 1
        INT 10H
 
        MOV AH,00h     
        INT 16h         
        JMP EXIT_LABEL
 
ERROR_CLOSE: ;
 
        MOV BP,OFFSET ERR_CLOSE
        MOV AX, DS 
        MOV ES, AX
        MOV DH,ERR_R     
        MOV DL,ERR_C    
        MOV CX,ERR_L    
        MOV BL,ERR_COLOR        
        MOV AH, 13H   
        MOV AL, 1
        INT 10H
 
        MOV AH,00h      
        INT 16h         
        JMP EXIT_LABEL
 
EXIT_LABEL: 
 
        mov ah, 00h 
        mov al, 03h ; восстановить текстовый видеорежим экрана
        int 10h
 
        mov ax, 4c00h
        int 21h
 
END     start
Проблема: при успешном создании каталога и файла, записи в файл - выводит ошибку все равно

________
к сожалению, на форуме нет тега [ASM]
поэтому код нужно оформлять
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)

Модератор.

Последний раз редактировалось Serge_Bliznykov; 10.01.2011 в 00:18.
OkiDoki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание каталога Mr.X. Microsoft Office Excel 5 29.12.2016 12:38
Создание электронного каталога Владимир888 Помощь студентам 6 13.07.2010 08:29
Поиск каталога D_A_akella Общие вопросы Delphi 4 19.04.2010 10:53
Создание каталога и файла. aleksandr278 Общие вопросы Delphi 6 25.03.2010 13:46