我们说boot loader通常采用汇编和C语言相结合来编写的,那能不能全部用C语言来进行编写呢?为什么
2014-03-01 19:43
495 查看
我们说boot loader通常采用汇编和C语言相结合来编写的,那能不能全部用C语言来进行编写呢?为什么?
对于这一问题的答案是:不能。C程序中所有的代码都是以函数的形式出现的。可能有人要说在C中也可以嵌入汇编代码,能不能用这种方式来实现整个boot loader呢?再看看题目,这里只考虑所有的代码只能是以函数的形式出现。那C程序中函数调用要一个什么样的环境呢?堆栈!我们写C程序时在函数名的后面,就是用花括号将代码括起来的,开始的花括号其实可以理解为有一段汇编代码(具体细节以后会有文章进行解释)对堆栈进行操作。那堆栈从哪来呢?显然,堆栈是一块内存区,也就是说我们用C程序写代码之前,必须保证内存已经初始化好了、可以用了。回忆一下,我们在《什么是boot
loader》一文中提到,SDRAM内存芯片的初始化是boot loader中很重要的一步。也就是说,我们必须保证初始化好了SDRAM内存芯片后,才能进行C函数调用。因此,完全用C语言来实现boot loader是不可行的。
对于这一问题的答案是:不能。C程序中所有的代码都是以函数的形式出现的。可能有人要说在C中也可以嵌入汇编代码,能不能用这种方式来实现整个boot loader呢?再看看题目,这里只考虑所有的代码只能是以函数的形式出现。那C程序中函数调用要一个什么样的环境呢?堆栈!我们写C程序时在函数名的后面,就是用花括号将代码括起来的,开始的花括号其实可以理解为有一段汇编代码(具体细节以后会有文章进行解释)对堆栈进行操作。那堆栈从哪来呢?显然,堆栈是一块内存区,也就是说我们用C程序写代码之前,必须保证内存已经初始化好了、可以用了。回忆一下,我们在《什么是boot
loader》一文中提到,SDRAM内存芯片的初始化是boot loader中很重要的一步。也就是说,我们必须保证初始化好了SDRAM内存芯片后,才能进行C函数调用。因此,完全用C语言来实现boot loader是不可行的。
相关文章推荐
- Linux用GCC和GDB对C语言进行汇编语言分析
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- 采用GTK进行简单聊天程序客户端的编写,使用C语言。
- C语言 为什么数组名(数组首地址)不能进行加减操作?
- 我们公司接到了一个比较大的IT软件项目,由于项目时间紧急,我们想采用有非常手段、非常方法,不自己进行全部的开发工作。
- 采用easyX插件进行C语言编写的贪吃蛇,自带播放音乐
- 大小端字节序存在的意义,为什么不用一个标准呢? 在网络编程和一些服务器中采用的是大端的字节序,而一般的主机采用的是小端的字节序,为什么要分成两种?不能合成一个吗?
- C语言和汇编语言的关系
- Java的外部类为什么不能使用private、protected进行修饰
- [汇编语言]-第七章 用[bx+idata]的方式进行数组的处理
- 汇编语言 实验5 编写,调试具有多个段的程序(转载)
- 为什么我们就不能多做点实际的事情
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈(转载)
- 汇编语言编写十进制数到二进制数的进制转换并显示的子程序
- C语言 a++为什么不能作为左值?
- 汇编语言与C语言的混合使用
- 汇编语言和C语言的混合使用
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 通常采用面向方面进行实现的功能
- 爆料:为什么Entity Framework不能进行跨数据库查询