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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2013, 17:49   #71
fipsiksi
Пользователь
 
Регистрация: 07.11.2013
Сообщений: 20
По умолчанию

Опс. На DOSBox 0.74 и правда работатет. На QEMU не пробовал, решил пойти по кратчайшему пути(и скрины уж жутко пугающие))). На VMware не работает. Странно, ну ладн фиг с ним.
fipsiksi вне форума Ответить с цитированием
Старый 11.11.2013, 18:12   #72
fipsiksi
Пользователь
 
Регистрация: 07.11.2013
Сообщений: 20
По умолчанию

Да, ещё кстати никак не могу въехать в этот кусок:
Код:
call delta 
delta: 
pop ebx
add ebx, USER_PM_CODE_START-delta
Ведь все что мы этим делаем это помещаем в ebx адрес откуда нужно копировать код?
Так почему бы просто не написать
Код:
delta: 
mov ebx, delta
add ebx, USER_PM_CODE_START-delta
А тогда вообще просто не написать:
Код:
mov ebx USER_PM_CODE_START
?
fipsiksi вне форума Ответить с цитированием
Старый 12.11.2013, 13:38   #73
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Я вот не читал книжку, но это обязано быть обьяснено в ней. Сброс всех регистров адреса и сегментов происходит в момент передачи управления в другое место кода. Т.е. либо командами длинного перехода, либо вызова подпрограммы.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 12.11.2013, 22:09   #74
fipsiksi
Пользователь
 
Регистрация: 07.11.2013
Сообщений: 20
По умолчанию

А чего их сбрасывать? мы же перд этим ихтолько что установили:
Код:
mov	       ax, DATA_SELEKTOR
		mov	       ds, ax
		mov	       es, ax
		mov	       ss, ax
		mov	       esp, STACK_BASE_ADDRESS
И что в них изменится..
fipsiksi вне форума Ответить с цитированием
Старый 12.11.2013, 23:08   #75
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Ей богу в книге должно быть это написано, а у меня не такой литературно понятный язык ;-)
Физически в процессоре эти регистры занимают то ли больше бит, чем мы видим программно, то ли просто используются в разных режимах по разному(не помню уже точно) и чтобы начать использовать их именно так, как и должно быть в защищенном режиме, нужно совершать длинный переход. Т.е. это аппаратная тонкость такая.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 13.11.2013, 10:54   #76
fipsiksi
Пользователь
 
Регистрация: 07.11.2013
Сообщений: 20
По умолчанию

Прыжок был раньше.
Код:
; загрузить новый селектор в регистр CS
     db66h ; префикс изменения разрядности операнда 
     db OEAh ; опкод команды JMP FAR 
ENTRY_OFF dd PROTECTED_MODE_ENTRY_POINT; 32-битное смещение 
     dw 00001000b; селектор первого дескриптора
Вот из книги по этому поводу:
"Первую команду защищённого режима мы записали в виде её опкода. Адрес прыжка мы вычислили во время подготовки.
Далее идёт загрузка сегментных регистров (регистра сегмента данных и регистра сегмента работы со строками).
Потом идёт код, который выводит строку на экран. Для этого просто копируется строка в видеопамять."
Или вы хотите сказать, что как только поменяли сегментные регистры, то надо прыгать опять в ту же область длинным прыжком чтобы изменения вступили в силу?
fipsiksi вне форума Ответить с цитированием
Старый 13.11.2013, 15:48   #77
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от fipsiksi Посмотреть сообщение
Да, ещё кстати никак не могу въехать в этот кусок:
Код:
call delta 
delta: 
pop ebx
add ebx, USER_PM_CODE_START-delta
Ведь все что мы этим делаем это помещаем в ebx адрес откуда нужно копировать код?
Так почему бы просто не написать
Код:
delta: 
mov ebx, delta
add ebx, USER_PM_CODE_START-delta
А тогда вообще просто не написать:
Код:
mov ebx USER_PM_CODE_START
?
это мне напоминает базонезависимый код(с определением базы).
то есть коду не важно где именно в памяти окажется код, он всегда может найти сам себя.
поидее можно было бы относительный прыжок, но может размаха не хватает, не читал, не знаю.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.11.2013, 18:19   #78
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Запоздал с поздравлениями, но... гру3ин, поздравляю с авторской работой уровня системного программирования, не ожидал от вас такого

З.Ы. А как же лурчанка?
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 13.11.2013, 18:55   #79
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
это мне напоминает базонезависимый код(с определением базы).
то есть коду не важно где именно в памяти окажется код, он всегда может найти сам себя.
поидее можно было бы относительный прыжок, но может размаха не хватает, не читал, не знаю.
Не совсем. Базонезависимо там только переносится код из дополнительного файла в память по адресу 400000h. Т.е. сам код переноса базонезависимый.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 14.11.2013, 00:08   #80
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от fipsiksi Посмотреть сообщение
Да, ещё кстати никак не могу въехать в этот кусок:
Код:
call delta 
delta: 
pop ebx
add ebx, USER_PM_CODE_START-delta
Ведь все что мы этим делаем это помещаем в ebx адрес откуда нужно копировать код?
Так почему бы просто не написать
Код:
delta: 
mov ebx, delta
add ebx, USER_PM_CODE_START-delta
А тогда вообще просто не написать:
Код:
mov ebx USER_PM_CODE_START
?
Это называется дельта-смещение. При компиляции исходного файла линкер поставил значения меток согласно модели памяти DOS, вернее реального режима, там сегменты. После переход а в защищённый режим, память стала плоской и старые метки уже невалидные. Поэтому надо фиксить значения меток дельта-смещением.
rpy3uH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование на Ассемблере Николай ПН Помощь студентам 3 23.03.2010 00:56
Программирование микроконтроллера 80С196КС на ассемблере KOCT9IH Фриланс 3 07.11.2008 13:03
На форуме был замечен супермодератор - Руслан. Alar О форуме и сайтах клуба 17 25.07.2008 21:01