C语言学习第001课——认识C语言

语言发展史

  1. 机器语言 机器直接执行的指令,全部为01数字
  2. 汇编语言 固定的语法和语句,晦涩难懂
  3. C语言(高级语言),语法简洁,易读懂

Hello World

#include
int main(){
     
    printf("hello world\n");
}

以上,就是一个最简单的C语言HelloWorld程序。从第一行说起

导入头文件

#include  

此行代码表示导入一个文件stdio.h,,std是一个标准库,io表示输入输出,h表示头文件

#include

导入一个lib头文件,导入之后,可以直接调用系统函数,如system(),
system函数可以打开一个外部的应用程序,如果带路径,需要使用\\或者/
返回值:成功为0 失败为任意数字

int value = system("D:/Desktop/FeiQ.exe");
system("pause");//表示程序运行到这里会暂停

<>尖括号表示导入的是系统头文件,“”双引号表示导入的是自定义的头文件

关于编译

写完代码需要编译才能成为可执行程序,才能被执行,下面介绍两种编译方式:
一步编译和分步编译
一步编译:

gcc -o 文件路径+文件名称.exe 文件路径+文件名称.c
gcc -o 可执行文件名称.exe 源代码文件名称.c(如果有多个源代码文件,空格后面继续加源代码文件)

(没有gcc的需要先安装gcc)
分步编译:

1、预处理 宏定义展开 头文件展开 条件编译 去掉注释 这里不会检查语法   gcc -E hello.c -o hello.i  生成一个hello.i文件
2、编译   检查语法  将C语言转成汇编语言						   gcc -S hello.i -o hello.s  生成一个hello.s文件
3、汇编   将汇编语言转成机器语言(二进制码)                      gcc -c hello.s -o hello.o  生成一个hello.o文件
4、链接   将C语言依赖库连接到程序中                             gcc    hello.o -o hello.exe

程序执行过程

       程序不启动的时候,存放在硬盘中,启动的时候,将exe文件加载到内存中,内存分为4个部分,代码区,数据区,栈区,堆区
       在对程序进行操作的时候,内存区会将数据交给CPU进行运算,CPU分为三个部分,运算器,控制器,寄存器,最后程序如果退出了,程序会继续存放在硬盘中。
       内存和CPU之间的数据交互是通过总线完成的。

CPU与寄存器

寄存器是CPU内部最基本的存储单元
CPU对外是通过总线(地址,控制,数据)来和外部设备交互的,总线的宽度是8位,同时CPU的寄存器也是8位,那么这是一个8位CPU
如果总线是32位的,寄存器也是32位的,那么这个CPU就叫做32位CPU
有一种CPU内部寄存器是32位,但是总线是16位,称为准32位CPU
所有的64位CPU兼容32位指令,32位兼容16位的指令,
在64位的CPU架构上运行了64位的软件操作系统,那么这个系统是64位
在64位的CPU架构上运行了32位的软件操作系统,那么这个系统是32位
64位的软件不能运行在32位的CPU上

寄存器名称

8163264位
 A               AX            EAX             RAX                
 B               BX            EBX             RBX
 C               CX            ECX             RCX
 D               DX            EDX             RDX

寄存器 缓存和内存之间的关系

按CPU远近来分,离得最近的是寄存器,然后是CPU缓存 最后是内存
CPU计算时,要预先把要用的数据从硬盘读取到内存,然后再把即将要用的数据读到寄存器,CPU<–>寄存器<–>内存
那为什么会有缓存呢?因为如果经常性的操作内存中同一地址的数据,就会影响速度,于是就在寄存器与内存之间,设置一个缓存
因为缓存提取的速度远高于内存,当然缓存的价格就远高于内存
由此可以看出,从远近来看 CPU<–>寄存器<–>缓存<–>内存
注意:电脑一关机,寄存器和内存的东西全部清零,只剩下硬盘的东西可以保存

汇编语言

C语言加法代码:		int a = 10;
					int b = 20;
					int c = a+b;
汇编语言加法:		__asm
					{
     
						mov a, 10    //将10的值放在a对应内存的位置
						mov b, 20    //将20的值放在b对应内存的位置
						mov eax, a   //将a内存的值,放进eax寄存器
						add eax, b   //eax和b相加,结果放在eax
						mov c, eax   //eax的值放在c中
					}

在汇编语言中:

mov  移动
add  添加
push 压栈
pop  出栈
call 调用

你可能感兴趣的:(C语言基础,c语言)