找回密码
 注册
搜索
查看: 933|回复: 3

[讨论] 为什么函数实际运行地址与map文件中地址不一致?

[复制链接]
发表于 2007-1-12 19:06:36 | 显示全部楼层 |阅读模式
ARM7 TDMI 的系统中, 没有MMU,比如某函数PrintSysInfo();在map文件中显示的地址为0x01123456,但是在运行的时候打印这个地址printf("0x%08x", PrintSynInfo);显示的值却是0x01123455,为什么比map文件中显示的地址少1?另外这个运行时的地址居然还是奇数的?!请指教!
发表于 2007-2-26 01:09:52 | 显示全部楼层
看《arm结构与编程》,书中有解释
点评回复

使用道具 举报

发表于 2007-3-1 17:28:38 | 显示全部楼层
估计你编译时,用了"thumb"选项,编译出来的代码是thumb代码。该类代码是ARM代码的子集,每条指令只有2字节,为了和ARM代码区分,采用奇位运行地址。
对于code来说,最后两个bit是无关紧要的。因此是否减少1没有关系。
点评回复

使用道具 举报

发表于 2007-3-22 10:47:59 | 显示全部楼层
一般意义上讲,ARM寻址空间是4G byte,也就是二的三十二次方个字节,在ARMV4版中,把存储空间实际看成2G个半字格式(2 bytes),地址自然也就没有奇数了。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-27 00:19 , Processed in 0.046085 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表