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

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


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

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

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

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

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

Номер выпуска:1492
Дата выхода:06.12.2011, 21:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:188 / 63
Вопросов / ответов:1 / 1

Консультация # 184642: Уважаемые эксперты! Пожалуйста, ответьте на вопрос:Нужно прочитать имя файла, записанного на диске «D», и вывести его на экран. Обработать ситуацию, когда дискета отсутствует при помощи INT24h. Ассемблер-Tasm.exe Исполняемый файл в формате EXE. очень надеюсь на вас=)...


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

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:Нужно прочитать имя файла, записанного на диске «D», и вывести его на экран. Обработать ситуацию, когда дискета отсутствует при помощи INT24h.
Ассемблер-Tasm.exe Исполняемый файл в формате EXE.
очень надеюсь на вас=)

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


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

Здравствуйте, Дмитрий!
Вот Вам программа

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

main	proc	
;установим обработчик int24h, старый можно не сохранять
	push	cs
	pop	ds		;ds=cs
	lea	dx, int_24	;ds:dx - адрес обработчика
	mov	ax, 2524h
	int	21h

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

	lea	dx, dta		;установим свою область DTA
	mov	ah, 1ah
	int	21h

	lea	dx, sMask	;a:\*.*
	mov	cx, 26h		;все:и readonly, и system, и hidden
	mov	ah, 4eh		;ищем файлы
	int	21h
	jc	NotFound	

	lea	si, dta.fname	;имя файла в DTA
	jmp	PrintMessage

NotFound:
	lea	si, sNotFound
	cmp	ax, 18		;ошибка "не найдено в поиске"
	je	PrintMessage
	lea	si, not_ready	;все остальное считаем, что устройство не готово
PrintMessage:			;вывод сообщения из ds:[si]
	mov	ah, 0eh		;сначала сделаем перевод строки
	mov	al, 0dh
	int	10h		;функцией БИОС
	mov	al, 0ah
PrintLoop:
	int	10h
	lodsb
	cmp	al, 0
	jne	PrintLoop

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

int_24:				;обработка ошибок
	push	ds
	push	di
	push	si
	mov	si, data
	mov	ds, si		;сообщения в сегменте данных
	and	di, 0fh		;младшие 4 бита - номер ошибки
	shl	di, 1		;по 2 байта на адрес
	mov	si, table_errors[di] ;si - адрес сообщения
	mov	ah, 0eh		;выводим с помощью БИОС
	mov	al, 0dh		;сначала перевод строки
	int	10h
	mov	al, 0ah
	int	10h
print_loop:			;выводим строку ds:si, заканчивающуюся нулем
	lodsb
	cmp	al, 0
	je	print_rc
	int	10h
	jmp	print_loop
print_rc:			;добавим общую часть
	lea	si, Retry_Cancel
print_rc_loop:
	lodsb
	cmp	al, 0
	je	wait_rc
	int	10h
	jmp	print_rc_loop
wait_rc:			;ждем R или C
	mov	ah,0
	int	16h
	cmp	ah,13h		;скан-код клавиши R
	jne	cmp_cancel
	mov	al,1		;возвращаем код "повторить операцию"
	jmp	short jmp_iret
cmp_cancel:
	cmp	ah,2eh		;скан-код клавиши C
	jne	wait_rc		;все остальное игнорируем
	mov	al,3		;возвращаем код "прервать операцию"
jmp_iret:
	pop	si
	pop	di
	pop	ds
	iret

code	ends

_DTA	struc
res	db	21 dup (?)
attr	db	?
time	dw	?
date	dw	?
len	dd	?
fname	db	13 dup (?)
_DTA	ends

data		segment
sNotFound	db	'Files not found',0
sAny		db	0dh,0ah,'Press any key$',0
sMask		db	'a:\*.*',0

;сообщения int24h
;таблица адресов
table_errors	dw	protect_disk
		dw	unknown_id
		dw	not_ready
		dw	unknown_com
		dw	crc_error
		dw	request_error
		dw	search_error
		dw	media_type
		dw	sector_not_fou
		dw	printer_error
		dw	write_fault
		dw	read_fault
		dw	general_fault
		dw	unknown_error
		dw	unknown_error
		dw	change_error
;сами сообщения
protect_disk	db	'Disk protected',0
unknown_id	db	'Unknown ID subunit',0
not_ready	db	'Disk not ready',0
unknown_com	db	'Unknown command',0
crc_error	db	'CRC error',0
request_error	db	'Request error',0
search_error	db	'Search error',0
media_type	db	'Unknown disk media',0
sector_not_fou	db	'Sector not found',0
printer_error	db	'Printer error',0
write_fault	db	'Write fault error',0
read_fault	db	'Read fault error',0
general_fault	db	'General failure',0
unknown_error	db	'Unknown error',0
change_error	db	'Disk change error',0
Retry_Cancel	db	' (Retry or Cancel) ',0

dta		_DTA	<>
data		ends

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

	end	main

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

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


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

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

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



В избранное