Резидент из 10 выпуска.
Int_21h_proc proc
pushf
cmp ah,9
je Ok_09
popf
jmp dword ptr cs:[Int_21h_vect]
Ok_09:
push ds
push dx
push cs
pop ds
mov dx,offset My_string
pushf //заносится в стек. В стеке уже находятся ds, dx
call dword ptr cs:[Int_21h_vect]
pop dx //И снова
pop ds //
popf ////извлекается позже чем, dx и ds
iret
Int_21h_vect dd ?
My_string db 'Моя строка!$'
int_21h_proc endp
Остальное вроде понял.
Отправлен: 01.03.2005, 08:50
Вопрос задал: psevdo (статус: 1-ый класс)
Всего ответов отправлено: 3
Отвечает: Котиев Зураб
Здравствуйте, psevdo!
Остальное вроде понял.
Зато я вопроса не понял.
Судя по всему ты не понял почему делаем popf в конце?
но ты сохранил флаги в стеке перед
cmp ah,9
je Ok_09
а потом делаешь прыжок на метку
Ok_09:
флаги то остались в стеке
Ответ отправил: Котиев Зураб (статус: 2-ой класс)
Отправлен: 01.03.2005, 11:05
Отвечает: Bob Johnson
Здравствуйте, psevdo!
Дело в том, что когда ты делаешь pushf перед call dword ptr.., ты делаешь это не для того, чтобы потом их самому извлечь, а для того, чтобы сымитировать поведение процессора при вызове аппаратного прерывания - он вначале заносит в стек флаги, затем адрес возврата.
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 01.03.2005, 12:07
Отвечает: Виктория Путина
Здравствуйте, psevdo!
с помощью pushf ты сохраняешь флаги а не регистры а потом при надобности извлекаешь их оттуды опять таки флаги с помощью popf
Ответ отправила: Виктория Путина (статус: 5-ый класс)
Отправлен: 02.03.2005, 09:39