04 2013 档案

C语言拾遗(六):分析C语言的函数调用过程
摘要:一个过程调用包括将数据和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间。 实现过程调用,编译器使用了一个基于栈的方法。栈,先进后出。机器用栈来传递过程的参数,存储返回信息,保存寄存器等等。 1. call function:将返回地址入栈,并跳转到function的起始处。 2. leave:使栈做好返回的准备。 3. ret:返回,从栈中弹出地址,并跳转到这个位置。 阅读全文

posted @ 2013-04-30 17:29 Randy Xu 阅读(1667) 评论(1) 推荐(3)

C语言拾遗(五):分析switch语句机制---下篇
摘要:通过两个例子,对比阅读C代码和汇编代码,探究一下switch语句的本质。 switch语句的本质是条件语句,条件语句的本质是跳转。 当case分支多了的时候(一般大于四个时),编译器巧妙地通过跳转表的思想来访问代码位置。 关键词:跳转,跳转表。 阅读全文

posted @ 2013-04-19 22:25 Randy Xu 阅读(1504) 评论(6) 推荐(0)

C语言拾遗(四):分析switch语句机制---上篇
摘要:要理解C语言的运行机制,阅读对应的汇编代码是非常有帮助的。 switch不会在每个case标签后面的语句执行完毕后自动终止。一旦执行某个case语句,程序将会一次执行后面所有的case,除非遇到break语句。 这被称之为“fall through”。 switch内部的任何语句都可以加上标签,所有的case都是可选的,任何形式的语句,包括带标签的语句都是允许的。 break语句事实上跳出的是最近的那层循环语句或switch语句。 阅读全文

posted @ 2013-04-07 22:33 Randy Xu 阅读(1908) 评论(3) 推荐(3)

导航