Ассемблер в Delphi и Lazarus

Главная / Ассемблер / Ассемблер и языки высокого уровня /

Лучшие книги по Ассемблеру Лучшие книги по Ассемблеру

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

В общем случае не очень часто, но всё-таки иногда приходится в исходный текст на языке высокого уровня вставлять кусочки кода на Ассемблере.

Практически все средства разработки позволяют это делать. Только в некоторых (таких как Turbo Pascal или Delphi) это делается “лёгким движением руки”, а в некоторых (таких как Dev-C++), что называется, “без бутылки не разобраться”.

В этой статье я расскажу, как вставить кусок кода на Ассемблере в исходный текст программы на Delphi и Lazarus.

Asm в Delphi

Начнём с Делфи. Здесь всё предельно просто. Вам надо только включить в то место исходного кода, где надо вставить код на ассемблере, ключевое слово asm, после которого вы пишите инструкции ассемблера как обычно - одна инструкция в одной строке. Завершается блок на ассемблере ключевым словом end и точкой с запятой.

Простой пример использования asm в Delphi в консольном приложении приведён ниже:

program asmtest;

{$APPTYPE CONSOLE}

var x : byte = 10;

begin
  WriteLn('X = ', x);
  asm
    MOV  AL,  x     //Поместить значение их Х в AL
    INC  AL         //Увеличить AL на единицу
    MOV  x,   AL    //Поместить значение из AL в Х
  end;
  WriteLn('X = ', x);
  WriteLn('Press ENTER...');
  ReadLn;
end.

Разъяснять тут особо нечего. Только обратите внимание на комментарии - не забывайте, что это программа на Delphi, не на на Ассемблере.

Asm в Lazarus

Lazarus мало чем отличается от Делфи. Более того, разработчики Lazarus стремятся к максимальной совместимости с Делфи. Но есть объективные сложности и предпочтения. Если вы попробуете откомпилировать приведённый выше код в Лазарус, то получите сообщение об ошибке:

Fatal: Selected assembler reader not supported

Что можно перевести как “выбранный ассемблер не поддерживается”.

Почему?

Потому что по умолчанию Лазарус использует ассемблер AT&T, синтаксис которого отличается от привычного многим синтаксиса MASM/TASM. И чтобы компилятор начал понимать привычные инструкции MASM/TASM, надо с помощью специальной директивы компилятора указать нужный нам вид ассемблера.

Пример использования asm в Lazarus в консольном приложении приведён ниже:

program asmtest;

{$ASMMODE INTEL}    //!!!Использовать эту директиву      

var x : byte = 10;

begin
  WriteLn('X = ', x);
  asm
    MOV  AL,  x     //Поместить значение их Х в AL
    INC  AL         //Увеличить AL на единицу
    MOV  x,   AL    //Поместить значение из AL в Х
  end;
  WriteLn('X = ', x);
  WriteLn('Press ENTER...');
  ReadLn;
end.

Ну что же, на этом всё. Не забывайте делиться ссылкой на статью с друзьями.



Первые шаги в программирование Первые шаги в программирование

Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su