/* LAB6 Лабораторная работа по теме "Программные прерывания" При вызове функции - прерывания из СИ, используется INT. В связи с этим стек заполняется несколько иначе. В стеке сохраняются значения IP, СS (сегмент кода),от куда вызывается прерывание, и флаги. Выход из INT осуществляется с помощью IRet,которая вынимает из стека все старые регистров CS, IP и флагов. Так же при вызове прерывания,флажок прерывания i и t устанавливается в 0, что запрещает вызов любых других прерываний, а также запрещает трассировку. */ #include #include #include #include void interrupt (*old)(...); // здесь будем сохранять старый вектор void interrupt cmp_int(...) // а это наш обработчик { cout<<"Прерывание "; getch(); } void main(void) { int aa; aa=1; old=getvect(0xf0); disable(); setvect(0xf0,cmp_int); enable(); // aa=aa/0; geninterrupt(0xf0); puts("v1=v2"); setvect(0xf0,old); return; // Задания // 1 Напишите программу обработки прерывания // 2 Вызовите прерывание путем организации особого случая // 3 Покажите использование команды int3, определите ее код с испол. TD }