|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.02.2011, 13:44 | #1 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
резидентная программа (обработка функции 9h прерывания 21h)
Разбираю программу из калашникова. Должна менять выводимую строку и быть резиднетной. Некуоторое оказалось непонятным что автор написал. Кто может, прокомменте.
Код:
jmp dword ptr cs:[Int_21h_vect];?????????????????????? почему нельзя написать без cs? 2. push ds push dx push cs; Адрес строки должен быть в dsx pop cs;;;;почему сразу же выталкиваем cs??? вообще в книге было написано pop ds. Но это наверно опечатка, потому что из стека в обратном порядке должны извлекаться значения. Если же на самом деле cs, то какой имеет смысл загонять значение в стек и сразу же потом извлекать его? 3. Зачем нужна pushf (втолкнуть флаги)?? 4. Код:
А почему тут автор пишет про другие регистры? И где можно прочитать когда и где использовать какие регистры для сектора и смещения? 5. Код:
6. Код:
Код:
|
24.02.2011, 15:18 | #2 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
попробовал дабы лучше разобраться в этой теме написать программу, которая перехватывает 16е прерывание и изменяет код нажатой клавиши.
Вот только программа у меня скомпилироваться скомпилировалась, а во время работы вылазят разные ошибки: this interput isnt't defined yet, its avaliable to custom functions. You can define this interput by modyfying interput vector table refer to the list of supported interputs and global memory table это написал отладчик emu8086 16-битная MS-DOS пишет что CPU получил illegal instruction CS:08da IP4e OP:8d d6 d7 00 4f Код:
mov word ptr Int_16h_vect, bx mov word ptr Int_16h_vect+2, es особенно вторая, где +2. Что это такое О_О вообще непонятно |
25.02.2011, 10:38 | #3 | ||||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Но указатель указателем. вот и получается что вектор прерывания весит 32 бита, и выбирать его нужно двумя операциями по словам каждая. потому читай внимательно фразу: Цитата:
Цитата:
Цитата:
I'm learning to live...
|
||||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Резидентная программа | lilufonel | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 25.05.2010 01:27 |
Резидентная программа. Работа с буфером клавиатуры | Vohakisa | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 21.06.2009 00:16 |
Резидентная программа! | Nemesisking | Общие вопросы C/C++ | 8 | 29.09.2007 08:46 |