Новичок
Джуниор
Регистрация: 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.
|