Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2010, 19:55   #1
BVOG
Python,C++,ASM,Php
Пользователь
 
Аватар для BVOG
 
Регистрация: 29.08.2010
Сообщений: 58
Восклицание Переход из реального режима в защищённый

Есть прога:
Код:
		jmp GO
	GDT:
		NULL_DESCR db 8 dup(0)
		DATA_DESCR db 0ffh, 0ffh, 00h, 00h, 00h, 10011010b, 11001111b, 00h
		CODE_DESCR db 0ffh, 0ffh, 00h, 00h, 00h, 10010010b, 11001111b, 00h
		VIDEO_DESCR db 0ffh, 00h, 080h, 0bh, 10010010b, 01000000b, 00h
		GDT_size equ $-GDT
		
		GDTR dw GDT_size-1
		dd ?
	GO:
		lgdt [fword ptr GDTR]
		
		in al, 092h
		or al, 2
		out 092h, al
		
		cli
		
		in al, 070h
		or al, 080h
		out 070h, al
		
		mov eax, cr0
		or al, 1
		mov cr0, eax
		
		;?????????
		
	PMODE:
		jmp $
Работает код нормально, но нужно перейти с дальним джампом, а как лучше сделать расчитать положение PMODE в памяти и прыгнуть туда, или загнать в дескриптор кода положение PMODE? Нужен код, пример высчитать положение PMODE. У меня появиля вариант через lea ax, [PMODE], но я в нём не уверен. Что посоветуете, желательно с примером. Компилятор TASM.
Извините за предыдущую тему, браузер барахлит)
Хакер - это не ламер с завышенным самомнением, а программист с заниженной зарплатой.
Нелегка и неказиста жизнь простого программиста.

Последний раз редактировалось BVOG; 22.10.2010 в 20:10.
BVOG вне форума Ответить с цитированием
Старый 24.10.2010, 15:29   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

трудно воспользоваться гуглем?
вот здесь всё есть, есть исходники и примеры и всё на TASM. читай на здоровье
rpy3uH вне форума Ответить с цитированием
Старый 24.10.2010, 17:05   #3
BVOG
Python,C++,ASM,Php
Пользователь
 
Аватар для BVOG
 
Регистрация: 29.08.2010
Сообщений: 58
По умолчанию

Есть маленький ньюанс: файл комовский и не должен содеражать разные сегменты и стэки. Я поэтому и спрашиваю.
Хакер - это не ламер с завышенным самомнением, а программист с заниженной зарплатой.
Нелегка и неказиста жизнь простого программиста.
BVOG вне форума Ответить с цитированием
Старый 24.10.2010, 17:33   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

вычисляй адрес относительно регистра CS.
я писал COM программу переводящую процессор в защищённый режим на FASM, скинул бы, но он на ноутбуке, а его рядом нет.
в общем, примерно так.
xor eax, eax
mov ax, cs
shl eax, 4
add eax, PMODE
EAX = абсолютный адрес метки PMODE
но нельзя забывать что код после метки PMODE тоже идёт комовский, и все метки в нём тоже будут относительно CS, получается что в коде защищённого режима тоже придётся вычислять адреса меток по правилам реального режима
rpy3uH вне форума Ответить с цитированием
Старый 24.10.2010, 19:44   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

для начала вопрос, а вы, ТС, не будете знать по какой базе грузится у вас код?
(я у ся в загрузчике переход был начиная со 0:7e00, и использую org задал базу, и все шикарно, никаких поправок не делал после перехода(правда ядро внешнее и на С, но у него уже своя база? дп и не суть, так как всетаки часть загрузчика учавствовала в защищенном режиме, подготавливая стек и данные))
использовал fasm
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.10.2010, 15:48   #6
BVOG
Python,C++,ASM,Php
Пользователь
 
Аватар для BVOG
 
Регистрация: 29.08.2010
Сообщений: 58
По умолчанию

Прога грузиться booter-ом по адресу [01000h:0100h] + в самой проге org 100h. И у меня загрузчик только читает данные в память, переход в защищённый режим находится в самой проге.
Хакер - это не ламер с завышенным самомнением, а программист с заниженной зарплатой.
Нелегка и неказиста жизнь простого программиста.

Последний раз редактировалось BVOG; 25.10.2010 в 17:00.
BVOG вне форума Ответить с цитированием
Старый 25.10.2010, 18:05   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вам точно нужен столь высокий адрес?
или может сделать чтоб одна часть перешла в PM, потом скопировала по адресу другую часть, а та другая часть уже выравнена как надо...

ну, а в данном случае придется делать по принципу смещений, как и предлагали.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.10.2010, 18:39   #8
BVOG
Python,C++,ASM,Php
Пользователь
 
Аватар для BVOG
 
Регистрация: 29.08.2010
Сообщений: 58
По умолчанию

Тогда нужно из защищённого режима считать с флопика без прерывания.
Хакер - это не ламер с завышенным самомнением, а программист с заниженной зарплатой.
Нелегка и неказиста жизнь простого программиста.
BVOG вне форума Ответить с цитированием
Старый 25.10.2010, 19:48   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

я делал что-то в этом духе (FASM)
Код:
		xor		eax,eax
		mov		ax, cs
		shl		eax,4
		add		eax, PROTECTED_MODE_ENTRY_POINT
		mov		[ENTRY_OFF],eax

		xor		eax,eax
		mov		ax,cs
		shl		eax,4
		add		ax, GDT

		mov		dword [GDTR+2],eax
		lgdt		fword [GDTR]

		cli
		in		al,70h
		or		al,80h
		out		70h,al

		mov		eax,cr0
		or		al,1
		mov		cr0,eax

		db		66h
		db		0EAh			
ENTRY_OFF	dd		PROTECTED_MODE_ENTRY_POINT		      
		dw		CODE_SELEKTOR

align 8
GDT:
;дескрипторы................

label GDTR fword
		dw		GDT_size-1		
		dd		?		

use32

USER_PM_CODE_BASE_ADDRESS EQU 0100000h

PROTECTED_MODE_ENTRY_POINT:
                      ;загрузка регистров DS, SS, ES

		call delta
         delta:
		pop ebx
		add ebx, USER_PM_CODE_START-delta

		mov	       esi, ebx
		mov	       edi, USER_PM_CODE_BASE_ADDRESS
		mov	       ecx, USER_PM_CODE_SIZE
		rep	       movsb

		mov	       eax,USER_PM_CODE_BASE_ADDRESS
		jmp	       eax

USER_PM_CODE_START:
ORG USER_PM_CODE_BASE_ADDRESS

		include 'PM_CODE.ASM';

USER_PM_CODE_END:
т.е. принцип такой:
в файле PM_CODE.ASM мы пишем код который работает в защищённом режиме и используем в нём метки не заботясь о возможных глюках связанный с COM файлами.
После перехода в защищённый режим программа просто переносит код из файла PM_CODE.ASM по адресу USER_PM_CODE_BASE_ADDRESS вот и всё.

и вообще я рекомендую использовать FASM при написании подобных программ.
rpy3uH вне форума Ответить с цитированием
Старый 25.10.2010, 20:44   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я тоже самое и имел в виду
да и кстати, чтение с флопика много где описано с сорцами причем
(даж у нас на форуме видел, правда на С)

Грузин, а что за 70h порт?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 25.10.2010 в 21:08.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Защищённый режим процессора BVOG Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 18 21.03.2012 17:42
Настроика реального ип serres Компьютерное железо 2 24.09.2010 18:34
Определение реального класса megachuhancer Общие вопросы Delphi 2 24.09.2009 15:35
Защищённый процесс Terran Win Api 2 08.12.2007 13:31