|
Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Ассемблер в 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.
Ну что же, на этом всё. Не забывайте делиться ссылкой на статью с друзьями.
|
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на рассылки по программированию |