Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2011, 21:07   #1
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию asm pushf

Здраствуйте
Код:
  Procedure NewKeybIntVect; interrupt; assembler;
  asm
    in AL, 60h
    cmp AL, 58h
    jne @start
      xor Work, 1
    @start:
      test Work, 1
      jz @fin
      mov DI, offset(keys)
      mov CX, 48
    @l: mov AH, [DI].byte
        cmp AL, AH
        je @match
        inc DI
    loop @l
    jmp @fin
    @match:
      mov DI, offset(notes)
      add DI, 48
      sub DI, CX
      push [DI].word
      call Sound
      mov SndDelay, 3
      jmp @fin
    @fin:
      call GetLed;
      pushf
      call KeybIntVect;
  end;
KeybIntVect - процедурный тип
pushf здесь сохраняет файловый регистр и передает его в процедуру, так? если да, то для чего?
и еще KeybIntVect принимает значение NewKeybIntVect(т.е. фактически NewKeybIntVect вызывает саму себя)? или что здесь происходит?
MetR вне форума Ответить с цитированием
Старый 21.01.2011, 22:15   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> pushf здесь сохраняет файловый регистр и передает его в процедуру, так?

Какой еще "файловый", что ты несешь ?)
Флаговый, а не файловый)
mss вне форума Ответить с цитированием
Старый 27.01.2011, 15:00   #3
OKOB
Новичок
Джуниор
 
Регистрация: 26.01.2011
Сообщений: 1
По умолчанию

Речь идет о перехвате обработчика прерывания в ДОСе. Есть три типа перехвата: 1) когда новый обработчик выполняет всю необходимую работу и не использует старый обработчик; 2) когда новый о выполняет часть работы до вызова старого обработчика; 3) когда новый обработчик выполняет свою работу после отработки старого обработчика. В данном случае 2й вариант. Приведен код нового обработчика в конце которого управление передается на старый обработчик. Старый обработчик заканчивается командой IRET, которая промывает из стека 3 слова: 2 слова дальний адрес возврата сегмент:смещение и флаги. Вот для помещения этих флагов в стек и используется тут команда PUSHF, а дальний адрес возврата окажется в стеке за счет межсегментного вызова старого обработчика.
OKOB вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Asm в С++ ge4r Помощь студентам 0 17.10.2010 17:26
Как работает Pushf/ iret zhuk99 Помощь студентам 0 04.10.2010 20:22
с++ и ASM breate Общие вопросы C/C++ 4 04.11.2009 20:56
[c++]asm Nightwalker Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 14.10.2008 19:39