嵌入式裸机开发学习:MMU代码中的:"r" (ttb)
2014-08-21 19:07
211 查看
韦东山书MMU部分中的C代码嵌入了汇编指令,最后面有两行代码是这样的:
: /* 无输出 */
: "r" (ttb)
这是gcc嵌入汇编的写法,首先,GCC内联汇编的一般格式是这样的:
asm(
代码列表
:输出运算符列表
:输入运算符列表
:被更改资源列表
);
代码列表、输出运算符列表、输入运算符列表和被更改的资源列表被3个 ":"分隔。书中的代码只有两个":",且第一个":"后为空,说明这段代码无输出也无资源被更改。若代码后面根本没有":",说明这段代码内联汇编既无输出也无输入,也没有资源被更改,只留下了汇编代码部分。
void
mmu_init(void)
{
unsigned long ttb = 0x30000000;
__asm__(
... ...
"mov r4, %0\n"
... ...
: /* 无输出 */
: "r" (ttb) );
}
代码中有一条mov指令,该指令将%0赋值给r4。这里,符号%0代表出现在输入运算符列表和输出运算符列表的第一个值。如果%1存在的话,那么它就代表出现在列表中的第二个值,依次类推。所以,该段代码中,%0代表的就是"r" (ttb)这个表达式的值,即0x30000000。
在"r"(ttb)这个表达式中,ttb代表的正是C语言向内联汇编输入的变量,操作符"r"则代表ttb的值会通过某一个寄存器来传递。在gcc中与之类似的操作符还包括"m","I"等等。
参考:http://blog.chinaunix.net/uid-26833883-id-3348379.html
: /* 无输出 */
: "r" (ttb)
这是gcc嵌入汇编的写法,首先,GCC内联汇编的一般格式是这样的:
asm(
代码列表
:输出运算符列表
:输入运算符列表
:被更改资源列表
);
代码列表、输出运算符列表、输入运算符列表和被更改的资源列表被3个 ":"分隔。书中的代码只有两个":",且第一个":"后为空,说明这段代码无输出也无资源被更改。若代码后面根本没有":",说明这段代码内联汇编既无输出也无输入,也没有资源被更改,只留下了汇编代码部分。
void
mmu_init(void)
{
unsigned long ttb = 0x30000000;
__asm__(
... ...
"mov r4, %0\n"
... ...
: /* 无输出 */
: "r" (ttb) );
}
代码中有一条mov指令,该指令将%0赋值给r4。这里,符号%0代表出现在输入运算符列表和输出运算符列表的第一个值。如果%1存在的话,那么它就代表出现在列表中的第二个值,依次类推。所以,该段代码中,%0代表的就是"r" (ttb)这个表达式的值,即0x30000000。
在"r"(ttb)这个表达式中,ttb代表的正是C语言向内联汇编输入的变量,操作符"r"则代表ttb的值会通过某一个寄存器来传递。在gcc中与之类似的操作符还包括"m","I"等等。
参考:http://blog.chinaunix.net/uid-26833883-id-3348379.html
相关文章推荐
- 嵌入式裸机开发学习:MMU代码中的virtuladdr >> 20 的个人理解
- 嵌入式开发代码中的extern "C" {的作用
- 嵌入式裸机开发学习:中断标志的清除顺序SUBSRCPND-->SRCPND-->INTPND
- 嵌入式裸机开发学习:2440驱动LCD的24bpp模式相关设置
- 【嵌入式系统学习记录】练习:把句子中的单词倒序;(输入"i am from shanghai",输出"shanghai from am i")
- 使用eclipse 开发 嵌入式Linux驱动(注意事项)(make:***没有规则可言创建目标"all".停止 的解决方法)
- KINECT学习 "kinect for Windows SDK开发入门(二)"
- 嵌入式代码open("/dev/ttyso",o_RDWR/O_NOCTTY/O_NDELAY);这个代码说的含义
- 嵌入式裸机开发学习:对.lds连接脚本文件的分析
- 嵌入式系统学习(五)-NanoPi2基础实例开发(裸机程序按钮控制LED灯)
- 读书笔记| (二)ARM9 嵌入式学习:代码 & 原理篇
- 嵌入式裸机开发学习:2440中断体系学习
- 嵌入式开发之Linux基础第二天学习笔记 linux系统命令(一)&其他
- KDE 峰会:开源代码软件开发人员重视"易用性"
- ASP.NET控件开发之"代码紧凑原则"
- 从一段代码说开,谈学习<<C++ Propertiest>>之所得,帮助大家学习开发c++代码框架
- 嵌入式开发之C语言基础第三天&第四天学习笔记
- Eclipse GEF 开发之:当图形editor被更改时Enable "Save" action
- 打开,另存为,属性,打印"等14个JS代码
- 再推荐一篇"Debian学习笔记"