Ассемблер в 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

Яндекс.Метрика