C语言初始化
注意:为什么要进行C语言环境的初始化?
在没有进行C语言环境的初始化之前的初始化工作都是用汇编进行初始化的。
比如核心初始化,和内存初始化
栈:
栈帧:一个进程中一般会有多个函数,每一个函数都需要在内存中开辟一个栈空间来使用,每一个函数所占用栈叫做栈帧。
pc
lr
sp
fp
这四个数据。
栈帧之空间的界定:fp(栈帧指针)指针用于界定最上面的栈界限,用于访问栈中的数据(r11)
sp(栈指针)指针用于界定最下面的栈界限,一般一直指向栈顶(r13)
注意:当一个函数调用另外一个函数时,调用函数栈帧指针相关信息中的fp(栈帧指针)和sp(堆栈指针)保存于被调用函数的栈的顶部
栈的作用:
1:保存局部变量
2:传递参数
3:保存寄存器的值
注意:在arm中,对于函数参数的传递,如果传递参数的个数小于等于4个,就只需要用
r0,r1,r2,r3来传递参数,如果多于4个参数就会用到栈来传递参数
满栈和空栈:
根据SP指向的位置,栈可以分为满栈和空栈
1:满栈(值向的位置有数据)
当堆栈指针sp总是指向最后压入堆栈的数据
2:空栈(指向的位置没有数据)
当堆栈指针sp总是指向下一个将要放入数据的空位置
arm使用是满栈
1:升栈
随着数的入栈,sp指针从低地址变到高地址
2:降栈
随着数据的入栈,sp指针从高地址变道低地址
arm采用降栈
栈对C语言的作用:
(1)保存局部变量
bss段初始化:
一般情况下:
局部变量是存放在:栈
malloc函数中的数据对存放在:堆
位初始化的局部变量是存放在:bss段
一般要求对于BSS中的数据是默认为0 ,对于bss段中的数据的初始化就是将其中的数据预置为零
如何迈进C预言的大门:
找到main()函数的入口地址吗,将这个地址直接赋值给PC
C预言和汇编混合编程:
一:为什么需要C预言和汇编语言的混合编程
1:执行效率
2:能够更直接的控制未处理器,具体意思就是能够直接用汇编指令访问计算集中的某些特殊和重要的寄存器。
二:汇编语言调用C语言函数
调用方式:直接用汇编指令中的跳转指令,跳到C语言main()函数的入口
三:C语言调用汇编语言
对于C语言,汇编语言中的用来定位函数头符标号,相当于C语言中的一个函数。
主意调用的时候需要将汇编语言中调用的代码用.global 伪指令定义该模块为全局型
四:C语言中嵌套编写汇编语言
格式:
_asm_(
汇编语言部分
:输出部分
:输入部分
:破坏描述部分
);
输出部分:执行汇编语句后可能会把C语言中的的一些变量修改了,修改的就放在输出部分
输入部分:执行的汇编语言需要到C语言 中的拿到一些数据做参数,这部分数据就是输入部分
破会描述部分:使用汇编语句时,凡是寄存器中值被修改了,被修改寄存器中都放在破坏描述部分
注意:带分号的几部分,分号后面刻意省略,但是分号不能省略
例子1:
void write_p15_c1(unsigned long value)
{
_asm_(
“mcr p15,0,%0,c1,c0,0\n”
:
:”r”(value)
)
}
分析:
:“r”(value) 输入部分,表示寄存器,具体哪个通用寄存器,系统自己决定,(value)则表示将要读取的值
例子2:
int gboot_main()
#define GPBCOM #0x56000010 @定义宏,将管脚控制寄存器的地址定义成宏(地址查看芯片手册可得)
#define GPBDAT #0X56000014 @定义宏,将管脚数据寄存器的的地址定义成宏(地址查看芯片手册可得){_asm_("ldr r1,=0x15400\n" @将控制字写入到寄存器r1中(根据芯片手手册 卡看控制字,每两位控制一个引脚功能)"str r1,[%0]\n" @控制字写入到控制寄存器中,注意[]中的"%0"表示一 个参数,这个参数来自于输入或输出部分,由输入 和输出部分定义 "ldr r1,=0x6bf\n" @将要写入到 的数据写入到r1中,(每一位控制一个 管脚,具体些什么查看芯片手册) "str r1,[%1]\n" @将数据写回到管脚寄存器中 : @输出部分 :"r"(GPBCOM),"r"(GPBDAT) @输入部分,一般读为输入,写为输出 :"r1" @破坏部分,表示程序在执行过程中影响或修 改到的明确的寄存器)return 0;}注意几点:1:所有的汇编语句都要用双引号扩起来2:注意输入和输出部分是怎么一回事,读取数据一般就是输入,写入数据一般就是输出
C语言初始化的更多相关文章
- go语言初始化结构体指针
go语言初始化结构体指针 head:=&ListNode{} 或者 head:=new(ListNode)
- C语言初始化——bss段初始化、跃入C、C与汇编
1.bss段初始化 变量 存放位置 初始化的全局变量 数据段 局部变量 栈 malloc函数分配的 堆 未初始的全局变量 bss段 说明:全局变量在未赋初值时,会被保留到bss段. 测试: #incl ...
- C语言初始化——栈的初始化
栈是一种具有后进先出性质的数据组织方式,也就是说后存放的先取出,先存放的后取出.栈底是第一个进栈的数据所处的位置,栈顶是最后一个进栈的数据所处的位置. 1.满栈与空栈 根据SP指针指向的位置,栈可以分 ...
- go语言初始化内部结构体3中方式
package main import ( "fmt" ) type User struct { Id int Name string Age int } type Manger ...
- C语言字符串处理
一. C语言中,为什么字符串可以赋值给字符指针变量 char *p,a='5';p=&a; //显然是正确的,p="abcd"; ...
- Chrome插件i18n多语言实现
i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.Chrome插件框架中i18n的封装API: chrome.i18n.ge ...
- 在WinForm应用程序中快速实现多语言的处理
在国际化环境下,越来越多的程序需要做多语言版本,以适应各种业务需求的变化.在Winform应用程序中实现多语言也有常规的处理方式处理,不过需要针对每个语言版本,重新修改Winform界面的显示,对一些 ...
- C语言第三周
一. 字符串常量 只要有一对双引号括起来的字符序列就是字符串常量.列如"hello"接"123" 注意:"a"是字符串常量'a'是字符常量. ...
- C++(二十四) — 指向字符的指针为什么可以用字符串来初始化,而不是字符地址?
一.C语言中,为什么字符串可以赋值给字符指针变量? char *p: a='; p=&a; //显然是正确的, p="abcd"; //但为什么也可以这样赋值?? 问:一直 ...
随机推荐
- 天梯赛 L2-002. (模拟) 链表去重
题目链接 题目描述 给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点.即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留.同时,所有被删除的结点必须被保存 ...
- CSV转excel方法
步骤一:新建excel文件,数据—>自文本,导入文件 步骤二:选择分隔符,下一步 步骤三:勾选分隔符符合,下一步 步骤四:直接下一步,可在预览里看到格式 步骤五:点击确定,等待数据导入
- 【文件上传】文件上传的form表单提交方式和ajax异步上传方式对比
一.html 表单代码 …… <input type="file" class="file_one" name="offenderExcelFi ...
- 【JSON】Ajax获得JSON字符串的处理方法
一. success : function(data){ var caseInfoView = eval('('+data.caseInfoView+')'); for(var key in case ...
- 更改arch的默认终端
实在是厌倦了gnome的资源管理器nautilus和终端gnome-terminal,于是卸载之,然后更换了xfce4的终端,但是出现了一个问题,那就是在资源管理器中使用邮件打开终端的时候打不开了,解 ...
- 【Python项目】爬取新浪微博个人用户信息页
微博用户信息爬虫 项目链接:https://github.com/RealIvyWong/WeiboCrawler/tree/master/WeiboUserInfoCrawler 1 实现功能 这个 ...
- MySQL异步复制、半同步复制详解
MySQL数据复制的原理图大致如下: 从上图我们可以看出MySQL数据库的复制需要启动三个线程来实现: 其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O ...
- RedisTemplate使用
RedisTemplate中定义了对5种数据结构操作 redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash r ...
- 利用CSS函数calc(...)实现Web页面左右布局
前言 因为自己的网站需要,想要做一个左右布局的页面: 左边是导航菜单之类的东西.右边是文档内容(因为最近看的一些软件的文档页面都是这么布局的): 左边固定宽度——300像素.右边使用剩余的宽度: 左边 ...
- redis入门——redis常用命令
http://blog.csdn.net/wclxyn/article/details/8449082 https://jingyan.baidu.com/article/90bc8fc87ce8e2 ...