Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1493 | Дата выхода: | 07.12.2011, 21:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 187 / 63 | Вопросов / ответов: | 1 / 1 | Консультация # 184652: Здравствуйте! У меня возникли сложности с таким вопросом:Создать на диске «А» файл. Изменить дату его создания на 31 декабря 2000 года. Обработать варианты, когда дискета отсутствует при помощи INT24h. Ассемблер-Tasm.exe Исполняемый файл в формате EXE. очень надеюсь на вас=)... Консультация # 184652: Здравствуйте! У меня возникли сложности с таким вопросом:Создать на диске «А» файл. Изменить дату его создания на 31 декабря 2000 года. Обработать варианты, когда дискета отсутствует при помощи INT24h. Ассемблер-Tasm.exe Исполняемый файл в формате EXE. очень надеюсь на вас=) Дата отправки: 02.12.2011, 16:56 Вопрос задал: Дмитрий (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Дмитрий! Программа создает в корне дискеты файл нулевой длины test.txt Которому тут же меняет дату создания на заданную.
Код : .186 ;для команд shl ax,5 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, fName ;имя файла mov cx, 0 ;без атрибутов mov ah, 3ch ;создаем int 21h jc CreateError ;если ошибка mov bx, ax ;handle файла mov ax, 5700h ;читаем дату(dx) и время файла(cx) int 21h jc GetTimeError ;если ошибка ;время оставляемтем же, меняем дату mov ax, 2000 ;год mov dh, 12 ;месяц mov dl, 31 ;день call SetDate ;сформируем в DX в нужном формате mov ax, 5701h ;установим дату int 21h jc SetTimeError ;если ошибка lea dx, sOk ;все отработало! Close: mov ah, 3eh ;закрываем файл int 21h PrintMessage: mov ah, 9 ;сообщение из ds:dx 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 ;выход в ДОС CreateError: ;ошибка создания lea dx, sCreateError jmp PrintMessage GetTimeError: ;ошибка чтения даты lea dx, sGetTimeError jmp Close SetTimeError: ;ошибка установки даты lea dx, sGetTimeError jmp Close main endp ;упаковка даты в следующий формат (побитно): ;yyyyyyym mmmddddd, ;yyyyyyy - 0-119, 0 соответствует 1980 ;mmmm - 1-12, месяц ;ddddd - 1-31, день ;на входе: ax - год, dh - месяц, dl - день ;упакованная дата в dx SetDate proc sub ax, 1980 ;отнимаем базу shl ax, 9 ;сдвигаем в крайнее левое положение xchg ah, dh ;dh - год на месте, ah - месяц, al = 0 shr ax, 3 ;устанавливаем месяц в нужную позицию or dx,ax ;"втыкаем" месяц на свое место ret SetDate 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 data segment sOk db 0dh,0ah,'File create date is changed$' sCreateError db 0dh,0ah,'File create error$' sGetTimeError db 0dh,0ah,'Get time error$' sSetTimeError db 0dh,0ah,'Set time error$' sAny db 0dh,0ah,'Press any key$',0 fName db 'a:\test.txt',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 data ends stk segment stack dw 100h dup (?) stk ends end main
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий