Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ))) из защищённого режима в реальный... MASM / 6 сообщений из 6, страница 1 из 1
20.05.2008, 22:11
    #35324619
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
))) из защищённого режима в реальный... MASM
Доброго времени суток!
Вопросик небольшой, просто не знаю где искать на него ответ. Дело в том, что при возвращении из защищённого режима в реальный, селектор записанный в регистре ds должен указывать на сегмент (точнее на дескриптор, который указывает на этот сегмент) в котором разрешена запись данных ... Иначе (если таковая запрещена) комп просто зависает... Происходит это на команде записи регистра cr0.
Значит вопрос: Почему так происходит? Проблемы это не создаёт (ведь несложно добавить в глобальную таблицу дескрипторов ещё один дескриптор), но просто интресно, что процессор делает при смене флага PE, и какую роль при этом играет сегистр ds, и есть ли ещё какие-нибуть особенности возвращение процессора в реальный режим (типа специального значения регистров и т.д.)?

Заранее благодарен!
...
Рейтинг: 0 / 0
21.05.2008, 00:26
    #35324762
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
))) из защищённого режима в реальный... MASM
Подскажите хоть какие-то предположения пожалуйста, или отправьте почитать что-то (всмысле по данной теме)... может докладнее надо что-нибуть описать? Просто мне очень интересно что это такое...
...
Рейтинг: 0 / 0
21.05.2008, 00:43
    #35324771
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
))) из защищённого режима в реальный... MASM
Комп зависает? Ужас какой!

Знаешь... телепаты ушли спать, а я только по исходникам советы даю. Вот.
...
Рейтинг: 0 / 0
21.05.2008, 02:42
    #35324817
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
))) из защищённого режима в реальный... MASM
хм... исходники )) ща выложу... минуту (просто с другого компа достать надо)
...
Рейтинг: 0 / 0
21.05.2008, 03:14
    #35324821
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
))) из защищённого режима в реальный... MASM
Извиняюсь что такой длинный и может даже местами бесполезный код )) Одним словом новичёк :)
Код: plaintext
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.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
	.model tiny
	.code
	.386p
	org 100h
start:	
	
	push cs
	pop ds

	call cs_to_eax 			; смещение для прыжка в PM
	add eax, offset next_command_PM
	mov cs:pm_offs, eax

	mov ax, cs			; сохраняем cs для возврата в rm  
	mov cs:rm_cs,ax

	call open_A20                                 ;подготовка к переходу
	call initialize_gdt
	call disable_interrupts
	;set_PE
	mov eax,cr0
	or al, 1 
	mov cr0,eax

	db 66h                                          ; прыгаем на следующую строку в pm
	db 0EAh
pm_offs dd  0 
	dw 8d

Next_command_PM:

	mov ax,16d 			; эти две строки дают сбой
	mov ds,ax

                                                                ; тут может быть всё что угодно, ничего не меняется...

	;clear_PE
	mov eax,cr0
	and al,0FEh
	mov cr0,eax                                   ; по-моему зависание происходит тут

	db 0EAh                                        ; возвращаемся в rm
	dw $ +  4 
rm_cs	dw  0 

	call enable_interrupts
	mov ah, 9 
	mov dx,offset mes
	int 21h	

ret

;*************Данные*************************

mes db 'Hello, it is rm','$'

GDT label byte
	seg_descriptor <>
	seg_descriptor <0FFFFh, 0 , 0 ,10011010b,10001111b, 0 >
ds_r	seg_descriptor <0FFFFh, 0 , 0 ,10010000b, 0 , 0 >
gdtr table_reg <$-GDT- 1 , 0 >

;*************структуры*************

seg_descriptor struct
	limit_low   dw  0 
	base_low    dw  0 
	base_middle db  0 
	t_a_p       db  0 
	flags       db  0 
	base_high   db  0 
seg_descriptor ends

table_reg struct
	limit dw  0 
	base  dd  0 
table_reg ends

;**************Процедуры***********

disable_interrupts proc
	cli
	in al,70h
	or al,80h
	out 70h,al
	ret
disable_interrupts endp
enable_interrupts proc
	in al, 70h
	and al, 7Fh
	out 70h, al
	sti
	ret
enable_interrupts endp
Open_A20 proc
	in al,92h
	or al,2h
	out 92h,al
	ret
Open_A20 endp
Initialize_gdt proc
	call cs_to_eax
	add eax, offset GDT
	mov dword ptr gdtr.base,eax
	lgdt fword ptr gdtr
	ret
Initialize_gdt endp
cs_to_eax proc
	mov eax, 0 
	mov ax,cs
	shl eax, 4 
	ret
cs_to_eax endp

end start
так вот, строки
Код: plaintext
1.
	mov ax,16d
	mov ds,ax
приводят к зависанию программы при дальнейшем выполнении...
Заранее благодарен за ответы
...
Рейтинг: 0 / 0
22.05.2008, 00:14
    #35327475
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
))) из защищённого режима в реальный... MASM
http://sasm.narod.ru/docs/pm/pm_in/chap_10.htmДля корректного перехода из P-Mode в R-Mode необходимо подготовить процессор следующим образом:
1. Запретить прерывания (CLI).
2. Передать управление в читаемый сегмент кода, имеющий предел в 64Кб (FFFFh).
3. Загрузить в SS, DS, ES, FS и GS селекторы дескрипторов, имеющих следующие параметры:
Предел = 64 Кб (FFFFh)
Байтная гранулярность (G = 0)
Расширяется вверх (E = 0)
Записываемый (W = 1)
Присутствующий (P = 1)
Базовый адрес = любое значение
Сегментные регистры должны быть загружены ненулевыми селекторами. Те сегментные регистры, в которые не будут загружены описанные выше значения, будут использоваться с атрибутами, установленными в защищённом режиме.


4. Сбросить флаг PE в CR0.
5. Выполнить команду far jmp на программу режима реальных адресов.
6. Загрузить в регистры SS, DS, ES, FS и GS необходимые значения или 0.
7. Разрешить прерывания (STI).

Думаю тут я смогу найти что-нибуть по своему вопросу (покрайней мере тут указаны требования к значениям регистров при возврате в RM)

Спасибо всем ( ) за участвие
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ))) из защищённого режима в реальный... MASM / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]