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

ops/2025/4/1 4:57:02/

有些程序设计语言和编译器教材会以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;
vara, b, c: integer;
beginwrite('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;
vara, b, c: integer;
begina := 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),%rspmovq    %rbx,-8(%rbp)call    fpc_initializeunitsmovw    $3,U_$P$ADD_INTEGER_$$_Amovw    $4,U_$P$ADD_INTEGER_$$_Bmovswl  U_$P$ADD_INTEGER_$$_A,%edxmovswl  U_$P$ADD_INTEGER_$$_B,%eaxleal    (%edx,%eax),%eaxmovw    %ax,U_$P$ADD_INTEGER_$$_Ccall    fpc_get_outputmovq    %rax,%rbxmovq    $_$ADD_INTEGER$_Ld1,%rdxmovq    %rbx,%rsimovl    $0,%edicall    fpc_write_text_shortstrcall    fpc_iocheckmovswq  U_$P$ADD_INTEGER_$$_C,%rdxmovq    %rbx,%rsimovl    $0,%edicall    fpc_write_text_sintcall    fpc_iocheckmovq    %rbx,%rdicall    fpc_writeln_endcall    fpc_iocheckcall    fpc_do_exitmovq    -8(%rbp),%rbxmovq    %rbp,%rsppopq    %rbpret
.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


http://www.ppmy.cn/ops/27728.html

相关文章

机器学习笔记 - Python数据清理通用流程简述

一、简述 Python中数据清理是重要的环节,并通过解决缺失值、离群值、重复和不一致等常见问题以进行下一步的数据分析。 通常我们开始一个新的数据项目时,通因为各种各样的问题,通常获得的数据很少能直接上到模型里面去跑,所以要进行清理,清理数据是一个消除错误、异常值和…

layui 表格添加 checkbox 开关

记录 &#xff1a; 使用 数据表格 获取到数据以后 用 表格中加载表单元素 {field: test, width: 20%, title: 是否显示, align: center, unresize: true ,templet: #switchTpl} 由于获取到的 test 数据 为的 value值 true 所以使用时候直接写了 <input type"ch…

虹科Pico汽车示波器 | 免拆诊断案例 | 起动机免拆诊断故障 2 例

电磁开关、换向器烧蚀及炭刷磨损均会导致起动机偶尔不工作&#xff0c;使发动机偶尔无法起动。由于故障是偶发的&#xff0c;且没有故障代码&#xff0c;这往往会让维修人员无从下手&#xff0c;而用Pico示波器测量起动电流&#xff0c;就会让这些“亚健康状态”一目了然。 案例…

MongoDB数据库迁移的两种办法

在做系统运维时&#xff0c;经常需要对数据库进行迁移&#xff0c;今天这里分享一下MongoDB数据库数据迁移的办法。两种方法 方法1 利用NoSQLBooster for MongoDB直接复制粘贴 这种方法&#xff0c;适合在windows电脑上&#xff0c;可以直接访问原始和目标两个MongoDB库的。优…

Elementplus远程搜索下拉

远程搜索 :remote-method“getAppNumberList” <div class"filter-item"><span>型号:</span><el-select v-model"listQuery.numberId" clearable filterable :remote-method"getAppNumberList" remote placeholder"请…

网络安全知识点

网络安全 1&#xff0e; 网络安全的定义&#xff0c;网络安全的属性。 定义&#xff1a;针对各种网络安全威胁研究其安全策略和机制&#xff0c;通过防护、检测和响应&#xff0c;确保网络系统及数据的安全性。 属性&#xff1a;机密性 认证&#xff08;可鉴别性&#xff09…

在 PHP中使用 Redis 缓存的方法有哪些

在 PHP 中使用 Redis 作为缓存的方法非常多样化&#xff0c;因为 Redis 提供了丰富的数据结构和命令集。以下是一些常见的 PHP 中使用 Redis 缓存的方法&#xff1a; 字符串缓存 Redis 最基本的数据结构是字符串&#xff08;string&#xff09;&#xff0c;你可以用它来缓存简…

安卓手机APP开发__媒体开发部分__立体环绕声

安卓手机APP开发__媒体开发部分__立体环绕声 目录 概述 对于能力的查询 耳机的跟踪 可兼容的内容 声音的属性 禁用立体环绕声的声音 声音的格式 对立体环绕声的修改的监听