Использование ассемблера в Дельфи Delphi — среда быстрой разработки, где в качестве языка программирования используется Object Pascal. На сегодняшний день позволяет разрабатывать ПО для Microsoft Windows, Mac OS, iOS и Android и входит в состав Embarcadero RAD Studio https://delphi-hlp.ru/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi.feed 2022-09-13T05:06:26+07:00 Delphi help info@delphi-hlp.ru Joomla! - Open Source Content Management Замечания о синтаксисе 2017-07-05T21:48:14+07:00 2017-07-05T21:48:14+07:00 https://delphi-hlp.ru/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/zamechaniya-o-sintaksise.html Super User toto44@inbox.ru <h1> Замечания о синтаксисе</h1> <p> </p> <p>Глава 2: Замечания о синтаксисе</p> <p>В этой главе, мы рассмотрим синтаксические требования, которые вам требуется знать. Если вы использовали отдельный ассемблер, то вы заметили, что встроенный ассемблер в Дельфи 1-5 поддерживает только относительно небольшой набор возможностей языка. Эта ситуация была улучшена с выходом Дельфи 6, теперь компилятор распознает набор MMX, SIMD и SSE инструкций (так же и Enhanced 3D для AMD CPU, но данная статья сфокусирована только на Intel, и мы не будем обсуждать это в дальнейшем). С другой стороны, это также дает возможность использовать некоторые OP конструкции внутри ассемблерного кода.</p> <p> </p> <p>2.1. Инструкции и команды</p> <p>Ваш код на ассемблере состоит из нескольких выражений. Каждая инструкция состоит как минимум из одной команды. В большинстве случаев, вам потребуется использовать от одного до нескольких операндов. Операнды разделяются символом запятой. Также в инструкции могут использоваться префиксы (например, rep или lock). Наконец, инструкция может включать метку (смотрите ниже рассуждения о метках).</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/zamechaniya-o-sintaksise.html">Подробнее...</a></p> <h1> Замечания о синтаксисе</h1> <p> </p> <p>Глава 2: Замечания о синтаксисе</p> <p>В этой главе, мы рассмотрим синтаксические требования, которые вам требуется знать. Если вы использовали отдельный ассемблер, то вы заметили, что встроенный ассемблер в Дельфи 1-5 поддерживает только относительно небольшой набор возможностей языка. Эта ситуация была улучшена с выходом Дельфи 6, теперь компилятор распознает набор MMX, SIMD и SSE инструкций (так же и Enhanced 3D для AMD CPU, но данная статья сфокусирована только на Intel, и мы не будем обсуждать это в дальнейшем). С другой стороны, это также дает возможность использовать некоторые OP конструкции внутри ассемблерного кода.</p> <p> </p> <p>2.1. Инструкции и команды</p> <p>Ваш код на ассемблере состоит из нескольких выражений. Каждая инструкция состоит как минимум из одной команды. В большинстве случаев, вам потребуется использовать от одного до нескольких операндов. Операнды разделяются символом запятой. Также в инструкции могут использоваться префиксы (например, rep или lock). Наконец, инструкция может включать метку (смотрите ниже рассуждения о метках).</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/zamechaniya-o-sintaksise.html">Подробнее...</a></p> Ввведение 2017-07-05T21:46:14+07:00 2017-07-05T21:46:14+07:00 https://delphi-hlp.ru/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/vvvedenie.html Super User toto44@inbox.ru <h1>Ввведение</h1> <p>  </p> <p>Вводная глава: Нужно ли это вам?</p> <p>Многие программисты сегодня ассоциируют ассемблер как сложный, низкоуровневый язык программирования. Они считают его быстрым, но большинство их них думает, что его сложно или невозможно изучить. В действительности, положение не настолько сложно. Вполне возможно научиться писать хороший код, не будучи гением. С другой стороны, не думайте, что несколько уроков позволят вам производить более быстрый код, чем получится с помощью Паскаля. Причина в том, что когда вы пишите на Паскале, то вы на самом деле пользуетесь услугами высокоэффективного программиста – компилятором Дельфи. В целом код производимый им очень эффективный и быстрый. После некоторых уроков по специальным методам кодирования вы сможете сделать более эффективный код, чем Паскаль и Дельфи. Робертом Ли был создан и обслуживается наиболее исчерпывающий сайт по этой теме. Каждый серьезный программист должен познакомиться с информацией на этом сайте.</p> <p> </p> <p>Большинство программистов считают, что собственный ассемблерный код по определению быстрее, чем скомпилированный компилятором Паскаля. Конечно, так не всегда. Плохо написанные процедуры на Ассемблере могут оказаться по качеству хуже и могут вызвать странные ошибки и проблемы в ваших приложениях. Задачей данных статей не является обучить вас основам Ассемблера. Есть много другой информации в других источниках и конечно вы должны быть в хороших отношениях с системой команд процессоров Intel (в статьях фокус сделан на серию Пентиум, особенно PII и PIII)  на уровне обычного программирование. Вы можете найти руководства по семейству процессоров на сайте https://developer.intel.com. И также на сайте (https://webster.cs.ucr.edu/) «The Art of Assembly», очень солидное руководство по программированию на Ассемблере, который должны посмотреть, если хотите заняться серьезным программированием на ассемблере.</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/vvvedenie.html">Подробнее...</a></p> <h1>Ввведение</h1> <p>  </p> <p>Вводная глава: Нужно ли это вам?</p> <p>Многие программисты сегодня ассоциируют ассемблер как сложный, низкоуровневый язык программирования. Они считают его быстрым, но большинство их них думает, что его сложно или невозможно изучить. В действительности, положение не настолько сложно. Вполне возможно научиться писать хороший код, не будучи гением. С другой стороны, не думайте, что несколько уроков позволят вам производить более быстрый код, чем получится с помощью Паскаля. Причина в том, что когда вы пишите на Паскале, то вы на самом деле пользуетесь услугами высокоэффективного программиста – компилятором Дельфи. В целом код производимый им очень эффективный и быстрый. После некоторых уроков по специальным методам кодирования вы сможете сделать более эффективный код, чем Паскаль и Дельфи. Робертом Ли был создан и обслуживается наиболее исчерпывающий сайт по этой теме. Каждый серьезный программист должен познакомиться с информацией на этом сайте.</p> <p> </p> <p>Большинство программистов считают, что собственный ассемблерный код по определению быстрее, чем скомпилированный компилятором Паскаля. Конечно, так не всегда. Плохо написанные процедуры на Ассемблере могут оказаться по качеству хуже и могут вызвать странные ошибки и проблемы в ваших приложениях. Задачей данных статей не является обучить вас основам Ассемблера. Есть много другой информации в других источниках и конечно вы должны быть в хороших отношениях с системой команд процессоров Intel (в статьях фокус сделан на серию Пентиум, особенно PII и PIII)  на уровне обычного программирование. Вы можете найти руководства по семейству процессоров на сайте https://developer.intel.com. И также на сайте (https://webster.cs.ucr.edu/) «The Art of Assembly», очень солидное руководство по программированию на Ассемблере, который должны посмотреть, если хотите заняться серьезным программированием на ассемблере.</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/vvvedenie.html">Подробнее...</a></p> Об основах ассемблерных процедур 2017-07-05T21:47:12+07:00 2017-07-05T21:47:12+07:00 https://delphi-hlp.ru/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/ob-osnovakh-assemblernykh-protsedur.html Super User toto44@inbox.ru <h1>Об основах ассемблерных процедур</h1> <p>Глава 1: Об основах ассемблерных процедур</p> <p>Когда вы захотите добавить хороший и успешный ассемблерный код внутрь проекта на Дельфи, вам потребуется вызвать BASM процедуру, передать в нее переменные и принять обратно результат. Для этого вы должны знать, как работают соглашения о передаче параметров. На первом шаге мы обсудим основное: подпрограммы на ассемблере, получают некоторые переменные для обработки, возвращают впоследствии результаты. Позже, в других главах, мы обсудим, как вызывать другие функции, методы и процедуры из ассемблерного кода с помощью регистров и стека.</p> <p> </p> <p>1.1. Где размещать ассемблерный код</p> <p>Ассемблерные инструкции размещаются внутри блока asm...end. Эти блоки могут появляться внутри процедур и функций обычного кода, но я настоятельно не рекомендую поступать таким образом. Гораздо лучше изолировать их в отдельной функции или процедуре. Вставка asm блока внутри обычной процедуры создает сложности для компилятора Паскаля и код становится не эффективным с точки зрения производительности. Переменные, которые обычно передаются через регистры, в этом случае будут передаваться через стек или перезагрузку. Также, это заставляет компилятор адаптировать собственный код к вашему вставленному коду, что делает механизм оптимизации менее эффективным. Так, что это становится правилом помещать ассемблерный код в отдельную процедуру или функцию. Кроме того - это вопрос проектирования. Читабельность и управляемость вашего кода становится выше, если он помещен в свой собственный блок.</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/ob-osnovakh-assemblernykh-protsedur.html">Подробнее...</a></p> <h1>Об основах ассемблерных процедур</h1> <p>Глава 1: Об основах ассемблерных процедур</p> <p>Когда вы захотите добавить хороший и успешный ассемблерный код внутрь проекта на Дельфи, вам потребуется вызвать BASM процедуру, передать в нее переменные и принять обратно результат. Для этого вы должны знать, как работают соглашения о передаче параметров. На первом шаге мы обсудим основное: подпрограммы на ассемблере, получают некоторые переменные для обработки, возвращают впоследствии результаты. Позже, в других главах, мы обсудим, как вызывать другие функции, методы и процедуры из ассемблерного кода с помощью регистров и стека.</p> <p> </p> <p>1.1. Где размещать ассемблерный код</p> <p>Ассемблерные инструкции размещаются внутри блока asm...end. Эти блоки могут появляться внутри процедур и функций обычного кода, но я настоятельно не рекомендую поступать таким образом. Гораздо лучше изолировать их в отдельной функции или процедуре. Вставка asm блока внутри обычной процедуры создает сложности для компилятора Паскаля и код становится не эффективным с точки зрения производительности. Переменные, которые обычно передаются через регистры, в этом случае будут передаваться через стек или перезагрузку. Также, это заставляет компилятор адаптировать собственный код к вашему вставленному коду, что делает механизм оптимизации менее эффективным. Так, что это становится правилом помещать ассемблерный код в отдельную процедуру или функцию. Кроме того - это вопрос проектирования. Читабельность и управляемость вашего кода становится выше, если он помещен в свой собственный блок.</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/ob-osnovakh-assemblernykh-protsedur.html">Подробнее...</a></p> Примеры 2017-07-05T21:49:45+07:00 2017-07-05T21:49:45+07:00 https://delphi-hlp.ru/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/primery.html Super User toto44@inbox.ru <h1>Примеры</h1> <p> </p> <p>В данной главе, мы приведем несколько примеров на basm. Это только первая часть моих статей по Дельфи и встроенному ассемблеру, которая опубликована на данном сайте. Расположено это на странице featured articles, и называется Considerations for writing and using Intel assembly code in Delphi projects (Последнее изменение 1 сентября 2001). Мы будем признательны за замечания или советы по этим страницам.</p> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Прямой доступ к портам в Windows 95 и 98</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Подсчет количества установленных бит в integer</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Проверка установки отдельного бита (0-31)</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Установка отдельного бита (0-31) в единицу</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Сброс отдельного бита</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Извлечение битовой маски их integer</td> </tr> </tbody> </table> </div> <p class="feed-readmore"><a target="_blank" href ="/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/primery.html">Подробнее...</a></p> <h1>Примеры</h1> <p> </p> <p>В данной главе, мы приведем несколько примеров на basm. Это только первая часть моих статей по Дельфи и встроенному ассемблеру, которая опубликована на данном сайте. Расположено это на странице featured articles, и называется Considerations for writing and using Intel assembly code in Delphi projects (Последнее изменение 1 сентября 2001). Мы будем признательны за замечания или советы по этим страницам.</p> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Прямой доступ к портам в Windows 95 и 98</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Подсчет количества установленных бит в integer</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Проверка установки отдельного бита (0-31)</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Установка отдельного бита (0-31) в единицу</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Сброс отдельного бита</td> </tr> </tbody> </table> </div> <div> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr valign="baseline"> <td width="24">•</td> <td>Извлечение битовой маски их integer</td> </tr> </tbody> </table> </div> <p class="feed-readmore"><a target="_blank" href ="/index.php/vzaimodejstvie-s-drugimi-yazykami/ispolzovanie-assemblera-v-delfi/primery.html">Подробнее...</a></p>