按照《21天学通C语言》(第七版),有如下二个例子。其中一个改为输出红心符号,是练习题6修改一下的: //1、files:hello.c hello.i hello.s hellono.s hello.exe #include int main(void) { printf("Hello, World!"); return 0; } //2、files:helloq.c helloq.i helloq.s helloqno.s helloq.exe #include int main(void) { printf("%c",3); return 0; } 我是用GCC 8.1.0在命令行窗口运行的。 GCC编译时候,其实有四个步骤: 1、预处理:gcc -E hello.c -o hello.i 2、编译生成汇编语言:gcc -S hello.i -o hello.s 3、汇编:gcc -c hello.s -o hello.o 4、链接生成可执行文件:gcc hello.o -o hello 这时候,我想看一下第二步生成的汇编语言代码。 因为本身就是研究操作系统的一部分,所以要研究底层的汇编语言。 结果发现是AT&T格式的汇编语言风格,而且大量使用汇编宏。 这里就是不包含*no.s形式的文件。 所以启用了GCC的编译选项-fno-asynchronous-unwind-tables,直接预处理为cfi宏的汇编指令。 这里就是包含*no.s形式的文件。 比较发现,第一个文件和第二个文件,其余基本一样,但是第12行开始的调用函数完全不一样了: hello.s:call _printf helloq.s:call _putchar 也没有出现.ascii宏,因为不是输出字符串了,而是输出红心符号。 最后的LEAVE指令,等效于“MOV ESP,EBP”和“POP EBP”两条指令。 这个指令调整了数据栈指针ESP,并将EBP的数值恢复到调用这个函数之前的初始状态。 毕竟函数要在退出之前恢复这些寄存器的值。
2021-08-22 18:01:27 42KB 汇编 C GCC OS
按照《21天学通C语言》(第七版),有如下三个例子。其中一个改为输出中文: //1、files:hello.c hello.i hello.s hellono.s hello.exe #include int main(void) { printf("Hello, World!"); return 0; } //2、files:hello1.c hello1.i hello1.s hello1no.s hello1.exe #include int main(void) { printf("This is an example of sometjing printed!"); return 0; } //3、files:hellocn.c hellocn.i hellocn.s hellocnno.s hellocn.exe #include int main(void) { printf("这样打印输出一个字符 , %c\n 一个数字 , %d\n 一个浮点数字 , %f", 'z', 123,456.789); return 0; } 如果直接编译运行,则为出现乱码。 怎么解决中文乱码? 然后观察三个文件的汇编语言版本的差异。 从中学习汇编与C语言知识。
2021-08-16 13:01:06 64KB 汇编 C GCC OS
自己听网课记录下来的笔记,适合考试和零基础
2021-07-24 20:06:12 3.94MB 编程语言
1
c/c++语言学习 总结 详细的教师笔记第一章
2021-07-07 18:03:09 523KB c c语言自学 C语言笔记 c++学习总结
C语言自学全套视频。
2021-07-01 18:47:38 64B Cc
1
近一个月来C语言自学在pta上练手敲出来的代码,里面的算法可能并不高明,有些还是借鉴了别的大佬的想法,希望初学者能从此受益。
2021-02-28 10:39:56 46KB pta C语言 自学经验分享
1
适合初学者的纯C学习,认真学习,搞懂里面的东西,你就入门啦(二级c语言什么的都是浮云)
2019-12-21 22:09:04 1.84MB C语言 代码 初学者必备
1
这是100道C语言中十分经典的例题,适合零基础同学在家自学。会做这100道题,C语言就入门了。想要自学或者想要考过计算机二级的同学,非常适合。
2019-12-21 20:55:31 373KB C语言 自学 入门
1