Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58

Переход в защищенный режим

12.02.2016, 20:06. Показов 3994. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно интересует один аспект в коде:
jmp fword 08h:Startup32 - что за "fword 08h:" на сайте(https://habrahabr.ru/post/118881/) сказанно, что 08h — селектор дескриптора кода, но тогда почему его нет в "call print"?


Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
format binary
xor ax,ax
cli ;реинициализируем сегментные регистры
mov ss,ax
xor sp,sp
sti
mov ax,3
int 10h
 
jmp 1000h:r_start
 
r_start:
 
mov ax,1000h;перенастраиваем регистры
mov ds,ax 
mov es,ax
 
in al, 0x92;включаем A20
or al, 2
out 0x92, al
 
cli ;запрещаем прерывания
mov al,8Fh;запрещаем NMI
out 70h,al
in al,71h
 
lgdt fword [GDTR];загружаем регистр GDTR
mov eax,cr0 
or al,1;устанавливаем 0-вой бит
mov cr0,eax;включаем PM
 
jmp fword 08h:Startup32; прыгаем в PM
 
align 8 ;процессор быстрее обращается с выравненной табличкой
GDT:
dq 0 ;пустой
db 0FFh,0FFh,0,0,0,9Ah,0CFh,0 ;код
db 0FFh,0FFh,0,0,0,92h,0CFh,0;данные
db 0FFh,0FFh,0,80h,0Bh,92h,40h,0 ;видеосегмент
label GDT_SIZE at $-GDT
GDTR:
dw GDT_SIZE-1
dd GDT+10000h 
; нужно записать 32-битный адрес. Сейчас мы находимся в сегменте 1000h, база которого 1000h*10h (по ;физическому адресу) => физический адрес GDTR (метки!) = 10000h (физический адрес базы сегмента)+offset
 
virtual ;теперь, фактически, забиваем пространство до конца сегмента
rb 10000h-$;
end virtual
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PM32 Entry;;;;;;;;;;;;;;;;;;;
use32
org $+10000h;вот для чего: в PM мы работаем с Flat-сегментами, и если мы оставим код ;для PM перед org’ом, то ;внутрисегментный адрес не будет совпадать с Flat адресом. Так вот.
 
Startup32: ;точка входа в PM
mov ax,10h ;здесь пихаем селекторы. Зачастую (! не забываем про порядковый номер в 
mov es,ax ;таблице) селектор сегмент кода - 08h. данных - 10h, видеосегмент - 18h
mov ds,ax
mov fs,ax
mov ss,ax
mov esp,10000h;стек
mov ax,18h
mov gs,ax
 
mov esi,hi_string ;покажем, что мы удачно перешли
call print
jmp $
 
;ESI - адрес строки
print: 
pushad
xor ebx,ebx
mov ah,07h;атрибут 
puts:
mov al,[esi+ebx]
mov [gs:(ebx*2)],ax
inc ebx
test al,al
jnz puts
popad
ret
hi_string db ‘Welcome to PM, dude’,0
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2016, 20:06
Ответы с готовыми решениями:

Защищённый режим
Приветствую. Мне нужно написать программу, которая выполняет 3 действия в защищённом режиме: 1. Циклически выводить английский...

Защищенный режим asm
Здравствуйте! Имеется программка в Реальном режиме, необходимо перевести ее в защищенный. Подскажите, как это сделать? Сама программа...

Перевод проца в защищенный режим
Кибердруги, посоветуйте хорошую литературу по переводу проца в защищенный режим. С практическими примерами на ассемблере желательно....

7
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
12.02.2016, 21:59
Цитата Сообщение от AnySk Посмотреть сообщение
но тогда почему его нет в "call print"?
Потому что call ровно как и все формы jump и так неявно подразумевает работу с CS. Ваш кэп.
1
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
13.02.2016, 06:30  [ТС]
Так почему там jmp fword 08h:Startup32
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
13.02.2016, 21:18
Цитата Сообщение от AnySk Посмотреть сообщение
jmp fword 08h:Startup32
Чтобы поменять CS. Опять ваш кэп.
0
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
13.02.2016, 23:41  [ТС]
А с чего на что поменять?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
14.02.2016, 03:09
AnySk, короче читаешь System Programming Guide, глава 3. Хотя бы несколько первых страниц. Количество глупых вопросов убавится на порядок. Еще желательно раздел 9.8 и особенно 9.9. После прочтения можешь задавать вопросы. Хотя, думаю, их уже не будет.
1
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
14.02.2016, 18:06  [ТС]
Ну я собственно прочитал, хотел бы уточнить
4. Immediately following the MOV CR0 instruction, execute a far JMP or far CALL instruction. (This operation is
typically a far jump or call to the next instruction in the instruction stream.)
5. The JMP or CALL instruction immediately after the MOV CR0 instruction changes the flow of execution and
serializes the processor.
, а конкретно :
instruction changes the flow of execution and
serializes the processor
как это понять, в каком смысле изменяет поток выполнения?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
14.02.2016, 20:10
Цитата Сообщение от AnySk Посмотреть сообщение
как это понять, в каком смысле изменяет поток выполнения?
У процессора есть кэш команд. Делая дальний переход на селектор 32-битного кода мы выполняем 2 действия:
1. Очищаем кэшь, т. к. в защищенном режиме меняется принцип работы некоторых команд. После этого процессор уже загрузит "правильную" интерпретацию.
2. После перехода на 32х-биный код мы, собственно, начинаем выполнять 32х-битный код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.02.2016, 20:10
Помогаю со студенческими работами здесь

Старт системы и защищенный режим
Пытаюсь разобраться с режимами работы процессоров. В нете нарыл что: "Процессор попадает в реальный режим сразу же после...

Защищённый режим работы процессора
Процессор работает в защищённом режиме, без подкачки страниц. В регистре CS находится значение 0x0008,а в реестре EIP находится значение...

Перейти в защищённый режим процессора и обратно
Стоит linux ubuntu 18.04. Задание: перейти в зазищенный режим процессора и обратно. Программа строится успешно, однако потом завершается...

Реальный и защищенный режим адресации памяти
Вот, пишет один: "если мы воспользуемся какой-либо программой для исследования содержимого ОЗУ, и введем адрес 0000:0449 то мы увидим...

Вывод дампа области расширенной памяти (защищенный режим, TASM)
Собственно нужна помощь. Совсем не могу разобраться с защищенным режимом. Нужно изменить программу, чтобы она выводила дамп области...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru