Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Nola
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 26
#1

Возврат в реальный режим из защищенного - Assembler

04.01.2016, 01:56. Просмотров 333. Ответов 1
Метки нет (Все метки)

Есть программа-загрузчик, в которой загружается таблица GDT и выполняется переход в защищённый режим.
Но возникла необходимость использовать 15 прерывание после работы в защищённом режиме.
Пыталась перейти таким способом:
Assembler
1
2
3
4
5
6
7
    mov eax, cr0 ; прочитать CR0
    and al, 0x0FE
    mov cr0, eax ; с этого момента процессор работает в реальном режиме
 
    sti
    
    ... ; код с прерыванием
Компьютер зависает на команде sti, а если без неё, то зависает на прерывании.
Подскажите, как правильно перейти обратно в реальный режим?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2016, 01:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Возврат в реальный режим из защищенного (Assembler):

Графический режим -> возврат в текстовый.
Как, будучи в графическом режиме (al - 19; ah - 0; int 10), вернуться назад в текстовый (где ОКНО досовское.) Пытался через al=0 -> не...

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

Теория защищенного режима
Могут ли в каких-либо случаях перекрываться сегменты стека и данных на платформе x86? Даже не представляю зачем это может быть нужно. ...

Каков реальный размер первичного загрузчика в дискете?
Читаю кулакова. структура MBR такова: jmp_boot - 3 bytes OEM_name - 8 bytes ... BPB_ToSec32 - смещение 20h размер 4 байта. ...

Реальный режим
делаю переход в pm так gtl: ziro: dd 0 dd 0 data32: dw 0ffffh dw 0000h db 00h db 10000100b

Загрузка защищенного файла
Добрый день, подскажите как сделать загрузку файла в бд? Ситуация такая если загружать файл excel который имеет защиту ячеек, то выходит...

1
R71MT
3244 / 1110 / 265
Регистрация: 29.07.2014
Сообщений: 2,125
Записей в блоге: 4
04.01.2016, 08:53 #2
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

Код (FASM) переходит с реального в защищённый режим,..оставляет там мессагу, и уходит опять в реальный. Текст идёт прямо в видео/буфер, поэтому вставлены атрибуты после каждого символа:

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
ORG 100h
JMP start
 
mess0   DB  'D',7,'e',7,'m',7,'o',7,'n',7,' ',7    ; строка с атрибутами символов
        DB  'G',7,'r',7,'a',7,'p',7,'h',7,'i',7,'t',7,'i',7
size    =   $ - mess0
error   DB  'ERROR! It is PM/V86 mode.',13,10
        DB  'Please, run this programm from CPU RM-mode.$'
 
start:
   PUSH  CS
   POP   DS                  ; DS = сегмент кода нашей программы
   PUSH  0B800h
   POP   ES                  ; ES = сегмент видеопамяти
 
;// проверим почву под ногами: реал или виртуал/протектед
   MOV   EAX,CR0             ; прочитать регистр CR0
   TEST  AL,1                ; проверить бит(РЕ)
   JZ    rMode               ; если нуль, то мы в реале и можем продолжать
 
   MOV   DX,error            ; иначе - сообщить об ошибке и выйти.
   MOV   AH,9
   INT   21h 
   XOR   AX,AX
   INT   16h
   INT   20h                    ; конец СОМ-программы
 
;НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН   
rMode:
   CLI                       ; запретить маскируемые прерывания
   IN    AL,70h              ; индексный порт CMOS
   OR    AL,80h              ; установка бита(7) в нём запрещает NMI
   OUT   70h,AL              ; все прерывания запрещены!
   
;// перейти в защищённый режим
   MOV   EAX,CR0             ; прочитать регистр CR0
   OR    AL,1                ; установить бит(РЕ)
   MOV   CR0,EAX             ; с этого момента мы в защищённом режиме!
   
; вывод на экран
   XOR   DI,DI               ; ES:DI - начало видеопамяти
   MOV   SI,mess0            ; DS:SI - выводимый текст
   MOV   CX,size             ; длинна строки
   REP   MOVSB               ; выводим текст на экран
   
; переключаемся в реальный режим
   MOV   EAX,CR0             ; прочитать CR0
   AND   AL,0FEh             ; сбросить бит(РЕ)
   MOV   CR0,EAX             ; мы опять в реале!
 
; разрешить все прерывания
   IN    AL,70h              ; индексный порт CMOS
   AND   AL,7Fh              ; сброс бита(7) отменяет блокировку NMI
   OUT   70h,AL              ; записываем значение в порт
   STI                       ; разрешить маскируемые прерывания
 
   XOR   AX,AX               ; конец программы
   INT   16h
   INT   20h
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2016, 08:53
Привет! Вот еще темы с решениями:

Создание защищенного процесса
Подскажите как сделать чтоб процесс программы нельзя было убить через диспетчер? Примерно как у касперского

IBM и копирование защищенного раздела
Добрый день! Имеется 2 абсолютно одинаковых ноута IBM. Кто скажет можно защищенный раздел для восстановления с одного ноута скопировать на...

Создания защищенного autoran.inf
Приветсвую. Хочу написать свою программу для "имунизации" флеш накопителей, путем создания на них защищенного (без прав доступа) файла...

Удаление защищенного ключа реестра
Нужный ключ с реестра не удаляется, вроде всё правильно. + Вин 8.1 и вручную с реестра тоже не удаляется. Ветка зашишена. SecurityException...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru