《计算机原理》——HelloWorld.cpp如何运行的
学校《计算机原理》开课啦!特此开辟专栏,将一些知识作为笔记,记录下来。
前言
本篇博客知识点来源于educoder的相关题目
1. 相关知识
1.1 计算机语言
计算机语言是人与计算机之间通讯的语言,计算机语言包括编写计算机程序的字符和语法规则,这些字符和语法规则组成计算机执行的各种指令(或各种语句)。
Python、C/C++ 等编程语言,这些语言和人类语言具有一定的相似性,这些编程语言不要求编程者具备很多计算机专业知识,只需要利用简单的赋值、条件控制、循环等语句就可以完成复杂算法、程序的设计实现,因而这些语言也被称为高级语言。
由于电子元件的二值特性,在计算机内部,计算机使用的是由 0 和 1 组成的二进制数,二进制是计算机的语言的基础,计算机执行的是一串串 0 和 1 组成的指令序列,这种计算机能够认识的语言,就是机器语言。
1.2 程序的处理流程
程序如何从我们看到的高级语言转为计算机可处理的机器语言?

上图展示了从高级语言源程序到计算机中的二进制机器码的处理过程,该过程包括下列步骤:
- 预处理: 编译器处理预处理命令,包括头文件包含、宏定义的扩展、条件编译的选择等;
- 编译:将预处理后的源代码文件 翻译转换 得到机器语言的目标程序,得到机器语言汇编文件;
- 汇编:将汇编代码翻译成机器码,此时的机器码尚不能直接运行;
- 链接:处理可重定位文件,把各种符号引用和符号定义转换成为可执行文件中的合适信息,通常是虚拟地址。
完成上述步骤后,计算机将高级语言编写的文本形式的程序转换成计算机可执行的二进制形式的机器码。
1.3 GCC
GCC(GNU Compiler Collection,GNU 编译器套件)是由 GNU 开发的编程语言编译器。GNU 编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada 和 Go 语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)
GCC 的基础用法为:
gcc [options] [filenames]
使用 GCC 编译器需要提供一系列必要的调用参数(上述基础用法中的 options 表示 GCC 所需要的参数)和文件名称(上述基础用法中的 filenames 表示 GCC 处理的文件),GCC 编译器有超过 100 个调用参数,本关卡仅介绍和关卡相关的调用参数,其余详细参数可查看 GCC 手册 (在 Linux 系统中可以通过 man gcc 查看 GCC 的使用手册)。
-o output
-o (小写 o)参数由两部分组成,其中的 "-o" 表示该参数设置输出文件,紧跟在 "-o" 之后的参数给出输出文件的路径。
-E
-E 参数不带有其他设置选项,该参数表示对输入文件进行预处理,对源代码文件中的文件包含 (include)、 预编译语句 (如宏定义define等)进行展开,把头文件的代码、宏之类的内容转换成更纯粹的 C 代码。
-S
-S 参数不带有其他设置选项,该参数表示对输入文件进行编译,生成对应的汇编语言代码(助忆符形式的代码),把代码从 C 语言转换成汇编语言。在这个过程,GCC 会检查各个源文件的语法。
-c
-c 参数不带有其他设置选项,该参数表示对输入文件进行汇编,生成对应的目标文件,把汇编语言的代码转换成机器码。
通常情况下,GCC 工具整合了预处理、编译、汇编、链接等步骤,例如,不带额外参数,直接运行 GCC 对输入 C 语言源文件处理后即可得到该文件对应的可执行机器代码(即二进制程序),如下图所示:

为了便于同学们认识详细的处理过程,本关卡通过设置编译选项,逐步显示 GCC 的处理过程:
-
步骤一:预处理
通过命令
gcc -E hello.c -o hello.i对 hello.c 文件预处理,输出文件设置为 hello.i -
步骤二:编译
通过命令
gcc -S hello.i -o hello.s编译 hello.i 文件,输出文件设置为 hello.s ,如下图所示:
-
步骤三:汇编
通过命令
gcc -c hello.s -o hello.o汇编 hello.s 文件,输出文件设置为 hello.o -
步骤四:链接
上一步汇编得到的 hello.o 目标文件仍然无法直接执行,需要完成链接操作,处理可重定位文件,把各种符号引用和符号定义转换成为可执行文件中正确的信息,才能生成最终的可执行文件。
通过命令
gcc hello.o -o hello链接 hello.o 文件,输出文件设置为 hello ,如下图所示:
相关文章:
《计算机原理》——HelloWorld.cpp如何运行的
学校《计算机原理》开课啦!特此开辟专栏,将一些知识作为笔记,记录下来。 前言 本篇博客知识点来源于educoder的相关题目 1. 相关知识 1.1 计算机语言 计算机语言是人与计算机之间通讯的语言,计算机语言包括编写计算机程序的字符…...
【面试题】在JS循环中使用await会怎么样?
前言这个问题是这样产生的?某天,在学习异步的知识遇到这样一道题:使用Promise的方式,每隔一秒输出数组中一个值const arr [1, 2, 3] arr.reduce((pre, cur) > {return pre.then(() > {returnnewPromise((resolve, rejec…...
Qt QMessageBox详解
文章目录一.QMessageBox介绍枚举属性函数二.QMessageBox的用法1.导入QMessage库2.弹窗提示3.提供选项的弹窗提示4.作为提示,报警,报错提示窗口一.QMessageBox介绍 文本消息显示框(message box)向用户发出情况警报信息并进一步解释警报或向用户提问&…...
Flutter之beamer路由入门指南
beamer路由入门指南 前言使用方法1、路由配置方式1路由配置方式2路由跳转测试现象前言 Beamer是一个很好用的路由组件,本文以beamer1.5.0版本进行说明,前面博主也介绍了其他路由组件 Flutter实战之go_router路由组件入门指南 、 Flutter之Fluro路由组件入门指南 Flutter之Ge…...
「基础篇」机器学习概览
文章目录1. 什么是机器学习2. 引入机器学习3. 应用场景4. 机器学习分类4.1. 有无人类监督4.2. 是否增量学习4.3. 泛化方式5. 主要挑战6. 测试与验证1. 什么是机器学习 机器学习(Machine Learning,ML)是一个研究领域,让计算机无需…...
揭秘可视化图探索工具 NebulaGraph Explore 是如何实现图计算的
前言 在可视化图探索工具 NebulaGraph Explorer 3.1.0 版本中加入了图计算工作流功能,针对 NebulaGraph 提供了图计算的能力,同时可以利用工作流的 nGQL 运行能力支持简单的数据读取,过滤及写入等数据处理功能。 本文将简单分享下 NebulaGr…...
移动架构43_什么是Jetpack
Android移动架构汇总 文章目录一 Android 开发框架演变1 MVC2 MVP3 MVVM二 什么是JetPack三 如何构建支持Jetpack项目一 Android 开发框架演变 1 MVC Model-View-Controller,模型-视图-控制器,Model负责数据管理,View负责UI显…...
TiDB的分布式事务原理探究
事务开启 获取全局授时作为startTS构建一个tikvTxn对象(包括snapshot)。 事务写 txn.Set方法本质上将kv值写入了一个内存缓存(即kv/memdb_buffer.go中的memDbBuffer)中。该内存kv数据库利用的是golevel提供的功能。 事务回滚 直接将tikvTxn的valid字段…...
【C语言】函数指针和指针函数
文章目录[TOC](文章目录)前言概述函数指针定义:使用:回调函数指针函数前言 今天学一下函数指针 提示:以下是本篇文章正文内容,下面案例可供参考 概述 函数指针:是一个指向函数的指针,在内存空间中存放的…...
Nodejs中npx简介和作用
一、npx简介npm从5.25.2版开始,增加了 npx 命令。方便了我在项目中使用全局包。二、安装Node安装后自带npm模块,可以直接使用npx命令。如果不能使用用,就要手动安装一下。npm install -g npx三、使用npx想要解决的主要问题,就是调…...
Matplotlib精品学习笔记001——绘制3D图形详解+实例讲解
3D图片更生动,或许在时间序列数据的展示上更胜一筹 想法: 学习3D绘图的想法来自科研绘图中。我从事的专业是古植物学,也就是和植物化石打交道。化石有三大信息:1.物种信息,也就是它的分类学价值;2.时间信息…...
学习ifconfig实战技巧,成为网络管理高手
文章目录前言一. ifconfig 命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示网络设备信息3.2 启动和关闭指定的网卡3.3 对指定的网卡设备执行修改IP地址操作3.4 启动和关闭ARP协议3.5 使用ifconfig添加网卡总结前言 大家好,又见面了,我是沐风晓月&a…...
day38|70. 爬楼梯(进阶)、322. 零钱兑换、279.完全平方数
70. 爬楼梯(进阶) 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2…...
SpringBoot全局异常处理
一、目的 当客户端/前端向服务端发送一个请求后,这个请求并不是每次都能完全正确的处理,比如出现一些资源不存在、参数错误或者内部错误等信息的时候,就需要将异常反馈给客户端或者前端。那么这就需要程序有完整的异常处理机制。 在 Java 中所…...
SpringBoot异常处理
目录 一、 错误处理 1. 默认规则 2. 定制错误处理逻辑 二、自定义异常处理 1. 实现 ErrorController 2. RestControllerAdvice/ControllerAdvice ExceptionHandler 实现自定义异常 3. 新建 UserController.class 测试 3 种不同异常的处理 4. 最终效果如下 补充 1. 参…...
《C++ Primer Plus》(第6版)第8章编程练习
《C Primer Plus》(第6版)第8章编程练习《C Primer Plus》(第6版)第8章编程练习1. 打印字符串2. CandyBar3. 将string对象的内容转换为大写4. 设置并打印字符串5. max5()6. maxn()7. SumArray()《C Primer Plus》(第6版…...
RAD Studio 11.3 Alexandria Crack
RAD Studio 11.3 Alexandria Crack 瞄准最新平台版本-此版本增加了对Android 13和Apple macOS Ventura的官方支持。它还支持Ubuntu 22 LTS和Microsoft Windows Server 2022。 使用生物特征认证-New为FireMonkey移动应用程序提供了新的移动生物特征认证组件。 部署嵌入式InterBa…...
Stm32 iic 协议使用
/* 第1个参数为I2C操作句柄 第2个参数为从机设备地址 第3个参数为从机寄存器地址 第4个参数为从机寄存器地址长度 第5个参数为发送的数据的起始地址 第6个参数为传输数据的大小 第7个参数为操作超时时间 */ HAL_I2C_Mem_Write(&hi2c2,salve_add,0,0,PA_BUFF,sizeof(PA_BUFF…...
Malware Dev 02 - Windows SDDL 后门利用之 SCManager
写在最前 如果你是信息安全爱好者,如果你想考一些证书来提升自己的能力,那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里: https://discord.gg/9XvvuFq9Wb我拥有 OSCP,OSEP,OSWE,OSED&…...
每日一题29——山峰数组的顶部
符合下列属性的数组 arr 称为 山峰数组(山脉数组) : arr.length > 3 存在 i(0 < i < arr.length - 1)使得: arr[0] < arr[1] < ... arr[i-1] < arr[i] arr[i] > arr[i1] > ... &g…...
信息化整体架构设计与技术选型
规划篇——蓝图设计与路径规划3.4 整体架构设计与技术选型3.4.1 整体架构设计的理论价值整体架构设计是信息化建设的“施工蓝图”,其理论任务是将业务需求和功能需求转化为可落地实施的技术方案,明确系统的组成部分、相互关系、技术标准和演进路径。如果…...
OFA图像描述模型Claude Code协作示例:生成描述后的代码优化建议
OFA图像描述模型与Claude Code协作示例:生成描述后的代码优化建议 1. 引言:当图像理解遇上代码生成 你有没有遇到过这种情况?写了一段数据可视化代码,运行后生成的图表总觉得哪里不对劲——配色有点奇怪,布局不够清晰…...
[跨平台投屏解决方案]:实现Windows与苹果生态无缝协作的airplay2-win实践指南
[跨平台投屏解决方案]:实现Windows与苹果生态无缝协作的airplay2-win实践指南 【免费下载链接】airplay2-win Airplay2 for windows 项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-win 在多设备互联的时代,Windows用户常面临与苹果设备生…...
3个实用方案:Xbox手柄macOS兼容配置与优化指南
3个实用方案:Xbox手柄macOS兼容配置与优化指南 【免费下载链接】360Controller 项目地址: https://gitcode.com/gh_mirrors/36/360Controller 作为一名技术顾问,我深知在macOS系统上使用Xbox手柄时可能遇到的各类兼容性问题。从设备无法识别到功…...
零基础上手PasteMD:本地AI助手,会议纪要秒变结构化文档
零基础上手PasteMD:本地AI助手,会议纪要秒变结构化文档 1. 为什么需要PasteMD这样的工具 在日常工作中,我们经常遇到这样的场景:会议结束后面对杂乱无章的笔记,需要花费大量时间整理成正式文档;从不同来源…...
ESP32嵌入式GUI终端:天气时钟+MP3播放器全栈实现
1. 项目概述 ESP32天气时钟与SD卡MP3播放器是一个面向嵌入式人机交互场景的综合性硬件项目,融合了网络通信、实时信息获取、图形用户界面渲染、音频解码与播放控制等关键技术模块。该项目并非简单的功能堆砌,而是围绕“桌面智能终端”这一明确应用场景展…...
USB免驱6D姿态传感器:台式机原生运动感知方案
1. 项目概述台式计算机长期缺乏原生姿态感知能力,这一硬件层面的缺失限制了人机交互的自然性与系统级响应的主动性。传统解决方案依赖外置摄像头或独立IMU模块,存在部署复杂、功耗高、隐私风险及驱动兼容性等问题。本项目提出一种嵌入式USB重力6D传感器方…...
Gemma-3-12b-it本地化部署教程:纯离线、无网络依赖的高性能方案
Gemma-3-12b-it本地化部署教程:纯离线、无网络依赖的高性能方案 想在自己的电脑上跑一个能看懂图片、还能跟你流畅对话的大模型吗?今天要聊的Gemma-3-12b-it,就是一个能让你实现这个想法的工具。它最大的特点就是纯本地运行,不需…...
基于ssm+vue高校比赛活动信息管理系统
文章目录详细视频演示技术介绍功能介绍核心代码系统效果图源码获取详细视频演示 文章底部名片,获取项目的完整演示视频,免费解答技术疑问 技术介绍 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomca…...
5个简单技巧让你的Emoji速查表在移动端完美显示
5个简单技巧让你的Emoji速查表在移动端完美显示 【免费下载链接】emoji-cheat-sheet.com 项目地址: https://gitcode.com/gh_mirrors/emo/emoji-cheat-sheet.com Emoji速查表(emoji-cheat-sheet.com)是一个实用的开源项目,帮助用户快…...
