程序员老鸟的 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;
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.xdnf.cn/news/1409862.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【maven】pom文件详解和延伸知识

【maven】pom文件详解 【一】maven项目的pom文件详解【1】maven项目的目录结构【2】根元素和必要配置【3】父项目和parent元素【4】项目构建需要的信息【5】项目依赖相关信息(1)依赖坐标(2)依赖类型(3)依赖…

JavaScript this 上下文深度探索:综合指南涵盖隐式与显式call、apply、bind、箭头函数、构造函数等用法于多样场景

JavaScript中的this关键字代表函数执行的上下文环境,核心在于确定函数内部访问的当前对象。它根据函数调用方式动态变化,对事件处理、对象方法调用等至关重要。通过.call(), .apply(), .bind()或箭头函数控制this,可确保代码逻辑正确绑定对象…

python可视化学习笔记折线图问题-起始点问题

问题描述: 起始点的位置不对 from pyecharts.charts import Line import pyecharts.options as opts # 示例数据 x_data [1,2,3,4,5] y_data [1, 2, 3, 4, 5] # 创建 Line 图表 line Line() line.add_xaxis(x_data) line.add_yaxis("test", y_data) li…

Redis---------缓存更新,缓存穿透\雪崩\击穿

三种更新策略 内存淘汰是Redis内存的自动操作,当内存快满了就会触发内存淘汰。超时剔除则是在存储Redis时加上其有限期(expire),有限期一过就会自动删除掉。而主动更新则是自己编写代码去保持更新,所以接下来研究主动更新策略。 主动更新策略…

PS入门|网络报名证件照上传总提示审核失败是什么原因?

前言 之前小白遇到过有小伙伴报考了某个证书的考试,但在报名的过程出现了问题:证件照都是按照要求制作的,但为啥总是没有审核通过? 这个很简单:分辨率出现了问题。 啥?明明都是按照软件提示的分辨率要求制…

Python中的观察者模式及其应用

观察者模式是设计模式之一,实现一对多依赖,当主题状态变化时通知所有观察者更新。在Python中,通过自定义接口或内置模块实现观察者模式,可提高程序灵活性和扩展性,尤其适用于状态变化时触发操作的场景,如事…

Linux(ubuntu)—— 用户管理user 用户组group

一、用户 1.1、查看所有用户 cat /etc/passwd 1.2、新增用户 useradd 命令,我这里用的是2.4的命令。 然后,需要设置密码 passwd student 只有root用户才能用passwd命令设置其他用户的密码,普通用户只能够设置自己的密码 二、组 2.1查看…

【右一的开发日记】全导航,持续更新...

文章目录 📚前端【跟课笔记】🐇核心技术🐇高级技术 📚捣鼓捣鼓🐇小小案例🐇喵喵大王立大功🐇TED自用学习辅助网站🐇世界top2000计算机科学家可视化大屏🐇基于CBDB的唐代历…

中间件之异步通讯组件RabbitMQ入门

一、概述 微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调用者发起请求后需要等待服务提供者执行业务返回结果后,才能继续执行后面的业务。也就是说调用者在调用…

HTTP/1.1、HTTP/2、HTTP/3 的演变

HTTP/1.1、HTTP/2、HTTP/3 的演变 HTTP/1.1 相比 HTTP/1.0 提高了什么性能?HTTP/2 做了什么优化?HTTP/3 做了哪些优化? HTTP/1.1 相比 HTTP/1.0 提高了什么性能? HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接的…

分拣机器人也这么卷了吗?!

导语 大家好,我是智能仓储物流技术研习社的社长,老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 智能制造-话题精读 1、西门子、ABB、汇川:2024中国工业数字化自动化50强 2、完整拆解:智能…

4月20日,杭州Sui Meetup活动回顾

4 月 20 日在风景如画的杭州,「TinTin DESTINATION MOON」成功举办。此次活动深入探讨了 Sui 生态系统的演进及未来机遇,包括 Sui 上的资产管理协议 Mole、全链引擎 Obelisk Engine 以及 Generator 的开发范式等热点话题,行业专家提供了深刻见…

基于Spring Boot的校园闲置物品交易网站设计与实现

基于Spring Boot的校园闲置物品交易网站设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 系统功能界面图,在系统首页可以查看…

修改 Windows 服务器远程端口,以阿里云服务器 ECS 为例

一、WinR - mstsc.exe 登录远程服务器 二、WinR - regedit.exe 打开注册表 三、打开注册表 tcp 路径: 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp 双击右侧 PortNumber 子健,勾选十进制&a…

基于SpringBoot的私人健身与教练预约管理系统设计与实现

一、引言 私人健身与教练预约管理系统,可以摆脱传统手写记录的管理模式。利用计算机系统,进行用户信息、管理员信息的管理,其中包含首页,个人中心,用户管理,教练管理,健身项目管理,项…

GitLab服务器的搭建

GitLab服务器的搭建 为公司搭建一台代码托管服务器 服务器规格:2vCPUs4GiB20G 操作系统:RockyLinux8.8 下载软件 gitlab官网:http://about.gitlab.com 在官网下载比较麻烦,推荐从《清华大学开源软件镜像站》下载 清华大学开…

微服务保护和分布式事务(Sentinel、Seata)笔记

一、雪崩问题的解决的服务保护技术了解 二、Sentinel 2.1Sentinel入门 1.Sentinel的安装 (1)下载Sentinel的tar安装包先 (2)将jar包放在任意非中文、不包含特殊字符的目录下,重命名为 sentinel-dashboard.jar &…

File contains parsing errors: file:///etc/yum.repos.d/nginx.repo报错解决,文件配置出现问题

执行yum指令出现以下错误: 解决方案:yum的配置文件出现问题, 先删除yum.repos.d目录下所有文件 rm -f /etc/yum.repos.d/* 然后重新下载阿里的资源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.…

C#窗体控件DataGridView

目录 简介 基本框架 案例 案例1,往DataGridView中添加新列。 案例2,使用列名删除DataGridView中的某一列。 案例3,人手选中某一列,然后进行删除。 案例4,添加新的一行。 案例5,删除选中行。 案例6&#xff0c…

springboot 自动配置源码解读

SpringBootApplication 作用 SpringBootConfiguration:主启动类可以当做配置类使用,比如注入Bean等。ComponentScan:包扫描注解。EnableAutoConfiguration(重要):开启自动配置。 EnableAutoConfiguration AutoConfigurationPackag…