Yoda писал(а):
Это код реального режима?
Зачем так извращаться с сегментными регистрами? Только ради использования команды POPAD? Нет никакого смысла. Лучше использовать непосредственно push/pop с сегментными регистрами, каждая такая команда использует ровно один байт. Будет занимать много меньше места и быстрей выполняться.
просто команды push/pop то же используют сегментные регистры если бы у меня использовался только один кодовый сегмент и один сегмент данных проблем бы таких не было.
кстати
Код:
push ES
push SS
push DS
push FS
push GS
это я тоже использовал
Yoda писал(а):
Этот код где находится? В обработчике прерывания?
Не забыл, что в конце обработчика необходимо использовать возврат инструкцией iret, а не ret?
да в обработчике прерываний(Int32, Trap32) и в конце стоит iretd.
в IDT стоит Int32 Sel:Off=0008:0010171a и Trap32 Sel:Off=0008:0010171a
код ещё раз повторю
Код:
Interrupt_code:
pushad
mov cx , es
shl ecx, 16
mov cx , ss
mov bx , ds
shl ebx, 16
mov bx , fs
mov dx , gs
mov ax, 40h
mov ES, ax
mov SS, ax
mov DS, ax
mov FS, ax
mov GS, ax
mov esp, 500h
mov ebp, 500h
pushad
; код прерывания
popad
mov gs , dx
mov fs , bx
shr ebx, 16
mov ds , bx
mov ss , cx
shr ecx, 16
mov es , cx
popad
iret