Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 2927
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2560
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2106
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1488
Дата выхода:14.11.2011, 20:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:189 / 61
Вопросов / ответов:1 / 1

Консультация # 184413: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Задание: Создать файл на съемном диске, открыть его для чтения и попытаться записать строку символов. Обработать ошибку при помощи INT24h и вывести на экран сообщение "Файл доступен для чтения". Надеюсь на вашу помощь...


Консультация # 184413:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Задание: Создать файл на съемном диске, открыть его для чтения и попытаться записать строку символов. Обработать ошибку при помощи INT24h и вывести на экран сообщение "Файл доступен для чтения". Надеюсь на вашу помощь

Дата отправки: 09.11.2011, 19:56
Вопрос задал: Ermak (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Ermak!
Вот такая получилась программа. Используется анализ ошибки. Прерывание 24h для данной задачи неприменимо.
Я добавил еще кое-что:
1) проверяем, есть ли нужный файл и с каким атрибутом
2) проверяем, какая ошибка
Не забудьте задать имя диска своей флешки в пути файла...
Смотрите, если что не так или непонятно, милости просим в мини-форум

Код :
code	segment	'code'		;начало
сегмента кода
	assume	cs:code,ds:data,ss:stk

main	proc	
	mov	ax, data	;адрес сегмента данных
	mov	ds, ax		;в ds
	mov	es, ax		;в es

	lea	dx, sName	;имя файла
	mov	ax, 4300h	;прочитаем его атрибут
	int	21h
	jc	AttrErr		;есть ошибка, смотрим какая
	test	cl, 1		;файл есть, смотрим атрибут Read-Only
	jnz	OpenReadOnlyFile;установлен? идем на открытие на запись

	mov	cx, 1		;нет атрибута Read-Only, установим!
	mov	ax, 4301h
	int	21h
	jnc	OpenReadOnlyFile;установился? идем на открытие на запись
AttrErr:			;ошибка!
	cmp	ax, 2		;ошибка "файл не найден"?
	jne	CreateError	;если нет, то на вывод сообщения, что файл создать невозможно!
				
CreateReadOnlyFile:		;файл, всего лишь, не найден
	lea	dx, sName	;создаем новый 
	mov	cx, 1		; с атрибутом Read-Only
	mov	ah, 3ch
	int	21h
	jnc	CreateOk	;создался? закрываем и заново открываем на запись

CreateError:			;файл создать невозможно
	lea	dx, sCrErr	;(например, не вставлена флешка!)
	mov	ah, 9
	int	21h
	jmp	PrintAny

CreateOk:			;файл создался
	mov	bx, ax
	mov	ah, 3eh		;закрываем
	int	21h

OpenReadOnlyFile:		;открываем на запись
	lea	dx, sName
	mov	ax, 3d01h
	int	21h
	mov	bx, ax		;описатель файла
	jnc	WriteToFile	;а "вдруг" не будет ошибки?    

	lea	dx, sOpErr	;мы обязательно попадем на ошибку ax=5 ("Нет доступа")
	jmp	PrintMessage	;выводим сообщение, что запись невозможна

WriteToFile:			;запись в файл    
	lea	dx, sString	;сюда мы никогда не попадем!
	mov	cx, lString
	mov	ah, 40h
	int	21h
	jc	WriteError	;с проверкой на ошибку

	lea	dx, sWrOk
	jmp	CloseFile
WriteError:
	lea	dx, sWrErr

CloseFile:			;закрывам файл
	mov	ah, 3eh
	int	21h

PrintMessage:			;вывод сообщения из ds:[dx]
	mov	ah, 9
	int	21h

PrintAny:
	lea	dx, sAny	;press any key
	mov	ah, 9
	int	21h

	mov	ah, 0
	int	16h		;ждем any key

	mov	ax, 4c00h
	int	21h		;выход в ДОС

main	endp

code	ends

data	segment
;имя файла, поставить имя диска флешки !!!!!!!!!!!!
sName	db	"f:\test.txt",0
;невозможно создать файл, например, путь не найден (флешка не вставлена)
sCrErr	db	"It's impossible to create a file",0dh,0ah,"$"
;невозможно записать в файл (что хотели, то и получили)
sOpErr	db	"It's impossible to write a file",0dh,0ah,"$"
;сообщения при записи (для полноты)
sWrErr	db	"Record error",0dh,0ah,"$"
sWrOk	db	"Record is ok",0dh,0ah,"$"
;чтобы окно сразу не закрывалось
sAny	db	"Press any key$"
;строка, которую будем писать в файл
sString	db	"String"
;длина строки
lString	equ	$-sString
data	ends

stk	segment	stack
	dw	100h dup (?)
stk	ends

	end	main

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 11.11.2011, 16:24

5
Спасибо за помощь!
-----
Дата оценки: 13.11.2011, 22:24

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное