c语言编译成汇编
① c语言是先翻译为汇编语言吗
通常所说的C语言编译过程是这样的:
先是预编译处理(带#符号的语句都在这个阶段完成处理,包括文件包含、宏定义展开、条件预编译、语法检错等等)->
再是编译阶段。就是将C语言按照合适的语句翻译成汇编语言。->
再就是汇编编译。 就是将上一步的汇编语言翻译成机器码,每个.c文件都得到相应的.obj(目标文件)->
接下来就是连接阶段啦。就是将整个工程的.obj文件以及库函数连接成最终的一个.bin(或者是.hex之类的)可执行文件。
放到合适的环境中,就可以执行这个文件啦。
② 如何将c语言程序转成汇编语言程序。
如果是VC则在编译器命令行参数再加 /FA 则会生成汇编代码。如果参数是 /FAs 则会同时将源码和汇编代码。
/FA 程序集代码;.asm
/FAc 机器码和程序集代码;.cod
/FAs 源代码和程序集代码;.asm
/FAcs 机器码、源代码和程序集码;.cod
/Fa的用法
/Fa 为编译中的每个源代码文件创建一个源文件.asm。
/Fa文件名 将文件名.asm 放到当前目录中。仅在编译单个源代码文件时有效。
/Fa文件名.扩展名 将文件名.扩展名放到当前目录中。仅在编译单个源代码文件时有效。
/Fa目录\ 为编译中的每个源代码文件创建一个源文件.asm,并将其放到指定目录中。请注意必须有后缀反斜杠。只允许使用当前磁盘上的路径。
/Fa目录\文件名 将文件名.asm 放到指定目录中。仅在编译单个源代码文件时有效。
/Fa目录\文件名.扩展名 将文件名.扩展名放到指定目录中。仅在编译单个源代码文件时有效。
如果你是用gcc 或 g++编译器,如dev c++则加入命令行参数 -S 即可
③ 如何将c语言变成汇编
理论上来说C语言改成汇编是完全可以的,当然实际上还是有一定难度。
1、完全手工根据C语言的流程和目的,改编成汇编语言,这样做工作量很大
2、利用仿真软件,在仿真环境下,是有相应的汇编代码的,这样做工作量相对较小,但可读性较差。
④ C语言写的程序 怎么反汇编成汇编语言
在keilc中,单片机的C语言程序可以再DEBUG模式中得到对应的汇编程序。步骤如下:
1、建立工程,导入C文件代码,编译生成hex文件。
3、点击View--Disassembly Window调出汇编窗口,如上图。
通过以上步骤就可以看到与C对应的汇编程序了。
⑤ 先生们,女神们,快来看啊…… 请问下,c语言通过编译器转换成汇编语言,那电脑是怎样听懂汇编语言呢说
1、比如弹出光驱,学过高中物理应该知道电生磁,实际上就是个发动机,将电能转换成机械能。
2、要弄懂这个问题,举个 ia32 windows平台上的例子,我也只能大体上说一下,具体的细节在这里是说不完的。。以c++源码
int main()
{
int a = 2;为例
}
经过编译器,会生成汇编代码:mov dword ptr ss:[esp-4], 2,汇编指令经过汇编器(即将汇编指令转换成机器码的程序)即C74424FC02000000这样的机器码,汇编指令生成的机器码是有一定的指令格式的,你可以参考intel开发手册,第一部分就有intel指令的格式。然后链接器根据生成的二进制文件,按照pe结构,生成一个exe文件。当你双击运行这个文件的时候,windows的pe loader 程序会将exe文件内存文件映射到虚拟内存中(即windows上的页文件,也就是c盘中的pagefile文件),CPU的内部有一个震荡器(震荡器的原理很简单,平时看到的电铃就是这个原理),震荡器不断的发送脉冲,每一次当脉冲为1时,CPU就会从内存中读取指令,脉冲为1的时候,会根据内存中的地址总线,发送要取指的内存地址,这时候有一个译码器,所谓的译码器就是一种开关电路,比如有三个开关,当2个断开1个闭合时,就表示成001,也就是取第一个单元的数据,这样CPU将指令取得后,它会对指令进行译码,译码完后设置电路开关,然后将相应的数据放入到运算器中,运算器的实现,最早就是一个加法器。然后就是指令执行,执行完了,继续取下一条指令。这就是存储程序原理。
没事欢迎来0x30网络贴吧,分享交流更多计算机编程知识。
⑥ 实践,C语言是怎么变成汇编的
c语言未必会经历汇编语言这一环节,准确的说,c语言经历编译器(必须),链接器(某种程度上非必须)的处理,成为可执行代码(一般是二进制代码)。
而汇编也许是目前多数编译器提供的中间环节(vc,vs都提供在调试运行下使用反汇编的功能),因为对于汇编语言来说,进一步编译成机器语言的难度很低,只需查找有限的汇编指令对应的编码,如MOV,ADD等,具体编码与机器有关。
而你说的c语言变成汇编这一过程,正是编译器的核心工作,也是最为困难的。需要对你的程序(本质上是一个超长的字符串)做分割,词法分析,语法分析,最后翻译成汇编。