01.工具原理及C语言语法基础
1.1 - 计算机指令概述及C语言如何学
计算机工作方式简介
可以把内存暂且人认为是存储指令的仓库,cpu从仓库中取出指令一条条执行,cpu需要通过地址找到内容,所以需要一个地址线
,通过地址线的选择选到仓库中的某一个位置,cpu向仓库发出读写的命令,内存就会通过一条数据线与cpu进行相应的读写操作。
内存成本高,速度快 外存成本低,速度慢,但是容量大
问题:CPU里的指令长什么样?
ARM处理器的指令,以-32bit的指令为例
对于32位的理解:可以理解为有32个盒子,每个盒子有两种选择,2^32个选择
汇编语言不便于阅读
1.2 - 编译器介绍及系统环境变量
翻译官有哪些?
- 微软阵营(闭源):MSVC(vs编译器内部标准)
- 开源组织阵营GNU:gcc
为了偏向于底层的开发所以选择WinGW进行学习。
minGW
安装教程参考:https://blog.csdn.net/wxh0000mm/article/details/100666329
MinGW 的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API 和 MSYS,因此可以将源代码编译生成 Windows 下的可执行程序,又能如同在 Linux 平台下时,使用一些 Windows 不具备的开发工具。一句话来概括:MinGW 就是 GCC 的 Windows 版本 。
在wingw中include的头文件在哪里?
注意:WinGW的工具链有时可能不是放在根目录的include文件中,而是放在下面的工具目录中,有的版本可能放在根目录。
注意要将bin文件路径添加到环境变量,里面包含gcc.exe
1.3 - 编译器工作流程介绍
在要编译的a.c文件目录下命令行输入gcc a.c -o b.exe -v
,其中加上-v的作用是查看编译器的工作流程。
PS:gcc a.c -o b.exe -v
之间各个命令的顺序可以调换,比如写成gcc -v -o b.exe a.c
终端反馈分析:
前面的部分代码是gcc的版本信息,可以忽略
首先gcc通过cc1.exe
程序生成了ccfJngfc.s
汇编文件(注意与第一节课的arm汇编体系不是一个体系)
下一步gcc做了个头文件的处理,详情见后面章节
之后gcc使用了as.exe
程序将ccfJngfc.s
汇编文件生成了ccYI261D.o
文件,最后转换成exe文件。
翻译官的工作流程