![]() |
|
|
![]()
|
|
| suvolod |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 20.8.2005 Репутация: нет Всего: 1 |
Пожалуйста, поясните мне, что делает прогу 32-х разрядной. До сегодняшнего дня я наивно полагал, что этим занимается директива .386 или выше, которая разрешает работать с 32-х разрядными адресами. Онако, просматривая как-то скомпилированный exe-шник через CodeView, увидел что все введенные мной команды типа mov eax, var2 подменяются на mov ax, var2. То есть, видимо, компилятор, не смотря на директиву .386, считает программу 16-разрядной и оперирует 16-разрядными регистрами.
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Директива .386 РАЗРЕШАЕТ использование 32-битного кода. В тексте программы. И только.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Aike |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.4.2006 Где: Россия, Москва Репутация: нет Всего: нет |
Если не ошибаюсь, то эта строчка: .model flat, stdcall
Указывающая использовать "плоскую" память, которая используется в win32 приложениях. |
|||
|
||||
| Exekutor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 1.11.2005 Где: Казахстан. Костан ай Репутация: нет Всего: 4 |
Думаю, использование 32-х разрядных регистров
-------------------- [color=blue][size=2]En taro addun, ma sol larinas[/size][/color] |
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
..
.386 .486 .. и т.д. ты просто ГВОРИШЬ своему компилятору, что будешь имспользовать набор инструкций данного процессора. 32-х битные регистры моно использовать и в 16-ти разрядних программах (под DOS, например или WIN3.1) ---------
этого не модет быть, если var2 - DWORD , то будет только mov eax, var2 , аналогично , если var2 - WORD, то будет только mov ax, var2. и никак иначе. ------- .MODEL FLAT, STDCALL .MODEL - это ассемблеpная диpектива, опpеделяющая модель памяти вашей пpогpаммы. Под Win32 есть только одна - плоская модель. STDCALL говоpит MASM'у о поpядке пеpедачи паpаметpов, слева напpаво или спpава налево, а также о том, кто уpавнивает стек, после того как функция вызвана. -------- |
|||
|
||||
| Exekutor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 1.11.2005 Где: Казахстан. Костан ай Репутация: нет Всего: 4 |
Я, конечно, не пробовал, но сомневаюсь, что программа написанная на асме с использованием 32-х битных регистров запустится на машине где установлен дос ранних версий. Если ты утверждаешь обратное, дай ссылки на что ты опирался, делая этот вывод. -------------------- [color=blue][size=2]En taro addun, ma sol larinas[/size][/color] |
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
гг, шутишь??, вот одни из моих процедур.
использую SI & DI , т.к. сегм. адр., когда использую данную проц. вод WIN32, заменя на ESI , EDI. p.s. а причём тут DOS? , это зависит ТОЛЬКО от процессора (а чего сам не попробывал, секундное дело??) |
|||
|
||||
| Exekutor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 1.11.2005 Где: Казахстан. Костан ай Репутация: нет Всего: 4 |
Так на работе, до дома еще пара часов. -------------------- [color=blue][size=2]En taro addun, ma sol larinas[/size][/color] |
|||
|
||||
| BUGOR |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 12.3.2006 Репутация: нет Всего: 16 |
Тут всё-таки надо определиться с какого берега, так сказать, смотреть, если со стороны операционной системы, то она определяет 32разрядность по началу структуры IMAGE_NT_HEADERS. Если со стороны компилятора то это конечно заголовок исходника, который так или иначе отличается у программ 16 и 32 разрядных. Если со стороны программиста, то тут просто опыт и некоторый здравый смысл и для вас не составит труда найти отличия между 16ти и 32х разрядными программами)
Дай пример программы(готовый exe), где используются 32 разрядные регистры и 32 разрядная модель адрессации и который бы работал в ранних версиях ДОС(которые на уровне ядра не предусматривают использования подобных вещей). Я не отрицаю такой возможности, просто посмотреть на это очень хочется. |
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
под ДОС предусмотрен ТОЛЬКО реальный режим, и 16-ти разрядная адрисация памяти (сегменты 64kb), не буду цитировать, посотри внимательней, я только демонстрировал использование 32-х разрядных регистров в программах под ДОС (именно такой был вопрос), а "32 разрядная модель адрессации" т.е. плоская модель памяти доступна в защищённом режиме, это и есть присуцтвие WIN32 среды.
т.е. программа про которую ты говоришь, должга иметь "драйвер памяти". а использование 32-х разрядних регистров зависит ТОЛЬКО от процессора., так как и использование 64-х разрядных регистров (rax, ...) , возможно в WIN32 системе. |
|||
|
||||
| sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 7 Всего: 10 |
И не только ! Процессор можно также перевести в режим линейной адресации памяти, где доступно все 4 гигабайтное адресное пространство в реальном режиме (включая области памяти разных устройств компьютера, например видеоадаптера с 128 МБ-айтами памяти). У меня например видеоадаптер настроен на участки адресного пространства DE000000...DEFFFFFF D0000000...D7FFFFFF И ДОС будет правильно работать, если её конечно не затереть по ошибке. Ну, кому зателось проэкспериментировать ? Архив в низу. А дополню своими словами так. Просто сначала нужно оформить дескрипторную таблицу в которой описан сегмент памяти на все 4 гигабайтное адресное пространство. Потом подготовить процессор к защищенному режиму (настроить системные регистры). Потом перевести процессор в защищенный режим. В сегментный регистр GS занести селектор. Размер сегмента запишется в теневую область сегментного регистра (она так просто не доступна, а только самому процессору). Потом просто переводим обратно процессор в реальный режим и адресуем через сегментный регистр GS все адресное пространство адресной шины процессора. Вот и всё. Удачи экспериментаторам ! Присоединённый файл ( Кол-во скачиваний: 4 )
8889.zip 16,57 Kb-------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |