Использование ассемблера с Free Pascal
В целом работа со встроенным ассемблером и подключение внешних объектных модулей происходит аналогично Turbo Pascal и Borland Delphi. Существенное отличие — возможность использовать ассемблер синтаксиса AT&T вместо привычного Intel’ловского (директива ). Следует также помнить, что формат .obj-файлов, поддерживаемый Free Pascal — COFF, а не OMF.
При наличии соответствующего ключа командной строки можно компилировать паскалевский код в ассемблер. Также существует возможность компилировать код на Паскале в ассемблер, соответствующий не GNU AS, а другим типам ассемблера (MASM, TASM, NASM и т.д.). Это определяется директивой компилятора .
Вместо . указывается одно из трех значений — ATT , INTEL , DIRECT (по умолчанию ATT ).
- ATT — AT&T-синтаксис, используемый, например, GNU AS.
- INTEL — Intel-синтаксис, хорошо знакомый многим по MASM и TASM, именно его использует встроенный ассемблер Turbo Pascal и Delphi.
- DIRECT — означает, что asm-вставка будет напрямую копироваться в промежуточный asm-код. Данный вариант может быть полезен при использовании совместно с директивой , дабы во вставке использовать все возможности внешнего ассемблера.
Нужно отметить, что синтаксисы AT&T и Intel сильно отличаются. Я, например, несмотря на то, что «родной» для FPC синтаксис — AT&T, всегда выставляю , просто потому, что привык.
Встроенный ассемблер синтаксиса Intel несколько ограничен:
- Не поддерживается модификатор TBYTE . В результате, нет возможности работать с типом extended . Напомню, что в синтаксисе AT&T размерность операндов определяется суффиксом, добавляемым к мнемонике команды.
- Не поддерживаются операторы HIGH , LOW , OFFSET и SEG .
Данная директива соответствует ключу командной строки -R .
Вместо . указывается одно из следующих значений: AS , AS_AOUT , ASW , COFF , MASM , NASM , NASMCOFF , NASMELF , PECOFF , TASM . По умолчанию для Win32 — PECOFF .
Должен заметить, однако, что на некоторых значениях из этого списка (взят из документации) компилятор выдает сообщение о неподдерживаемом формате или неизвестном ключе.
Под Win32 реально имеет смысл использовать ASW , COFF , NASMCOFF или NASMELF (в силу «неразличимости» NASM), PECOFF (по умолчанию) и TASM .
COFF и PECOFF создают объектные файлы для GO32V2 и PE (Win32). А ASW , NASMCOFF , NASMELF и TASM пытаются сформировать объектные файлы через промежуточный ассемблерный код соответственного синтаксиса. Чтобы это удалось, необходимо иметь соответствующий ассемблер в том каталоге, где находятся исполняемые файлы FPC.
Если компиляция проходит успешно, промежуточные ассемблерные файлы удаляются автоматически. Чтобы этого не происходило можно использовать ключ командной строки -a .
Компиляция в TASM и NASM правильно производится только при отключенном smartlink, при включенном — в asm-файле расположение параметров такое, как в синтаксисе AT&T ( , вместо , ).
Данная директива соответствует ключу командной строки -A .
Ассемблер pascal в linux
Библиотека сайта rus-linux.net
3.10 Compiling Pascal Programs
Pascal programs can be converted to C language programs and then compiled in the usual way. The p2c command on Linux does this for you. Consider the following Pascal program hello.pas.
(* Program to demonstrate Pascal compilation *) program Hello ; begin writeln ('Hello world') end.
The following command will create a file hello.c which is the equivalent C version of the hello.pas program.
[rr@conformix 4]$ p2c hello.pas Hello Translation completed. [rr@conformix 4]$
The output hello.c file is shown below:
/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */ /* From input file "hello.pas" */ /* Program to demonstrate Pascal compilation */ #include main(argc, argv) int argc; Char *argv[]; < PASCAL_MAIN(argc, argv); printf("Hello world\n"); exit(EXIT_SUCCESS); >/* End. */
You may need some libraries with p2c program and C compiler to successfully complete this process.
Many Pascal compilers are also available in the open source world. These compilers can be used to generate executable code from Pascal source directly without any help from GCC.
3.10.1 Using Free Pascal (fpc)
The Free Pascal Project has created a 32-bit Pascal compiler which is available for Linux, among other operating systems. You can download it from http://www.freepascal.org . This software is licensed under GPL like other open source projects. At the time of writing this book version 1.0.4 is available for download. After download, you can install the compiler as follows on a RedHat system:
[root@conformix rr]# rpm --install fpc-1.0.4.i386.rpm Write permission in /etc. Found libgcc.a in /usr/lib/gcc-lib/i386-redhat-linux/2.96 Writing sample configuration file to /etc/ppc386.cfg [root@conformix rr]#
The best thing about this compiler is that you don’t need to convert source code files to C language and then compile these. The fpc compiler creates binary executable files. The following command creates an executable file hello from hello.pas program listed earlier.
[rr@conformix 4]$ fpc hello.pas Free Pascal Compiler version 1.0.4 [2000/12/18] for i386 Copyright (c) 1993-2000 by Florian Klaempfl Target OS: Linux for i386 Compiling hello.pas Assembling hello Linking hello 6 Lines compiled, 0.1 sec [rr@conformix 4]$
The output hello program can be executed like any other program.