编程新手遇到点问题麻烦各位大牛解答

Colorblue 发布于 2013/09/23 22:36
阅读 175
收藏 1

书中有一句话是这样子的:如果在main函数中调用的其他函数,调用后流程将返回到main函数中,都在main函数中结束整个程序的运行。我的理解是这样的不知道是否正确,请各位大神看看!,这是我自画的,我是新手,还望大神帮帮忙看看对不对!

我不大理解这句话的意思麻烦各位大牛能给我详细解释一下,谢谢!


以下是我自己理解的,不知道是对是错。

本人新手,麻烦各位大牛了



加载中
0
自由之信
自由之信

呵呵,你这个图,太强大了。当年我学的时候没你这么有恒心。学过了,所以我说下-

1. 调用main函数

2. 代码执行到 sum 的时候

3. 因为 sum 也是一个函数,注意所有的函数语句到了机器内部就是顺序存放的代码

4. 所以这里,sum 函数是一个代码块,不在main里面

5. main里面,调用sum的时候,其实就是,有一个 call 这个语句把执行的语句位置一变化,转到 sum 函数代码快的 第一个指令的地方,然后sum这个代码开始执行,从高级语言看,就是sum函数执行

6. 当sum执行到最后一条语句的时候,有一个ret指令,直接返回到,call指令(在main里面),下面的那条指令区执行,所以就返回main了

7 所以程序从main开始,main结束

8 你在main里面调用再多的函数,都是call-转移-ret-返回的模式,就是跳过去,跳回来这样

9 main是os运行编译链接后的执行代码的第一个函数,所以正常的调用都会到main

我也多写点,呵呵。


Colorblue
Colorblue
谢谢各位大牛,我还得深造,谢谢!
0
中山野鬼
中山野鬼

哈。你就记得一条,你的代码是写在一个纸带上的。是通过移动这个纸带,而读头不移动来识别当前要处理的逻辑。纸带实际对等后来的磁带,磁带又演变成了磁盘和其他存储存储介质。计算机无非是寻址、执行、选择、中断这几个处理工作外加读取、写出而已。

说点人话就是,无论什么函数,需要读取到电脑的处理器里才能执行。如果到a = sum(5+5)则大体可以理解为,把sum函数本身的内容读取到处理器中执行,而此时main并不在处理器中。

当然我这里的处理器并不是什么cpu,无非不想用什么上下文,堆栈、寄存器,现场保护等名词忽悠你了。

看你的理解,估计你对计算机原理还是不太清楚。

Colorblue
Colorblue
谢谢各位大牛,我还得深造,谢谢!
0
自由之信
自由之信

其实质我觉得是,对于非并行的结构而言,所有指令都是顺序存放,顺序执行,而这个执行的控制,用的是一个指针,访问的方法,就是访问指令在内存中的地址。你改变了指针,就改变了代码的位置,所以执行的代码就不是当前顺序的了,通过CPU提供的指令,你可以改变指针,而call和ret是标准的CPU指令,先存储当前执行的吓一跳指令的地址,然后转到另一个代码快(函数),ret从存储里面取出来前面存放的地址,然后把执行指令的指针改称哪个地址,就回来了。

0
写程序的康德
写程序的康德

你这绕口令一样的问题我根本没看懂,但是从描述来看——兄弟你是科班吗?该有的计算机基础知识一定要有的啊,什么是函数,什么是cpu指令,什么是栈。。这些你要有基础的啊。废话少说上一本书,通熟易懂——《深入理解计算机系统》

Colorblue
Colorblue
谢谢各位大牛,我还得深造,谢谢!
0
泡不烂的凉粉
泡不烂的凉粉

C语言是结构化语言, 在main中调用其他函数最终会返回到主函数中. 

可以认为 main 是操作系统 对程序的一个入口函数. 

0
上海什么大学
上海什么大学
其实学了汇编就会明白啦。
0
算法与编程之美
算法与编程之美
看看汇编代码你就明白为什么了。
返回顶部
顶部