哈工大计算机系统 大作业 | 您所在的位置:网站首页 › linux大作业用户管理系统 › 哈工大计算机系统 大作业 |
第1章 概述
1.1 Hello简介
用计算机系统的语言,逐条总结hello所经历的过程。 你对计算机系统的设计与实现的深切感悟,你的创新理念,如新的设计与实现方法。 首先要完成hello.c的C语言源程序的编写。这就是hello的起点。 下一步使用命令gcc -E进行预处理,hello完成从hello.c到hello.i的变化。 下一步使用命令gcc -S进行编译,hello完成从hello.i到hello.s的变化。 下一步使用命令gcc -c进行汇编,hello完成从hello.s到hello.o的变化。此时的hello已经变成一个二进制文件了。 对hello进行链接,将hello的好伙伴们和hello联系起来,把它和其他可重定位二进制文件合体,变成一个可以在计算机上运行的二进制文件。 当hello执行时,可以通过IO输入等操作向进程发送信号。例如我们从键盘输入Ctrl-c,就会发送一个SIGINT信号,使当前前台进程的作业中断;同样哦们可以使用命令jobs来查看被抢占的进程,使用命令fg %来恢复对应ID的进程。 1.2 环境与工具硬件环境: CPU:Intel i9-12900H,16GB内存。 系统环境: 虚拟机:Ubuntu 16.04 LTS,VMWare Workstation 16 工具:文本编辑器gedit,反汇编工具edb 1.3,反汇编工具objdump,编译环境gcc等。 1.3 中间结果1.可执行文件 hello。 2.原始代码 hello.c。 3.预处理后的代码 hello.i。 4.可重定位目标文件 hello.o。 5.hello.o 的 objdump 结果 hello.o.txt 6.编译后的汇编语言代码 hello.s。 7.hello 的 objdump 结果 hello.txt 1.4 本章小结 第2章 预处理 2.1 预处理的概念与作用概念:当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。C语言提供多种预处理功能,主要处理#开始的预处理指令,如宏定义(#define)、文件包含(#include)、条件编译(#ifdef)等。 作用:所有的预处理器(cpp)命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。 (1)添加对应的头文件在#include处 (2)删除#define并展开对应的宏,#undef取消已经定义的宏。 (3)#ifdef, 若宏已经定义,则返回真;#ifndef, 若宏没有定义,则返回真 (4)处理所有的条件预编译指令,例如#if#endif,根据“#if”后面的条件决定需要编译的代码。 (5) #if,如果给定条件为真,则编译下面代码;#else是#if 的替代方案;#elif,如果前面的#if给定条件不为真,当前条件为真,则编译下面代码;#endif,结束一个 #if……#else 条件编译块。 (6)#error,当遇到标准错误时,输出错误信息。 (7)#pragma,使用标准化方法,发布特殊的命令到编译器中。 |
CopyRight 2018-2019 实验室设备网 版权所有 |