Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2012.06.03;
Скачать: [xml.tar.bz2];

Вниз

Встроенный ассемблер в Delphi   Найти похожие ветки 

 
Асм   (2012-01-26 17:59) [0]

В одной статье автор воскликнул:
Ура, начиная с шестой версии, в популярном продукте Borland реализована поддержка всех команд процессора, включая команды расширений MMX, SSE, 3DNow!
Еще в какой то статье прочитал что встроенный асм имеет ограничения.

Есть пара вопросов.На встроенном асме можно все что угодно сделать или не все?Синтаксис встроенного ассемблера в Delphi XE 4 под линукс такой же как и в других версиях Delphi под виндовс?


 
Dimka Maslov ©   (2012-01-26 18:11) [1]

1) Нет, не всё
2) Для ассемблерных команд - да.


 
Rouse_ ©   (2012-01-26 18:11) [2]


> Ура, начиная с шестой версии, в популярном продукте Borland
> реализована поддержка всех команд процессора, включая команды
> расширений MMX, SSE, 3DNow!

Оч сильно сомневаюсь...


> На встроенном асме можно все что угодно сделать или не все?

Что скрывается под терминов "все"?


 
Dimka Maslov ©   (2012-01-26 18:13) [3]


> Оч сильно сомневаюсь...


записывать инструкции в машинных кодах через db, dw, dd никто не запрещает. Так что команды расширений вполне себе допустимы


 
Rouse_ ©   (2012-01-26 18:14) [4]


> записывать инструкции в машинных кодах через db, dw, dd
> никто не запрещает.

сей костыль не есть "поддержка всех команд процессора"


 
Dimka Maslov ©   (2012-01-26 18:17) [5]

Почему сразу «костыль»? Вот, к примеру, в Delphi 5 нет инструкции rdtsc. Но вызывать её таки можно!


 
Асм   (2012-01-26 18:19) [6]


> Что скрывается под терминов "все"?

Всем известно что на асме можно написать любую прогу.В какой то статье читал про эту тему.Автор писал что у встроенного асма ограниченные возможности а этот автор пишет что используются все команды процессора.Если все команды можно использовать тогда почему ограниченные возможности?Я немного запутался.


 
Inovet ©   (2012-01-26 18:23) [7]

> [6] Асм   (26.01.12 18:19)
> Всем известно что на асме можно написать любую прогу

Любую прогу можно написать хоть на чём.


 
Dimka Maslov ©   (2012-01-26 18:26) [8]


>
> Всем известно что на асме можно написать любую прогу


Йа плакалЪ. Любую прогу можно написать и безо всякого ассемблера. Встроенный же ассемблер применяется для написания коротких кусков кода, которые будут работать немного быстрее, за счёт замены традиционных (заложенных в компилятор) комбинаций команд на нетрадиционные. Ограничения же вводятся не на состав команд (за исключений экзотических), а на их использование.


 
CRLF   (2012-01-26 18:32) [9]

И я хочу Delphi XE4!!!!!!!!111


 
Германн ©   (2012-01-26 18:37) [10]


> Всем известно что на асме можно написать любую прогу.

Опять небось речь о драйвере на Дельфи :)


 
Асм   (2012-01-26 18:43) [11]


> Dimka Maslov

Да я понимаю что на встроенном асме только определенные участки кода пишут.Просто хотел разобраться в его возможностях.На сколько я вас понял то это тоже самое что и обычный асм.Если так то отлично!

> Dimka Maslov Любую прогу можно написать и безо всякого ассемблера
> Inovet Любую прогу можно написать хоть на чём.

А если я на делфи или бейсике хочу написать базу данных,какой то серьезный сайт или что то с связанное с процессором разве функций хватит?

> Опять небось речь о драйвере на Дельфи :)

В этот раз не буду:)


 
Dimka Maslov ©   (2012-01-26 18:45) [12]


> то это тоже самое что и обычный асм


Нет. Вы неправильно поняли.


> А если я на делфи или бейсике хочу написать базу данных,
> какой то серьезный сайт или что то с связанное с процессором
> разве функций хватит?


С избытком. Ну а кроме того, любая программа связана с процессором.


 
Асм   (2012-01-26 19:07) [13]


> связана с процессором.

Разумеется:)Я все о возможностях среды...

> С избытком.

Понятно.

> Нет. Вы неправильно поняли.

Задам вопрос по другому если конечно я никому не надоел:)Как я понял встроенный асм слабее обычного асма.А как тогда понять того автора,который писал,что поддерживаются все команды процессора?Всем известно,что любая программа состоит из процессорных команд.Потому я и не понимаю,если в среде делфи поддерживаются все команды процессора во встроенном асме,то почему встроенный асм слабее обычного?


 
Inovet ©   (2012-01-26 19:09) [14]

> [11] Асм   (26.01.12 18:43)
> А если я на делфи или бейсике хочу написать базу данных,
> какой то серьезный сайт или что то с связанное с процессором
> разве функций хватит?

А то. Не хватит, так напеши ищо.


 
Асм   (2012-01-26 19:16) [15]


> А то. Не хватит, так напеши ищо.

Все!С этим тоже разобрался:)

Всем спасибо за ответы!


 
Dimka Maslov ©   (2012-01-26 19:18) [16]


>  почему встроенный асм слабее обычного


Потому что сила ассемблера не в наборе команд, а в ограничениях на их использование.


 
Pavia ©   (2012-01-26 19:21) [17]

Интел и АМД не стоят на месте и постоянно добавляют новые инструкции.
Встроенный ассемблер Delphi 7 богатый. Если SSE он точно поддерживает то вот SSE3 уже точно нет.
Это обходится использованием db. Что скажем не удобно.
Помимо прочего встроенный ассемблер не позволяет переопределить автоматический размер сегмента(отсутствует команда  компилятора use 16/uses 16).
Эти ограничения не существенные.  

При ассемблерных вставках есть определённые правила для использования регистров, это не ограничения просто правила.


> А если я на делфи или бейсике хочу написать базу данных,
> какой то серьезный сайт или что то с связанное с процессором
> разве функций хватит?

Хватит.


 
Dimka Maslov ©   (2012-01-26 19:24) [18]


> это не ограничения просто правила


Давайте попробуем внутри ассемблерной вставки изменить EBP... Ну или EBX


 
Rouse_ ©   (2012-01-26 19:34) [19]


> Dimka Maslov ©   (26.01.12 18:17) [5]
> Почему сразу «костыль»?

Потому что db - это программирование на машкодах, а не на асме...


 
Dimka Maslov ©   (2012-01-26 19:45) [20]


> Потому что db - это программирование на машкодах, а не на
> асме...


На машкодах была в турбо паскале команда inline. А тут мы всё таки заключаем блок в asm..end :)


 
Inovet ©   (2012-01-26 19:46) [21]

> [19] Rouse_ ©   (26.01.12 19:34)
> Потому что db - это программирование на машкодах, а не на асме...

Зачем Делфи, можно прямо в FARе писать или в блокноте если он не подавится.


 
Асм   (2012-01-26 20:09) [22]


> Pavia ©   (26.01.12 19:21) [17]

Об этом я и спрашивал.На таком примере понятно в чем разница.
Еще раз всем спасибо за помощь.


 
Rouse_ ©   (2012-01-26 20:30) [23]


> А тут мы всё таки заключаем блок в asm..end :)

ну можно и без него, достаточно jmp или call а машкоды записать не в db а в инициализированном массиве - те-же яйцы...


 
Inovet ©   (2012-01-26 20:38) [24]

> [23] Rouse_ ©   (26.01.12 20:30)
> достаточно jmp или call а машкоды записать не в db а в инициализированном
> массиве

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


 
Dimka Maslov ©   (2012-01-26 21:19) [25]


>  Rouse_ ©   (26.01.12 20:30) [23]


Можно и так, сам когда то так делал, ну или почти так.


> Inovet ©   (26.01.12 20:38) [24]


Всё зависит от текущего уровня антивируса.


 
Rouse_ ©   (2012-01-26 21:24) [26]


> Кстати, насколько дозволено исполнять код в сегменте данных?

код на стеке не выполняется - а так назначай атрибуты странице и выполняй...


 
Anatoly Podgoretsky ©   (2012-01-26 21:51) [27]

Хотел тут написать, но теперь много надо писал, скажу только про это

> В одной статье автор воскликнул:

Это я воскликнул, но наверно не один.
И совет сходи ко мне на сайт, там есть две статьи про АСМ


 
Германн ©   (2012-01-26 22:09) [28]


> Anatoly Podgoretsky ©   (26.01.12 21:51) [27]

Так вот кто сказал Мяу!


 
Асм   (2012-01-26 23:20) [29]


> Это я воскликнул, но наверно не один.

Вот та статья.
http://delphiworld.narod.ru/base/delphi_and_asm.html

> И совет сходи ко мне на сайт, там есть две статьи про АСМ

Вы об этом сайте?
http://podgoretsky.com/
Если вас не затруднит,то дайте ссылку на эти статьи я и почитаю.


 
Inovet ©   (2012-01-27 00:11) [30]

> [26] Rouse_ ©   (26.01.12 21:24)
> > Кстати, насколько дозволено исполнять код в сегменте данных?
>
> код на стеке не выполняется - а так назначай атрибуты странице и выполняй...

Я, однако, в динамической памяти выполнял без назначения атрибутов. Это было ещё или на Вин2000 или даже на ВинНТ4. Понятно, что если назначить, то можно.


 
Дмитрий Белькевич   (2012-01-27 02:01) [31]


> Давайте попробуем внутри ассемблерной вставки изменить EBP.
> .. Ну или EBX


PUSH/POP в руки.


 
Германн ©   (2012-01-27 02:32) [32]


> Асм   (26.01.12 20:09) [22]
>
>
> > Pavia ©   (26.01.12 19:21) [17]
>
> Об этом я и спрашивал.На таком примере понятно в чем разница.
>

И кто-то ещё сказал
"В этот раз не буду" :)


 
Асм   (2012-01-27 02:55) [33]


> И кто-то ещё сказал
> "В этот раз не буду" :)

Однако,я не спрашивал про драйвера:)


 
Германн ©   (2012-01-27 03:10) [34]


> Однако,я не спрашивал про драйвера:)
>

Однако компилятор Дельфи вовсе не обязан следить за "специальными" инструкциями процессоров.


 
Rouse_ ©   (2012-01-27 09:59) [35]


> Я, однако, в динамической памяти выполнял без назначения
> атрибутов.

Раньше можно было. Справка по VirtualProtect:

If the system differentiates between read-only access and execute access, an attempt to execute code in the committed region results in an access violation.

В случае если DEP отключен для процесса (можно посмотреть в таскмоне) то код будет выполнятся даже при PAGE_READ. Ну и до кучи никто не мешает отключить DEP самостоятельно через SetProcessDEPPolicy()


 
Anatoly Podgoretsky ©   (2012-01-27 10:09) [36]

> Inovet  (27.01.2012 00:11:30)  [30]

А с тех пор появился DEP, как раз против таких.


 
Inovet ©   (2012-01-27 10:31) [37]

> [35] Rouse_ ©   (27.01.12 09:59)

Ага, понятно. Давно не интересовался, но так в общем и представлял. кроме вот этого

> [35] Rouse_ ©   (27.01.12 09:59)
> никто не мешает отключить DEP самостоятельно через SetProcessDEPPolicy()

Для такого изменения процессу наверняка нужны соответсвующие права.

> [36] Anatoly Podgoretsky ©   (27.01.12 10:09)
> А с тех пор появился DEP, как раз против таких.

Не. Я генерировал свой код из своих исходников в своей памяти. Что-то вроде говнокопилятора по типу Форт машины.


 
Rouse_ ©   (2012-01-27 11:01) [38]


> Для такого изменения процессу наверняка нужны соответсвующие права.

В MSDN ничего тако-го не нашел, поэтому думаю, что тех прав, которых требует VirtualProtect, достаточно и для SetProcessDEPPolicy


 
Inovet ©   (2012-01-27 11:23) [39]

> [38] Rouse_ ©   (27.01.12 11:01)
> > Для такого изменения процессу наверняка нужны соответсвующие права.
>
> В MSDN ничего тако-го не нашел, поэтому думаю, что тех прав,
> которых требует VirtualProtect, достаточно и для SetProcessDEPPolicy

Вообще-то да, своё же меняем, значит ССЗБ если что.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2012.06.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.004 c
15-1327780944
wl
2012-01-29 00:02
2012.06.03
фарма


15-1328246954
AV
2012-02-03 09:29
2012.06.03
Не работает Beep. Не всегда. Закономерности не вижу.


15-1326176242
БарЛог
2012-01-10 10:17
2012.06.03
Подключение светодиодной ленты


2-1327576110
Сергей
2012-01-26 15:08
2012.06.03
проблема с десятичным разделителем в дробях


2-1327946153
Rorschach
2012-01-30 21:55
2012.06.03
Портирование С++ кода на Паскаль





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский