Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что делает прогу 32-х разрядной??? 
:(
    Опции темы
suvolod
Дата 15.5.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 20.8.2005

Репутация: нет
Всего: 1



Пожалуйста, поясните мне, что делает прогу 32-х разрядной. До сегодняшнего дня я наивно полагал, что этим занимается директива .386 или выше, которая разрешает работать с 32-х разрядными адресами. Онако, просматривая как-то скомпилированный exe-шник через  CodeView, увидел что все введенные мной команды типа mov eax, var2 подменяются на mov ax, var2. То есть, видимо, компилятор, не смотря на директиву .386,  считает  программу 16-разрядной и оперирует 16-разрядными регистрами. 
PM MAIL   Вверх
Akina
Дата 15.5.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Директива .386 РАЗРЕШАЕТ использование 32-битного кода. В тексте программы. И только.

 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Aike
Дата 15.5.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.4.2006
Где: Россия, Москва

Репутация: нет
Всего: нет



Если не ошибаюсь, то эта строчка: .model flat, stdcall
Указывающая использовать "плоскую" память, которая используется в win32 приложениях. 
PM MAIL ICQ   Вверх
Exekutor
Дата 16.5.2006, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: нет
Всего: 4



Думаю, использование 32-х разрядных регистров 


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
ds29
Дата 24.5.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 15.3.2006

Репутация: 1
Всего: 2



..
.386
.486
..

и т.д. ты просто ГВОРИШЬ своему компилятору, что будешь имспользовать набор инструкций данного процессора.


32-х битные регистры моно использовать и в 16-ти разрядних программах (под DOS, например или WIN3.1)

---------
Цитата

 Онако, просматривая как-то скомпилированный exe-шник через  CodeView, увидел что все введенные мной команды типа mov eax, var2 подменяются на mov ax, var2.


этого не модет быть, если 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авнивает стек, после того как функция вызвана. 
--------


 
PM MAIL   Вверх
Exekutor
Дата 24.5.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: нет
Всего: 4



Цитата

32-х битные регистры моно использовать и в 16-ти разрядних программах (под DOS, например или WIN3.1)


Я, конечно, не пробовал, но сомневаюсь, что программа написанная на асме с использованием 32-х битных регистров запустится на машине где установлен дос ранних версий. Если ты утверждаешь обратное, дай ссылки на что ты опирался, делая этот вывод. 


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
ds29
Дата 24.5.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 15.3.2006

Репутация: 1
Всего: 2



гг, шутишь??, вот одни из моих процедур.

Код

;[bin2asc_.inc] -универсальная п/п перевода из BIN в ASCII 
;    D.S.    &    D.$.
;              $oft
;BIN -> ASC II
;********************************************************************
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;***    ***    ***    ***
;BIN -> ASC II
bin2asc_eax    proc    far
    mov    edx,00        ;очистить EDX
    mov    ecx,0010    ;фактор деления
;!!    lea    si,ascval+3     ;адрес ASC        
;!!    mov    eax,binval      ;двоичное число
c20:
    cmp    eax,0010    ;значение меньше 10?
    jb    c30             ;    ДА - выйти
    xor    edx,edx         ;очистить часть часного
    div    ecx             ;разделить на 10
    or    dl,30h          ;в ASCII
    mov    [si],dl         ;записать ASCII - символ
    dec    si              
    jmp    c20
c30:
    or    al,30h          ;записать последнее часное
    mov    [si],al         ;как ASCII - символ
    ret
bin2asc_eax    endp
;********************************************************************
;********************************************************************


использую SI & DI , т.к. сегм. адр., когда использую данную проц. вод WIN32, заменя на ESI , EDI.


p.s.  а причём тут DOS? , это зависит ТОЛЬКО от процессора (а чего сам не попробывал, секундное дело??)
 
PM MAIL   Вверх
Exekutor
Дата 24.5.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: нет
Всего: 4



Цитата

а чего сам не попробывал, секундное дело??


Так на работе, до дома еще пара часов. 


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
BUGOR
Дата 25.5.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: нет
Всего: 16



Тут всё-таки надо определиться с какого берега, так сказать, смотреть, если со стороны операционной системы, то она определяет 32разрядность по началу структуры IMAGE_NT_HEADERS. Если со стороны компилятора то это конечно заголовок исходника, который так или иначе отличается у программ 16 и 32 разрядных. Если со стороны программиста, то тут просто опыт и некоторый здравый смысл и для вас не составит труда найти отличия между 16ти и 32х разрядными программами)

Цитата
а причём тут DOS?


Дай пример программы(готовый exe), где используются 32 разрядные регистры и 32 разрядная модель адрессации и который бы работал в ранних версиях ДОС(которые на уровне ядра не предусматривают использования подобных вещей). Я не отрицаю такой возможности, просто посмотреть на это очень хочется. 


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
ds29
Дата 25.5.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 15.3.2006

Репутация: 1
Всего: 2



под ДОС предусмотрен ТОЛЬКО реальный режим, и 16-ти разрядная адрисация памяти (сегменты 64kb), не буду цитировать, посотри внимательней, я только демонстрировал использование 32-х разрядных регистров в программах под ДОС (именно такой был вопрос), а "32 разрядная модель адрессации" т.е. плоская модель памяти доступна в защищённом режиме, это и есть присуцтвие WIN32 среды.

т.е. программа про которую ты говоришь, должга иметь "драйвер памяти".

а использование 32-х разрядних регистров зависит ТОЛЬКО от процессора.,
так как и использование 64-х разрядных регистров (rax, ...) , возможно в WIN32 системе. 
PM MAIL   Вверх
sgi1981
Дата 26.5.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 7
Всего: 10



Цитата(ds29 @ 25.5.2006,  12:07)
под ДОС предусмотрен ТОЛЬКО реальный режим, и 16-ти разрядная адрисация памяти (сегменты 64kb), не буду цитировать, посотри внимательней, я только демонстрировал использование 32-х разрядных регистров в программах под ДОС (именно такой был вопрос), а "32 разрядная модель адрессации" т.е. плоская модель памяти доступна в защищённом режиме, это и есть присуцтвие WIN32 среды.

т.е. программа про которую ты говоришь, должга иметь "драйвер памяти".

а использование 32-х разрядних регистров зависит ТОЛЬКО от процессора.,
так как и использование 64-х разрядных регистров (rax, ...) , возможно в WIN32 системе.

И не только !

Процессор можно также перевести в режим линейной адресации памяти, где доступно все 4 гигабайтное адресное пространство в реальном режиме (включая области памяти разных устройств компьютера, например видеоадаптера с 128 МБ-айтами памяти).
У меня например видеоадаптер настроен на участки адресного пространства
DE000000...DEFFFFFF
D0000000...D7FFFFFF
И ДОС будет правильно работать, если её конечно не затереть по ошибке.

Ну, кому зателось проэкспериментировать ?
Архив в низу.

А дополню своими словами так.
Просто сначала нужно оформить дескрипторную таблицу в которой описан сегмент памяти на все 4 гигабайтное адресное пространство. 
Потом подготовить процессор к защищенному режиму (настроить системные регистры).
Потом перевести процессор в защищенный режим.
В сегментный регистр GS занести селектор. Размер сегмента запишется в теневую область сегментного регистра (она так просто не доступна, а только самому процессору).
Потом просто переводим обратно процессор в реальный режим и адресуем через сегментный регистр GS все адресное пространство адресной шины процессора.

Вот и всё.

Удачи экспериментаторам ! 

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  8889.zip 16,57 Kb


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.