程序员老鸟的 Pascal 语言菜鸟教程 -- 快速体验 Pascal

有些程序设计语言和编译器教材会以pascal语言的程序为例,这里写一个快速掌握简单应用的介绍。

1,安装 free pascal 编译器

ubuntu 22.04 直接通过 apt 源安装,此时的版本号为 3.2.2


    1.1 安装

    sudo apt install fp-compiler


    1.2 简单测试

    fpc -V


    1.3 获得帮助信息

    fpc -h


    

2,编译 pascal 源程序


    源码文件 addInteger.pas  的内容如下:
    
 

program add_integer;
var
  a, b, c: integer;
begin
  write('integer a = ');
  readln(a);

  write('integer b = ');
  readln(b);

  c := a + b;

  writeln('c = a + b = ', c);
end.

fpc addInteger.pas
./addInteger

编译:   

fpc addInteger.pas

运行:

./addInteger

效果:

3,安装 free pascal 文档

sudo apt install fp-docs

会被安装在 /usr/share/doc/fp-docs/3.2.2/

4,官方 IDE

free pascal 官方同时设计了类似window中edit的 基于控制台的 IDE,安装如下:

sudo apt install fp-ide

打开ide:

$ fp

效果如图:

$ fp ./addInteger.pas

可以接受鼠标操作和快捷键

退出:  Alt + x

5,编译输出汇编语言文件

使用选项 -a

$ fpc addInteger.pas  -a

6,一个简单的源文件的汇编

源码 addTest.pas  :

program add_integer;
var
  a, b, c: integer;
begin
  a := 3;
  b := 4;
  c := a + b;

  writeln('c = a + b = ', c);
end.

fpc -a addTest.pas

汇编结果:

cat addTest.s


        .file "addTest.pas"
# Begin asmlist al_procedures

.section .text.n_main
        .balign 16,0x90
.globl  PASCALMAIN
        .type   PASCALMAIN,@function
PASCALMAIN:
.globl  main
        .type   main,@function
main:
.Lc1:
        pushq   %rbp
.Lc3:
.Lc4:
        movq    %rsp,%rbp
.Lc5:
        leaq    -16(%rsp),%rsp
        movq    %rbx,-8(%rbp)
        call    fpc_initializeunits
        movw    $3,U_$P$ADD_INTEGER_$$_A
        movw    $4,U_$P$ADD_INTEGER_$$_B
        movswl  U_$P$ADD_INTEGER_$$_A,%edx
        movswl  U_$P$ADD_INTEGER_$$_B,%eax
        leal    (%edx,%eax),%eax
        movw    %ax,U_$P$ADD_INTEGER_$$_C
        call    fpc_get_output
        movq    %rax,%rbx
        movq    $_$ADD_INTEGER$_Ld1,%rdx
        movq    %rbx,%rsi
        movl    $0,%edi
        call    fpc_write_text_shortstr
        call    fpc_iocheck
        movswq  U_$P$ADD_INTEGER_$$_C,%rdx
        movq    %rbx,%rsi
        movl    $0,%edi
        call    fpc_write_text_sint
        call    fpc_iocheck
        movq    %rbx,%rdi
        call    fpc_writeln_end
        call    fpc_iocheck
        call    fpc_do_exit
        movq    -8(%rbp),%rbx
        movq    %rbp,%rsp
        popq    %rbp
        ret
.Lc2:
.Le0:
        .size   main, .Le0 - main

.section .text
# End asmlist al_procedures
# Begin asmlist al_globals

.section .bss
        .balign 2
        .type U_$P$ADD_INTEGER_$$_A,@object
        .size U_$P$ADD_INTEGER_$$_A,2
U_$P$ADD_INTEGER_$$_A:
        .zero 2

.section .bss
        .balign 2
        .type U_$P$ADD_INTEGER_$$_B,@object
        .size U_$P$ADD_INTEGER_$$_B,2
U_$P$ADD_INTEGER_$$_B:
        .zero 2

.section .bss
        .balign 2
        .type U_$P$ADD_INTEGER_$$_C,@object
        .size U_$P$ADD_INTEGER_$$_C,2
U_$P$ADD_INTEGER_$$_C:
        .zero 2

.section .data.n_INITFINAL
        .balign 8
.globl  INITFINAL
        .type   INITFINAL,@object
INITFINAL:
        .quad   1,0
        .quad   INIT$_$SYSTEM
        .quad   0
.Le1:
        .size   INITFINAL, .Le1 - INITFINAL

.section .data.n_FPC_THREADVARTABLES
        .balign 8
.globl  FPC_THREADVARTABLES
        .type   FPC_THREADVARTABLES,@object
FPC_THREADVARTABLES:
        .long   1
        .quad   THREADVARLIST_$SYSTEM$indirect
.Le2:
        .size   FPC_THREADVARTABLES, .Le2 - FPC_THREADVARTABLES

.section .data.n_FPC_RESOURCESTRINGTABLES
        .balign 8
.globl  FPC_RESOURCESTRINGTABLES
        .type   FPC_RESOURCESTRINGTABLES,@object
FPC_RESOURCESTRINGTABLES:
        .quad   0
.Le3:
        .size   FPC_RESOURCESTRINGTABLES, .Le3 - FPC_RESOURCESTRINGTABLES

.section .data.n_FPC_WIDEINITTABLES
        .balign 8
.globl  FPC_WIDEINITTABLES
        .type   FPC_WIDEINITTABLES,@object
FPC_WIDEINITTABLES:
        .quad   0
.Le4:
        .size   FPC_WIDEINITTABLES, .Le4 - FPC_WIDEINITTABLES

.section .data.n_FPC_RESSTRINITTABLES
        .balign 8
.globl  FPC_RESSTRINITTABLES
        .type   FPC_RESSTRINITTABLES,@object
FPC_RESSTRINITTABLES:
        .quad   0
.Le5:
        .size   FPC_RESSTRINITTABLES, .Le5 - FPC_RESSTRINITTABLES

.section .fpc.n_version
        .balign 16
        .type   __fpc_ident,@object
__fpc_ident:
        .ascii  "FPC 3.2.2+dfsg-9ubuntu1 [2022/04/11] for x86_64 - L"
        .ascii  "inux"
.Le6:
        .size   __fpc_ident, .Le6 - __fpc_ident

.section .data.n___stklen
        .balign 8
.globl  __stklen
        .type   __stklen,@object
__stklen:
        .quad   8388608
.Le7:
        .size   __stklen, .Le7 - __stklen

.section .data.n___heapsize
        .balign 8
.globl  __heapsize
        .type   __heapsize,@object
__heapsize:
        .quad   0
.Le8:
        .size   __heapsize, .Le8 - __heapsize

.section .data.n___fpc_valgrind
        .balign 8
.globl  __fpc_valgrind
        .type   __fpc_valgrind,@object
__fpc_valgrind:
        .byte   0
.Le9:
        .size   __fpc_valgrind, .Le9 - __fpc_valgrind

.section .data.n_FPC_RESLOCATION
        .balign 8
.globl  FPC_RESLOCATION
        .type   FPC_RESLOCATION,@object
FPC_RESLOCATION:
        .quad   0
.Le10:
        .size   FPC_RESLOCATION, .Le10 - FPC_RESLOCATION
# End asmlist al_globals
# Begin asmlist al_typedconsts

.section .rodata.n__$ADD_INTEGER$_Ld1
        .balign 8
.globl  _$ADD_INTEGER$_Ld1
_$ADD_INTEGER$_Ld1:
        .ascii  "\014c = a + b = \000"
.Le11:
        .size   _$ADD_INTEGER$_Ld1, .Le11 - _$ADD_INTEGER$_Ld1
# End asmlist al_typedconsts
# Begin asmlist al_dwarf_frame

.section .debug_frame
.Lc6:
        .long   .Lc8-.Lc7
.Lc7:
        .long   -1
        .byte   1
        .byte   0
        .uleb128        1
        .sleb128        -4
        .byte   16
        .byte   12
        .uleb128        7
        .uleb128        8
        .byte   5
        .uleb128        16
        .uleb128        2
        .balign 4,0
.Lc8:
        .long   .Lc10-.Lc9
.Lc9:
        .quad   .Lc6
        .quad   .Lc1
        .quad   .Lc2-.Lc1
        .byte   4
        .long   .Lc3-.Lc1
        .byte   14
        .uleb128        16
        .byte   4
        .long   .Lc4-.Lc3
        .byte   5
        .uleb128        6
        .uleb128        4
        .byte   4
        .long   .Lc5-.Lc4
        .byte   13
        .uleb128        6
        .balign 4,0
.Lc10:
# End asmlist al_dwarf_frame
.section .note.GNU-stack,"",%progbits

相关推荐

  1. docker教程

    2024-05-02 16:12:01       17 阅读
  2. docker教程

    2024-05-02 16:12:01       19 阅读
  3. C语言实例

    2024-05-02 16:12:01       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-02 16:12:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-02 16:12:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-02 16:12:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-02 16:12:01       20 阅读

热门阅读

  1. windows重置mysql root密码

    2024-05-02 16:12:01       15 阅读
  2. springBoot核心

    2024-05-02 16:12:01       7 阅读
  3. 使用 Docker-Compose 部署 Kafka

    2024-05-02 16:12:01       12 阅读
  4. 最大公因数和最小公倍数函数(补续)

    2024-05-02 16:12:01       14 阅读
  5. Nuxt3路由跳转

    2024-05-02 16:12:01       12 阅读
  6. docker 搭建 zipkin

    2024-05-02 16:12:01       11 阅读
  7. 复现论文5:UMI

    2024-05-02 16:12:01       8 阅读
  8. 2024-05-02 问AI: 介绍一下IMDB数据集

    2024-05-02 16:12:01       12 阅读
  9. 2024-5-2——雇佣 K 名工人的最低成本

    2024-05-02 16:12:01       10 阅读