搜索
bottom↓
回复: 7

赋给PC的是被调用函数的绝对地址还是相对PC的偏移地址

[复制链接]

出0入0汤圆

发表于 2012-4-27 22:07:37 | 显示全部楼层 |阅读模式
弱弱的问一句

程序代码在存储器里运行的时候,当执行函数调用时,赋给PC的是被调用函数的绝对地址还是相对PC的偏移地址?

请知道的帮忙回复一下,本人不太理解把代码搬运到在RAM里运行机制,故有此问,当函数之间的调用为绝对地址时,不是又返回flash执行吗

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-4-28 09:25:25 | 显示全部楼层
没人帮忙啊

出0入0汤圆

发表于 2012-4-29 23:04:51 | 显示全部楼层
本帖最后由 b620126 于 2012-4-29 23:09 编辑

这个是不是要看寻址方式?

只知道微机原理的

a.段内直接转移,具体格式:CALL 过程名。此时CS不入栈,IP的内栈入栈,入栈后再将加上目的地址与CALL指令的下一条指令的偏移地址之差值就可以转移到目的地址,详细过程:
SP-2=>SP;将堆栈指针SP减2
(SP)<=IP;将IP进栈
IP+偏移地址之差;转到目的地址
b.段内间接转移,具体格式:CALL OPRD,那么在这里OPRD可以寄存器或内存单元,它的具体实现过程:
SP-2=>SP;将堆栈指针SP减2
(SP)<=IP;将IP进栈
IP<=(OPRD);转到目的地址
同a一样,CS不入栈
c.段间直接转移,具体格式:CALL 过程名 [FAR],此时CS,IP均要入栈,详细的实现过程:
SP-2=>SP;将堆栈指针减2
(SP)<=CS;将CS入栈
SP-2=>SP;将堆栈指针再减2
(SP)<=IP;将IP入栈
;装入新的CS,IP
IP<=过程入口的偏移地址
CS<=过程入口的段地址
d.段间间接转移,具体格式:CALL OPRD [FAR],此时CS,IP均要入栈,OPRD是32位,你知道在8086中没有32位寄存器。因此,这里的OPRD一定是存储单元,高16位是CS的值,低16位是IP值,详细的实现过程:
SP-2=>SP;将堆栈指针减2
(SP)<=CS;将CS入栈
SP-2=>SP;将堆栈指针再减2
(SP)<=IP;将IP入栈
;装入新的CS,IP
IP<=(OPRD+2,OPRD+3)
CS<=(OPRD,OPRD1)

出0入0汤圆

 楼主| 发表于 2012-5-9 00:04:31 | 显示全部楼层
本帖最后由 lester1101 于 2012-5-9 00:10 编辑
b620126 发表于 2012-4-29 23:04
这个是不是要看寻址方式?

只知道微机原理的


感谢回复,讲的很详细,不过还是有些迷糊,到底是绝对地址还是相对地址?
你的意思是不是直接转移的时候是偏移地址?间接转移的时候是绝对地址?
那ARM里c编程编译后的函数之间的相互调用是相对转移,还是绝对地址转移呢?

出0入0汤圆

发表于 2012-5-9 09:08:30 | 显示全部楼层
关于X86寻址是段地址加偏移,
所以PC不是实际地址,
是相对地址。
这个微机原理讲的更明白。


ARM中的PC应该是实际地址。

出0入0汤圆

 楼主| 发表于 2012-5-9 19:43:19 | 显示全部楼层
catch2000 发表于 2012-5-9 09:08
关于X86寻址是段地址加偏移,
所以PC不是实际地址,
是相对地址。

照你的意思
微机 段间转移 段基址加偏移,应该属于绝对地址了,
因为相对地址是指相对当前指令的地址,
而段基址加偏移是绝对地址,跟当前指令地址没有关系

出0入0汤圆

发表于 2012-5-9 20:22:56 | 显示全部楼层
lester1101 发表于 2012-5-9 19:43
照你的意思
微机 段间转移 段基址加偏移,应该属于绝对地址了,
因为相对地址是指相对当前指令的地址,

如果是在实模式下,
在访问内存时是实际地址

出0入0汤圆

发表于 2012-5-11 09:47:59 | 显示全部楼层
那就看你跳转的时候用什么指令了,如果用b(bl)指令就是相对跳转,直接向PC指针写函数地址就是绝对跳转,至于你说的又跳回flash这种情况不会发生,因为如果有代码搬移到ram的动作,那么在链接的时候制定链接地址会在ram所处的地址中,如果这样,在搬移前绝对不要用mov pc,xxx   ldr pc,=xxx这之类的指令,否则cpu就飞了,因为你的程序还没有搬移到指定位置,这时候函数调用就用bl
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 17:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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