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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2009, 16:50   #1
smileman
Пользователь
 
Аватар для smileman
 
Регистрация: 09.06.2008
Сообщений: 60
По умолчанию 32-разрядная адрсация в Паскале

Подскажите,как перейти к 32-разрядной адресации?
smileman вне форума Ответить с цитированием
Старый 21.05.2009, 16:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В Паскале по-моему никак.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.05.2009, 18:47   #3
smileman
Пользователь
 
Аватар для smileman
 
Регистрация: 09.06.2008
Сообщений: 60
По умолчанию

Паскаль видимо не может работать в защищенном режиме,однако возникает вопрос,можно ли реализовать эту задачу встроенным в него ассемблером - переход в защищенный режим,а затем и в 32 разрядную адресацию?(насколько я знаю, не все команды асма работают в паскале)

Последний раз редактировалось smileman; 21.05.2009 в 22:10.
smileman вне форума Ответить с цитированием
Старый 21.05.2009, 22:16   #4
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Можно, но в присутствии многозадачной операционной системы будет проблематично заюзать такие фичи.

Хотя, если ограничиться DOSBox, то можно перейти в защищённый режим, настроить fs на начало памяти, без ограничения на 65535 байтов смещения, и вернуться в реальный режим. У каждого сегментного регистра есть теневой регистр, содержащий информацию о начале и протяжённости сегмента. Теневой регистр обновляется только во время присваивания ему нового значения. Если fs настроить в защищённом режиме и больше не трогать его, можно неограниченно долго использовать 32битную адресацию.

Не знаю, проканает ли это в DOSBox.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 21.05.2009, 22:33   #5
smileman
Пользователь
 
Аватар для smileman
 
Регистрация: 09.06.2008
Сообщений: 60
По умолчанию

да я в досе сижу..(в реальном режиме,не в эмуляции), значит средств встроенного асма думаешь хватит?стоит этим извращением заниматься,или сразу на асме писать?
smileman вне форума Ответить с цитированием
Старый 22.05.2009, 00:05   #6
smileman
Пользователь
 
Аватар для smileman
 
Регистрация: 09.06.2008
Сообщений: 60
По умолчанию

подсказали, средств достаточно
Код:
procedure enable_pb;
begin
asm
mov eax, cr0
or eax, 1
mov cr0, eax
end;
end;
+ создание IDT и тп
smileman вне форума Ответить с цитированием
Старый 22.05.2009, 00:22   #7
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Turbo Pascal такое не скомпилирует.

Неподдерживаемые инструкции можно через db писать, а, что касается памяти, то тут какие–нибудь inline функции надо замутить, чтоб считывать байты, слова, двойные слова и т. п. по 32битному адресу.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 22.05.2009, 00:27   #8
smileman
Пользователь
 
Аватар для smileman
 
Регистрация: 09.06.2008
Сообщений: 60
По умолчанию

мда,не скомпилил..как можно использовать 32разрядные регистры,не переходя в РМ?
smileman вне форума Ответить с цитированием
Старый 22.05.2009, 01:14   #9
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Да запросто. Они есть независимо от режима. Это просто встроенных ассемблер их не понимает, но они всё равно есть.

Код:
db $66; mov ax,bx
Эта конструкция эквивалентна mov eax,ebx

Аналогично можно в большинстве случаев кодить другие инструкции. Правда, если присваивать непосредственные значения, нужно разбивать эти значения на части:

Код:
db $66; mov bx,$5678; dw $1234
Это эквивалентно mov ebx,$12345678

Для 32битной адресации аналогично, только db $67
Код:
db 67h; mov ax,WORD PTR [si]
Эквивалентно mov ax,word ptr [esi]

А вообще, можно уже доставать TASM. TASM нормально генерит код для 32разрядных инструкций в реальном режиме.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 22.05.2009, 13:53   #10
smileman
Пользователь
 
Аватар для smileman
 
Регистрация: 09.06.2008
Сообщений: 60
По умолчанию

Благодарствуем ..
smileman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как исправить ошибку типа: 16-разрядная подсистема MS-DOS Mclaren Помощь студентам 10 28.04.2009 20:07
15 в Паскале Batonchik Паскаль, Turbo Pascal, PascalABC.NET 11 08.04.2009 15:20
привет всем! помогите пожалуйста решить две задачи на паскале. я в паскале полный ноль. Пищенок Саша Паскаль, Turbo Pascal, PascalABC.NET 5 20.01.2009 13:46
БД На Паскале igorjouk Помощь студентам 12 21.11.2008 13:22
На Паскале Bagsi Помощь студентам 13 21.11.2007 21:40