C语言编译过程

C语言编译过程

C代码编译成可执行程序经过4步:
1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法,会把头文件中所以的代码粘贴复制到程序中
2)编译:检查语法,将预处理后文件编译生成汇编文件

	常见代码问题:
	1、编辑时异常
	2、编译时异常
	3、运行时异常

3)汇编:将汇编文件生成目标文件(二进制文件机器语言)
4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

64位和32位系统区别

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

 64位的软件不能运行在32位的CPU之上

寄存器名字

8位 16位 32位 64位
A AX EAX RAX
B BX EBX RBX
C CX ECX RCX
D DX EDX RDX
按与CPU远近来分,离得最近的是寄存器,然后缓存(CPU缓存),最后内存。

CPU计算时,先预先把要用的数据从硬盘读到内存,然后再把即将要用的数据读到寄存器。于是 CPU<—>寄存器<—>内存,这就是它们之间的信息交换。

那为什么有缓存呢?因为如果经常操作内存中的同一址地的数据,就会影响速度。于是就在寄存器与内存之间设置一个缓存。

因为从缓存提取的速度远高于内存。当然缓存的价格肯定远远高于内存,不然的话,机器里就没有内存的存在。

由此可以看出,从远近来看:CPU〈—〉寄存器〈—> 缓存 <—> 内存。

VS中C语言嵌套汇编代码

#include <stdio.h>

int main()
{
	//定义整型变量a, b, c
	int a;
	int b;
	int c;

	__asm
	{
		mov a, 3	//3的值放在a对应内存的位置
		mov b, 4	//4的值放在b对应内存的位置
		mov eax, a	//把a内存的值放在eax寄存器
		add eax, b	//eax和b相加,结果放在eax
		mov c, eax	//eax的值放在c中
	}
	
	printf("%d\n",  c);//把c的值输出

	return 0;//成功完成
}

在这里插入图片描述

VS快捷键

断点和单步调试:
断点: 在选中行单击或按F9
调试程序:在“调试”中选择“开始调试”或按F5
逐语句执行:F11
逐过程执行:F10
跳出过程:Shift+f11
停止调试:Shift+F5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值