博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从汇编来看c语言
阅读量:5883 次
发布时间:2019-06-19

本文共 1361 字,大约阅读时间需要 4 分钟。

一、 学习过程

C语言的角度提出一些问题,这些问题再从汇编的角度考虑,还真的很有意思。

(1) 我们用高级语言编程时,一般不可能不用到变量,但是一定要用到变量吗?还有这些变量从汇编的角度是怎么实现的呢?毕竟寄存器和内存空间是不可能存储一个变化的值的,要改变寄存器和内存空间的值,只有重新赋值。但是原来老师讲过,变量的声明是给变量名开辟一个固定大小的内存空间,所以声明变量时一定要给定变量类型。如果不用变量的话,可以给每次要用到的参数重新赋值,但这样就不能用循环等结构,会造成代码重复冗长。

(2) C语言规定程序一定要从main函数开始运行,汇编规定程序要从end后面的标号(一般是start)开始运行,那么这两者有什么联系呢?是main函数在编译时会变成start代码段吗?如果汇编里end后面没有标号,程序会从顶部从上到下开始执行,那么如果C语言里面没有main函数,程序会由上到下执行吗?汇编里的start标号可以用其他标号代替,C语言里可不可以用其他函数代替main函数呢?

(3) Printf函数可以接受不定量的参数,开始我觉得这没什么,但后来想了一下。我们自己定义的函数只能接受固定数量的参数,printf函数的这个功能是怎么实现的呢?看了下函数原型,又查了下资料,printf使用了一种比较少见的语法叫“可变长参数”。但是我看了下资料介绍的实现可变长参数的宏VA_list如下:“(1)首先在函数里定义一个VA_LIST类型的变量,这个变量是指向参数的指针;(2)然后用VA_START宏初始化刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数;(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型,如果函数有多个可变参数的,依次调用VA_ARG获取各个参数;(4)最后用VA_END宏结束可变参数的获取。”但是如果要自己写一个printf()函数的话,我觉得对于我还是相当有难度的。

 

二、 解决的问题

(1) C语言程序一定要用到变量吗?答:可以不用变量,但是用变量写程序更加简洁方便。

(2) C语言程序怎么实现变量的功能的?答:声明变量开辟内存空间再接受赋值。

(3) printf函数的接收参数数量不定的功能是怎么实现的呢?答:使用可变长参数的语法。

三、 未解决的问题

(1) C语言编译时函数是怎么转化函数代码段地址的?

(2) 如果C语言里面没有main函数,程序会由上到下执行吗?

(3) C语言里可不可以用其他函数代替main函数呢?

四、 学习感想

我们往往为自己一贯的思想和别人的看法所束缚,这样其实是很可悲的,而且更可悲的是我们平时没有想法也没有动力去搞清楚这些东西。只是简单的会用就觉得这东西也就那样了。但是其实简单的东西也不简单。Printf函数有那么多人用,有多少注意到它与别的函数的不同呢?特别是在写程序时,往往就是自己觉得最不可能出错的地方错了,结果把代码翻来覆去看了多少遍也找不出bug来。我们平时在学习时,一定要注意细节,在编程时,思维一定要缜密,这样才能减少错误,增加自己的效率。

转载于:https://www.cnblogs.com/stormpeach/p/4245121.html

你可能感兴趣的文章
处理 Oracle SQL in 超过1000 的解决方案
查看>>
Alpha线性混合实现半透明效果
查看>>
chkconfig 系统服务管理
查看>>
ORACLE---Unit04: SQL(高级查询)
查看>>
贪食蛇
查看>>
201521123009 《Java程序设计》第11周学习总结
查看>>
Python3之多线程学习
查看>>
MVC和MTV结构分析
查看>>
(转)微信网页扫码登录的实现
查看>>
mariadb启动报错:[ERROR] Can't start server : Bind on unix socket: Permission denied
查看>>
nginx的信号量
查看>>
云im php,网易云IM
查看>>
河南农业大学c语言平时作业答案,河南农业大学2004-2005学年第二学期《C语言程序设计》期末考试试卷(2份,有答案)...
查看>>
c语言打开alist文件,C语言 文件的打开与关闭详解及示例代码
查看>>
c语言 中的共用体和结构体如何联合定义,结构体(Struct)、联合体(Union)和位域
查看>>
SDL如何嵌入到QT中?!
查看>>
P1026 统计单词个数
查看>>
[js高手之路] html5 canvas系列教程 - 状态详解(save与restore)
查看>>
poi excel 常用api
查看>>
AD提高动态的方法(附SNR计算)
查看>>