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

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


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

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

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 2375
∙ повысить рейтинг »
_Ayl_
Статус: Профессионал
Рейтинг: 1849
∙ повысить рейтинг »
vladisslav
Статус: 6-й класс
Рейтинг: 1227
∙ повысить рейтинг »

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

Номер выпуска:1345
Дата выхода:27.05.2010, 22:30
Администратор рассылки:Лысков Игорь Витальевич, Модератор
Подписчиков / экспертов:263 / 63
Вопросов / ответов:1 / 1
IRC-канал по теме:#assembler

Вопрос № 178568: Уважаемые эксперты! Требуется написать программу(с комментариями) Разработать резидентную программу для ОС MSDOS.Программа может быть выполнена в виде exe или com файла. При попытке отформатировать диск программа выдает сообщение о невозможности тако...



Вопрос № 178568:

Уважаемые эксперты! Требуется написать программу(с комментариями) Разработать резидентную программу для ОС MSDOS.Программа может быть выполнена в виде exe или com файла. При попытке отформатировать диск программа выдает сообщение о невозможности такой операции и всегда возвращает вызвавшей программе код ошибки.
Ассемблер TASM.

Отправлен: 22.05.2010, 18:22
Вопрос задал: Филимонов Алексей Викторович, 1-й класс
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич, Модератор :
Здравствуйте, Филимонов Алексей Викторович.
Примерная программа ниже. Программа перехватывает выполнение функции 5 (форматирование) и в случае попытки форматировать взводит флаг C и возвращает код ошибки "защиты записи".
К сожалению, проверить не могу, флоппи нет в принципе, а на жестком не хочется пробывать...
Код:

.model tiny
.code
.startup
jmp init ;на инициализацию
New13h: ;новый вектор 13h
cmp ax, 1234h ;проверка на повторную инсталяцию
jne CmpFormat
mov ax, 4321h ;программа уже инсталирована
iret
CmpFormat:
cmp ah, 05h ;формат?
jne ToOld13h ;нет - на старый вектор
;просто stc ничего не даст,
; после iret флаг потеряется!
push bp ;Но, флаг FC мы можем в звести в стеке!
mov bp, sp ;будем адресовать с помощью bp
or byte ptr [bp+6], 1 ;в стеке: [bp] = старый bp
; [bp+2] = IP
; [bp+4] = CS
; [bp+6] = FLAGS
;0001h - маска флага C
pop bp ;восстановим bp
mov ah, 3 ;код ошибки "Защита записи"
iret ;выход из прерывания,
; по выходу взведется флаг FC

ToOld13h:
jmp cs:dword ptr old13h ;все остальное на отработку
; по старому вектору

old13h dw ?, ? ;адрес старого вектора 13h

init: ;инициализация
mov ax, 1234h ;проверим на повторную загрузку
int 13h
cmp ax, 4321h
je finish ;просто завершаемся
push bx es
mov ax, 3513h ;узнаем адрес старого вектора
int 21h ; в es:bx
mov old13h, bx ;сохраняем
mov old13h+2, es
pop es bx

lea dx, New13h ;устанавливаем новый вектор 13h
mov ax, 2513h
int 21h

lea dx, loaded ;сообщение
mov ah, 9
int 21h

lea dx, init ;оставляем в памяти резидентом
int 27h ; до адреса init

finish:
lea dx, already ;сообщение
mov ah, 9
int 21h
mov ax, 4c00h ;обычный выход при повторной загрузке
int 21h

.data
loaded db 'Program loaded$'
already db 'Program already loaded$'

end

-----
Удачи!

Ответ отправил: Лысков Игорь Витальевич, Модератор
Ответ отправлен: 23.05.2010, 22:20
Номер ответа: 261597
Украина, Кировоград
Тел.: +380957525051
ICQ # 234137952
Mail.ru-агент: igorlyskov@mail.ru
Абонент Skype: igorlyskov

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261597 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.16 от 26.05.2010

    В избранное