转:终于知道mips中gp寄存器的用法了
来源:互联网 发布:适合女生的工作知乎 编辑:程序博客网 时间:2024/05/17 03:40
http://www.imhan.com/archives/19/
费了好大的劲,终于知道gp寄存器的用法了。
首先说说gp寄存器出现的原因吧,由于RISC体系的CPU,每条指令都是32Bit,而地址总线也是32Bit,这样,就不可能通过一条指令来实现Memory的访问。
MIPS中,访问Memory的指令格式为:
lw r1, offset(r2)
其中,offset为16Bit,也就是说,最多能访问以r2为基地址,前后32K的空间。
于是这个时候,gp就闪亮登场了。
我们知道,GCC在编译过程,会将变量分别放在data,bss,common等段。而编译mips程序时,会将小变量放入sdata,sbss,scommon等段。这个大小由编译选项-G来决定。-G0则表示不使用小数据段。默认是-G8,表示小于或等于8 byte的数据将放入小变量区。
这样的话,在上电时给gp初始化一个值,那么,所有小变量区的变量就可以通过
lw r1, offset(gp)
来访问了。
那么,
from the man of gcc:
Put global and static objects less than or equal to num bytes into the small
data or bss sections instead of the normal data or bss sections. The default
value of num is 8. The -msdata option must be set to one of sdata or use for
this option to have any effect.
All modules should be compiled with the same -G num value. Compiling with dif‐
ferent values of num may or may not work; if it doesn�t the linker will give an
error message---incorrect code will not be generated.
- 转:终于知道mips中gp寄存器的用法了
- 终于知道mips中gp寄存器的用法了
- MIPS 的寄存器
- 【转】MIPS寄存器介绍
- 【转】MIPS寄存器介绍
- MIPS汇编:MIPS32中通用寄存器的使用约定
- mips的32个寄存器
- mips的32个寄存器
- mips的32个寄存器
- 终于知道“文章摘要”的作用了
- 我终于知道错误的原因了
- 终于知道关键了
- mips寄存器
- mips寄存器
- MIPS寄存器
- mips寄存器
- do while(0) 的妙用----终于知道为什么有些人的代码中要“多此一举”了
- MIPS的32个通用寄存器
- 用UNetBootin制作CentOS的USB安装盘
- Wince 下C#使用INI文件(Bug修正版)
- how to debug EXC_BAD_ACCESS on iPhone
- Android使用NDK时编译头文件的问题
- 信号量封装类(Linux)
- 转:终于知道mips中gp寄存器的用法了
- AndroidManifest.xml简单分析
- 在linux下安装配置svn独立服务器
- Twitter改版:为何愈发象Facebook?
- linux6---引导
- linux中的命令总结
- №CPU占用100%№
- 20111212
- JS 和当前时间比较大小