ВУЗ:
Составители:
20
36 mes db 27,'[31;42mReal mode now',27,’[0m’,10,13,'$'
37 mes1 db 26 dup(32),'A message in protected mode',27 dup(32),0
38 data_size=$-gdt_null ; Размер сегмента данных
39 data ends
40 ;=========================================================
41 text segment 'code' use16 ; По умолчанию 16-разрядный режим
42 assume cs:text,ds:data
43 main proc
44 xor eax,eax ; Очистка 32-разр. EAX
45 mov ax,data ; Инициализация сегментного регистра
46 mov ds,ax ; для реального режима
47 ; Вычисление 32-битного линейного адреса сегмента данных и загрузка
48 ; его в дескриптор (в EAX уже находится его сегментный адрес).
49 ; Для умножения его на 16 сдвинем его влево на 4 разряда
50 shl eax,4 ; В ЕAX - линейный базовый адрес
51 mov ebp,eax ; Сохранение его в EBP
52 mov bx,offset gdt_data ; В ВХ адрес дескриптора
53 mov [bx].base_1,ax ; Мл. часть базы
54 rol eax,16 ; Обмен старшей и младшей половины EAX
55 mov [bx].base_m,al ; Средняя часть базы
56 ;Вычисление и загрузка 32-битного линейного адреса сегмента команд
57 xor eax,eax ; Очистка 32-разр. EAX
58 mov ax,cs ; Адрес сегмента команд
59 shl eax,4 ; В ЕAX - линейный базовый адрес
60 mov bx,offset gdt_code ; В ВХ адрес дескриптора
61 mov [bx].base_1,ax ; Мл. часть базы
62 rol eax,16 ; Обмен старшей и младшей половины EAX
63 mov [bx].base_m,al ; Средняя часть базы
64 ;Вычисление и загрузка 32-битного линейного адреса сегмента стека
65 xor eax,eax
66 mov ax,ss
67 shl eax,4
68 mov bx,offset gdt_stack
69 mov [bx].base_1,ax
70 rol eax,16
71 mov [bx].base_m,al
72 ;Подготовка псевдодескриптора и загрузка его в регистр GDTR
73 mov dword ptr pdescr+2,ebp ; База GDT (0-31)
74 mov word ptr pdescr,gdt_size-1 ; Граница GDT
75 lgdt pdescr ; Загрузка регистра GDTR
76 ;Подготовка к переходу в защищенный режим
77 cli ; Запрет маскир. прерываний
78 mov al,80h ; Запрет NMI
79 out 70h,al ; Порт КМОП микросхемы
80 ;Переход в защищенный режим
81 mov eax,cr0 ; Чтение регистра состояния
82 or eax,1 ; Взведение бита 0
83 mov cr0,eax
84 ;*************************************************
85 ;* Теперь процессор работает в защищенным режиме *
86 ;*************************************************
36 mes db 27,'[31;42mReal mode now',27,’[0m’,10,13,'$' 37 mes1 db 26 dup(32),'A message in protected mode',27 dup(32),0 38 data_size=$-gdt_null ; Размер сегмента данных 39 data ends 40 ;========================================================= 41 text segment 'code' use16 ; По умолчанию 16-разрядный режим 42 assume cs:text,ds:data 43 main proc 44 xor eax,eax ; Очистка 32-разр. EAX 45 mov ax,data ; Инициализация сегментного регистра 46 mov ds,ax ; для реального режима 47 ; Вычисление 32-битного линейного адреса сегмента данных и загрузка 48 ; его в дескриптор (в EAX уже находится его сегментный адрес). 49 ; Для умножения его на 16 сдвинем его влево на 4 разряда 50 shl eax,4 ; В ЕAX - линейный базовый адрес 51 mov ebp,eax ; Сохранение его в EBP 52 mov bx,offset gdt_data ; В ВХ адрес дескриптора 53 mov [bx].base_1,ax ; Мл. часть базы 54 rol eax,16 ; Обмен старшей и младшей половины EAX 55 mov [bx].base_m,al ; Средняя часть базы 56 ;Вычисление и загрузка 32-битного линейного адреса сегмента команд 57 xor eax,eax ; Очистка 32-разр. EAX 58 mov ax,cs ; Адрес сегмента команд 59 shl eax,4 ; В ЕAX - линейный базовый адрес 60 mov bx,offset gdt_code ; В ВХ адрес дескриптора 61 mov [bx].base_1,ax ; Мл. часть базы 62 rol eax,16 ; Обмен старшей и младшей половины EAX 63 mov [bx].base_m,al ; Средняя часть базы 64 ;Вычисление и загрузка 32-битного линейного адреса сегмента стека 65 xor eax,eax 66 mov ax,ss 67 shl eax,4 68 mov bx,offset gdt_stack 69 mov [bx].base_1,ax 70 rol eax,16 71 mov [bx].base_m,al 72 ;Подготовка псевдодескриптора и загрузка его в регистр GDTR 73 mov dword ptr pdescr+2,ebp ; База GDT (0-31) 74 mov word ptr pdescr,gdt_size-1 ; Граница GDT 75 lgdt pdescr ; Загрузка регистра GDTR 76 ;Подготовка к переходу в защищенный режим 77 cli ; Запрет маскир. прерываний 78 mov al,80h ; Запрет NMI 79 out 70h,al ; Порт КМОП микросхемы 80 ;Переход в защищенный режим 81 mov eax,cr0 ; Чтение регистра состояния 82 or eax,1 ; Взведение бита 0 83 mov cr0,eax 84 ;************************************************* 85 ;* Теперь процессор работает в защищенным режиме * 86 ;************************************************* 20
Страницы
- « первая
- ‹ предыдущая
- …
- 18
- 19
- 20
- 21
- 22
- …
- следующая ›
- последняя »