WMmail.ru - сервис почтовых рассылок

пятница, 18 июня 2010 г.

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

Если выпуск не отображается корректно, то вы можете прочесть его на сайте

Звонок, изменяющий жизнь! Позвони в "Битву экстрасенсов"!
 
Реклама Отказаться от рекламы
Доставка воды в офис-дом! Доставка воды в офис-дом!
Судогодская-настоящая артезианская вода из Мещерского края. 19л. Кулеры. Скидки при заказе от 9 бутылей в месяц
 
Subscribe.Ru

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

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

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

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

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

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

Номер выпуска:1362
Дата выхода:19.06.2010, 04:00
Администратор рассылки:Лысков Игорь Витальевич, Старший модератор
Подписчиков / экспертов:236 / 63
Вопросов / ответов:1 / 1
IRC-канал по теме:#assembler

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



Вопрос № 179075:

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

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


Отвечает Лысков Игорь Витальевич, Старший модератор :
Здравствуйте, Филимонов Алексей Викторович.
Вот программа:
Код:

.model tiny
.code
.startup

FCB struc ;блок FCB
_drv db ?
_name db 8 dup (?)
_ext db 3 dup (?)
_curBlk dw ?
_rSize dw ?
_fSize dw ?,?
_date dw ?
_time dw ?
_reserv dw 8 dup (?)
FCB ends

jmp init ;на инициализацию
sAlready db 'Program already installed',0dh,0ah,'$'
sInstalled db 'Program installed',0dh,0ah,'$'
DName db 'c:\test',0 ;каталог, куда перенесем файл
FName db '_1.dat',0 ;имя файла
fcb1 FCB <> ;блок FCB для контроля удаления по FCB
Old21h dw 0, 0 ;старый вектор 21h

New21h : cmp ax, 0fefeh ;проверка на инсталяцию
jne OurVector
mov ax, 0efefh ;вернем признак, что уже инсталлирована
iret
OurVector: ;проверяем интересующие функции
cmp ah, 41h ;удаление по имени
je fun41h
cmp ah, 13h ;удаление по FCB
je fun13h
OldVector:
jmp dword ptr cs:[Old21h] ;все остальное - на старый вектор

fun13h: ;удаление по FCB, DS:DX = адрес FCB
push ds es si di dx ax ;сохраним регистры
mov si, dx ;адрес FCB

lea si, [si]._name ;на начало имени файла
push cs
pop es ;es=cs
lea di, fcb1._name ;es:di - заранее подготовленный FCB для интересующего файла
mov cx, _curBlk-1 ;длина имени+расширения
repe cmpsb ;сравниваем
jne NotOurFile ;не равно - не наш файл
jmp OurFile ;на перенос файла в директорию

fun41h: ;удаление по имени, DS:DX = имя файла
push ds es si di dx ax
mov si, dx ;смещение имени файла, который хотят удалить

push cs
p op es
lea di,FName ;ES:DI = адрес контролируемого имени
cmpLoop: ;сравниваем до нулей
cmpsb
jne NotOurFile ;не наш файл
mov al, [si-1] ;проверим на 0
or al, es:[di-1]
jnz cmpLoop ;если не 0, то продолжаем
OurFile: ;дошли до 0 - имена одинаковые - переносим
push cs ;сначала создадим подкаталог
pop ds
lea dx, DName ;DS:DX - адрес подкаталога
mov ah, 39h ;MakeDir
pushf
call dword ptr [Old21h] ;если уже есть, то даст ошибку, но это неважно

mov byte ptr [FName-1], '\' ;сформируем полный путь с именем заменой 0 на '\'
lea dx, FName
lea di, DName
mov ah, 56h ;перемещаем DS:DX в ES:DI
pushf
call dword ptr cs:[Old21h]
xor ax, ax ;пометим, что ок
mov byte ptr cs:[FName-1], al ;и вернем 0 в конце имени поддиректории
NotOurFile:
pop ax dx di si es ds ;восстановим регистрвы
jnz OldVector ;если придем сюда после несовпадения после сравнения,
; то уйдем на стандартное удаление
iret ;если после переноса в поддиректорию, то выходим из прерывания

;Инициализация резидента
Init: mov ax, 0fefeh ;проверим на повтор
int 21h
cmp ax, 0efefh ;не равно - инсталлируем
jne Continue

lea dx, sAlready ;иначе - сообщение
mov ah, 9
int 21h

mov ax, 4c00h ;и завершаемся
int 21h

Continue:
lea di, fcb1 ;подготовим FCB для нинтересующего файла
lea si, FName
mov ax, 2900h ;заполним структуру
int 21h

push es ;прочитаем старый вектор 21h
mov ax, 3521h
int 21h
mov cs:Old21h, bx
mov cs:Old21h+2, es
pop es

lea dx, New21h ;установим новый вектор
mov ax, 2521h
int 21h

mov es, word ptr cs:[2Ch] ;Получим сегмент окружения DOS.
mov ah, 49h ;Функция освобождения памяти.
int 21h ;Освобождаем память...

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

lea dx, Init ;адрес послед него байта резидента
int 27h ;оставляем резидентом и завершаемся

end
Программа перехватывает удаление ф айла _1.dat в текущей директории по функции 41h (по имени) и 13h (по FCB)
К сожалению, команда del _1.dat отрабатывается программой cmd.exe, которая является консольной Windows-программой.
Действие которой перехватить из досовской программы невозможно...
Но можно, например, перехватить удаление command /c del _1.dat
-----
Удачи!

Ответ отправил: Лысков Игорь Витальевич, Старший модератор
Ответ отправлен: 14.06.2010, 01:15
Номер ответа: 262092
Украина, Кировоград
Тел.: +380957525051
ICQ # 234137952
Mail.ru-агент: igorlyskov@mail.ru
Абонент Skype: igorlyskov

Оценка ответа: 5

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

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

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

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

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

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

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

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


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.16 от 26.05.2010
    Обсудить выпуск
     
     Как вам этот выпуск ?  Дайте свой отзыв  или  Оцените   5    4    3    2    1,   можно письмом:  5    4    3    2    1
     
    Реклама Отказаться от рекламы
    Скачай журнал "Ногтевой сервис" Скачай журнал "Ногтевой сервис"
    20 пошаговых мастер-классов. 100 идей для дизайна.

      Вспомни детство! Вспомни детство!
    Аппарат для приготовления сахарной ваты - отличное угощение!

      Худеть не напрягаясь - легко! Худеть не напрягаясь - легко!
    Теряйте лишние килограммы с поясом для похудения Vibra Tone.

     
     
    Реклама Отказаться от рекламы
    Ведущий портал по безопасности
    Все, что Вы хотите знать о рынке безопасности, есть на Sec.ru.<>www.sec.ru

    Супермаркет ПО Softkey.ru
    Огромный выбор лицензионного софта. Моментальная оплата!<>www.softkey.ru

    Всегда быть в курсе событий?
    Только актуальные новости из мира политики. Подробнее ...<>www.gzt.ru

     
      Группы
    «Чем хороша жизнь за границей?Все за и против»
    А может поехать за границу? Там говорят хорошо?! Отзывы и общение с теми , кто уехал из России, но не прочь пообщаться с соотечественниками
    «Управление сельским хозяйством района»
    В России наступил очередной кризис власти. Чиновники, даже за большую зарплату, уже не могут валять дурака. А народ не хочет терпеть издевательства тыся...
    «Европа - это просто!»
    Иммиграция и жизнь в ЕС. Иммиграционные консультации по Европе. Общение участников рассылки Европа - это просто! и рассылки Греческий язык, Греция, греки. Вопросы, пожелания, предложения и конечно точная информация по Европе только от жителей.
     
    Подписан адрес: admin10383.deep@blogger.com
    Код этой рассылки: comp.prog.assembler
    Архив рассылки
    Отписаться:  На сайте  Почтой
    Поддержка подписчиков
    Убрать рекламу
    Другие рассылки этой тематики
    Другие рассылки этого автора
    Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

    Комментариев нет:

    Отправить комментарий