这是我编译空主函数时得到的代码:
main:
movw _.frame,2,-sp
sts _.frame
ldd #0
movw 2,sp+,_.frame
rts(使用-m68hc12标志编译;输出类似于没有标志)。其他基本函数(不一定是主函数,也不一定是空函数)遵循相同的模式。
我不明白_.frame是什么。根据端口的源代码,它应该是一个硬寄存器。在hc11 /hc12上只有5个硬寄存器: D、X、Y、SP和PC。那么汇编程序对虚拟帧指针寄存器做了什么呢?
问题的第二部分是帧指针本身的外观。端口似乎实现了框架指针消除所需的宏和函数,那么为什么不将其替换为对堆栈指针的引用?
编辑:
我已经找到了我问题的答案。m68hc11端口通过向预定义的内存位置分配符号寄存器名来模拟一些硬寄存器(包括帧指针)。这是在larith.asm文件中完成的,它显然不仅仅是一个算术库。
发布于 2012-02-26 10:12:33
没有检查gcc的确切来源,但我认为这里的_.frame只是一种内部使用一些全局数据的软寄存器。
以下链接可部分证明这一点:
http://tech.groups.yahoo.com/group/gnu-m68hc11/message/3621
https://stackoverflow.com/questions/9433325
复制相似问题