Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 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
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий