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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

Народное голосование ПРЕМИИ РУНЕТА-2007!
Голосуем за RusFAQ.ru >>

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

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

Выпуск № 902
от 16.11.2007, 04:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 375, Экспертов: 21
В номере:Вопросов: 1, Ответов: 1


Вопрос № 108890: Написал резидент который создает файл при обращении к 21h (вывод строки на экран) прерыванию и что-то он не работает подскажите в чем дело. И почему при востановлении из стека регистров CX и AX на метке B12 значение регистра CX пропадает и данные (09...

Вопрос № 108.890
Написал резидент который создает файл при обращении к 21h (вывод строки на экран) прерыванию и что-то он не работает подскажите в чем дело. И почему при востановлении из стека регистров CX и AX на метке B12 значение регистра CX пропадает и данные (09h) предназначенные для регистра AX попадают в CX.
Да, в одной из ваших рассылок видел, чтобы программу оставить резидентно необходимо вополнить 27h прерывание. Какой вариант лучше? Буду благодарен если пришлете правильный код программы, а то мучаюсь уже который день. Спасибо.

Приложение:

Отправлен: 11.11.2007, 04:33
Вопрос задал: Каликов Сергей Александрович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Каликов Сергей Александрович!

По не резидентной части:
mov ah,31h
LEA dx, init
int 21h

Эта функия резервирует объем памяти указанный в параграфах.
Параграф - 16-ти байтная область памяти
При компиляции Вашей программы компилятор записывает число 012Bh=299 т.е. резервируемая область памяти равна 4784(299*16) байта, при необходимых 299 байтах .
В Вашем случае выгодно использовать:
LEA dx, init
int 27h

вместо дополнительных вычислений:
mov ah,31h
LEA dx, init
shr dx,4
inc dx

int 21h


По резидентной части:
a10:
cmp ah,9
jne exit
;сохраняем все используемые регистры
pusha
;на момент вызова обработчика достоверно известен только CS
;DS - не известен, по этому его и определяем DS=CS, для функции 3Ch
;т.к. для открытия(создания) имя файла должно указыватся парой DS:DX
push ds
push cs
pop ds
mov ah,3ch
mov cx,00
lea dx,fil;У Вас обработчик будет пытатся открыть файл с именем
;по адресу DS:DX=??:103h, а там может быть и код вместо имени
pushf;возврат будет по IRET-это 3-и байта(flag, CS:IP)
CALL DWORD PTR cs:[saveint9]
;закрываем открытый файл
;т.к. при повторном открытии (уже открытого файла)может появится ошибка
;выполнения функции, которая Вами не учитывается.
mov bx,ax
mov ah,3eh
pushf;
CALL DWORD PTR cs:[saveint9]
pop ds;востанавливаем все регистры
popa
;в принципе тут можно вернутся по IRET
;если не нужно выводить строку
exit:
jmp cs:[saveint9]


Приблизительно так я бы написал такой обработчик.
ps: Для использования команд : pusha | pushf | popa | shr dx,4
поставте в начале программы директиву: .186- разрешить команды 186-го процессора
Удачи!
---------
И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Специалист)
Ответ отправлен: 12.11.2007, 17:55


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

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.62.1 от 14.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное