__lookup_processor_type 有一句不懂,请赐教~
时间:2011-06-22
来源:互联网
在看ARM LINUX 2.6.31 启动的代码中head-common.S中
Assembly code
sub r3, r3, r7不是很明白,这是怎么算出相对偏移量呢,我感觉应该是sub r3, r3, r5,请详细说说~
Assembly code
__lookup_processor_type: adr r3, 3f ldmda r3, {r5 - r7} sub r3, r3, r7 @ get offset between virt&phys add r5, r5, r3 @ convert virt addresses to add r6, r6, r3 @ physical address space 1: ldmia r5, {r3, r4} @ value, mask and r4, r4, r9 @ mask wanted bits teq r3, r4 beq 2f add r5, r5, #PROC_INFO_SZ @ sizeof(proc_info_list) cmp r5, r6 blo 1b mov r5, #0 @ unknown processor 2: mov pc, lr ENDPROC(__lookup_processor_type) /* * This provides a C-API version of the above function. */ ENTRY(lookup_processor_type) stmfd sp!, {r4 - r7, r9, lr} mov r9, r0 bl __lookup_processor_type mov r0, r5 ldmfd sp!, {r4 - r7, r9, pc} ENDPROC(lookup_processor_type) /* * Look in <asm/procinfo.h> and arch/arm/kernel/arch.[ch] for * more information about the __proc_info and __arch_info structures. */ .long __proc_info_begin .long __proc_info_end 3: .long . .long __arch_info_begin .long __arch_info_end
sub r3, r3, r7不是很明白,这是怎么算出相对偏移量呢,我感觉应该是sub r3, r3, r5,请详细说说~
作者: haohaokingXP 发布时间: 2011-06-22
注意前面是ldmda r3, {r5 - r7},而不是ldmia ...,这两个指令的操作方向是相反的,贴一下ARM ARM中关于指令的伪代码,参考一下。另外注意,在新版本内核(如Linux 2.6.32)一般都使用ldmia处理,当然标号3的位置有改变,可以同时参考一下。
if ConditionPassed() then
EncodingSpecificOperations();
address = R[n] - 4*BitCount(registers) + 4;
for i = 0 to 14
if registers<i> == ’1’ then
R[i] = MemA[address,4]; address = address + 4;
if registers<15> == ’1’ then
LoadWritePC(MemA[address,4]);
if wback && registers<n> == ’0’ then R[n] = R[n] - 4*BitCount(registers);
if wback && registers<n> == ’1’ then R[n] = bits(32) UNKNOWN;
if ConditionPassed() then
EncodingSpecificOperations();
address = R[n] - 4*BitCount(registers) + 4;
for i = 0 to 14
if registers<i> == ’1’ then
R[i] = MemA[address,4]; address = address + 4;
if registers<15> == ’1’ then
LoadWritePC(MemA[address,4]);
if wback && registers<n> == ’0’ then R[n] = R[n] - 4*BitCount(registers);
if wback && registers<n> == ’1’ then R[n] = bits(32) UNKNOWN;
作者: aria 发布时间: 2011-06-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28