ВУЗ:
Составители:
53
; Сохранить регистр флагов
pushf
; Запретить прерывания, так как таблица прерываний IDT
; не сформирована для защищенного режима
cli
; Запретить немаскируемые прерывания NMI
in AL,CMOS_ADDR
mov AH,AL
or AL,080h ;установить старший разряд
out CMOS_ADDR,AL ;не затрагивая остальные
and AH,080h
; Запомнить старое состояние маски NMI
mov CH,AH
; Перейти в защищенный режим
lgdt [fword ptr CS:GDTPtr]
mov BX,CS ;запомнить сегмент кода
mov EAX,CR0
or AL,01b ;установить бит PE
mov CR0,EAX ;защита разрешена
; Безусловный дальний переход на метку SetPMode
; (очистить очередь команд и перезагрузить CS)
DB 0EAh
DW (offset SetPMode)
DW SYS_PROT_CS
SetPMode:
; Подготовить границы сегментов
mov AX,SYS_REAL_SEG
mov SS,AX
mov DS,AX
mov ES,AX
mov FS,AX
; Снять ограничения с сегмента GS
mov AX,SYS_MONDO_SEG
mov GS,AX
; Вернуться в реальный режим
mov EAX,CR0
and AL,11111110b ;сбросить бит PE
mov CR0,EAX ;защита отключена
; Безусловный дальний переход на метку SetRMode
; (очистить очередь команд и перезагрузить CS)
DB 0EAh
DW (offset SetRMode)
Self_Mod_CS DW ?
SetRMode:
; Регистры стека и данных
; настроить на сегмент кода
mov SS,BX
mov DS,BX
; Обнулить дополнительные сегментные
; Сохранить регистр флагов
pushf
; Запретить прерывания, так как таблица прерываний IDT
; не сформирована для защищенного режима
cli
; Запретить немаскируемые прерывания NMI
in AL,CMOS_ADDR
mov AH,AL
or AL,080h ;установить старший разряд
out CMOS_ADDR,AL ;не затрагивая остальные
and AH,080h
; Запомнить старое состояние маски NMI
mov CH,AH
; Перейти в защищенный режим
lgdt [fword ptr CS:GDTPtr]
mov BX,CS ;запомнить сегмент кода
mov EAX,CR0
or AL,01b ;установить бит PE
mov CR0,EAX ;защита разрешена
; Безусловный дальний переход на метку SetPMode
; (очистить очередь команд и перезагрузить CS)
DB 0EAh
DW (offset SetPMode)
DW SYS_PROT_CS
SetPMode:
; Подготовить границы сегментов
mov AX,SYS_REAL_SEG
mov SS,AX
mov DS,AX
mov ES,AX
mov FS,AX
; Снять ограничения с сегмента GS
mov AX,SYS_MONDO_SEG
mov GS,AX
; Вернуться в реальный режим
mov EAX,CR0
and AL,11111110b ;сбросить бит PE
mov CR0,EAX ;защита отключена
; Безусловный дальний переход на метку SetRMode
; (очистить очередь команд и перезагрузить CS)
DB 0EAh
DW (offset SetRMode)
Self_Mod_CS DW ?
SetRMode:
; Регистры стека и данных
; настроить на сегмент кода
mov SS,BX
mov DS,BX
; Обнулить дополнительные сегментные
53
Страницы
- « первая
- ‹ предыдущая
- …
- 51
- 52
- 53
- 54
- 55
- …
- следующая ›
- последняя »
