Изучаем ассемблер в Delphi. |
||||
---|---|---|---|---|
Основное предназначение этой статьи, заполнить пробелы в оригинальной документации по Borland Delphi Developer, при этом весь программный код, а так же теория, полность совместимы со всеми версиями Delphi. Основное направление статьи, это познакомиться с использованием ассемблера в Object Pascal. Однако, не будем пропускать и те аспекты программирования, которые будут требовать пояснения для конкретных примеров, приведённых в этой статье. Использование Ассемблера в Борландовком Delphi Зачем использовать Ассемблер? (1) Обработка большого количества данных. Nb. В данный случай не входит ситуация, когда используется язык запроса данных. (2) В высокоскоростных подпрограммах работы с дисплеем. Nb. Имеется ввиду использование простых процедур на чистом паскале, но никак не внешних библиотек и DirectX. В конце статьи мы рассмотрим примеры, которые явно отражают значимость этих критериев, а так же не только когда и где использовать ассемблерные вставки, но и как включать такой код в Delphi. Что такое Ассемблер? Как мы уже выяснили, процессор манипулирует значениями регистров. Машинный
код операции прибавления 10 к значению регистра eax будет выглядеть следующим
образом Однако, тут есть важный момент, про который забывать не желательно. Так как регистр 32-битный(4 байта), то его значение будет записано сразу в четыре ячейки памяти 1536, 1537, 1538 и 1539. А теперь давайте посмотрим, как компилятор преобразует действия с переменными
в машинный код. Допустим у нас есть строка Итак, рассмотрим первый пример. Сразу извинюсь за тривиальность, но с чего-то надо начинать. function Sum(X,Y:integer):integer; А вот так будет выглядеть оперция сложения двух целых чисел на ассемблере: function Sum(X,Y:integer):integer; Этот код прекрасно работает, однако он не даёт нам преимущества в скорости, а так же потерялось восприятие кода. Но не стоит огорчаться, так как те немногие знания, которые Вы почерпнули из этого материала, можно использовать с большей пользой. Допустим, нам необходимо преобразовать явные значения Red,Green, и Blue в цвета типа TColor, подходящие для использования в Delphi. Тип TColor описан как 24-битный True Colour хранящийся в формате целого числа, то есть четыре байта, старший из которых равен нулю, а далее по порядку красный, зелёный, синий. function GetColour(Red,Green,Blue:integer):TColor; Заметьте, что я использовал несколько бинарных операций. Эти операции также определены непосредственно в Object Pascal. Продолжение следует ... |