如何强制编译器不为返回函数生成“BX LR”。 我也设置了选项--ARM_only(在编译器+汇编+链接器),但这是没有用的,我最后在axf文件中有这个代码。 我在Keil中的目标设置为ARM7TDMI(我无法将目标设置为ARM7或没有Thumb的任何其他目标) 因此,我们可以做些什么来防止生成“BX LR”?防止在Keil中生成“BX LR”
回答
BX
如果目标地址的最低有效位为0,则不会切换到Thumb模式。换句话说,它也可以用作常规分支。
指令循环时间为BX LR
和例如MOV PC,LR
在ARM7TDMI上也是相同的(2S + 1N个周期),所以在使用其中一个或另一个的性能方面没有任何优势。
但是,如果想要编译器生成MOV PC,Lr,我们该怎么办?看来所有新的编译器都会生成BX LR来返回函数(http://newsgroups.derkeiler.com/Archive/Comp/comp.sys.arm/2006-04/msg00031.html)。在这种情况下,我们可以使用链接器选项将“BX LR”替换为“MOV PC,LR”?有什么选择?我想要一个没有“BX LR”的代码! – user1973744
你发布的链接总结得非常好;使用'BX'从函数返回是标准的。 (在ARMv4T上“返回序列必须恢复任何保存的寄存器,然后**使用bx指令返回调用者**”,请参阅http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e /IHI0042E_aapcs.pdf)。如果你告诉编译器为ARMv4生成代码(即没有'T'),你可能会得到一个'MOV PC,LR'返回指令。但问题是,你为什么不首先要“BX”?它工作正常,与'MOV'版本的大小和速度相同。 – Michael
您需要使用开源编译器并修改后端。 bx lr是包含ARMv4T之后的所有内容的正确指令。这将是一个破碎的编译器后端生成mov pc,lr –
- 1. bx lr在ARM汇编语言中做了什么?
- 2. 如何防止生成__IO_putc?
- 3. 防止asp.net生成someValidator.display =“Dynamic”;
- 4. 防止生成新的jsessionid?
- 5. 防止ID自动生成
- 6. 如何防止生成Rplots.pdf?
- 7. 如何防止生成.csproj.user?
- 8. 如何防止MDK-ARM(Keil)初始化一个变量?
- 9. 如何防止webpack生成.map文件
- 10. 防止Javascript生成的内容延迟
- 11. 防止Netbeans JAXB生成垃圾类
- 12. 防止Qt生成快捷方式?
- 13. 如何防止生成项目?
- 14. 防止iOS QuickLook生成缓存
- 15. 防止随机数多生成一次
- 16. 使用[interopformproperty]防止wrapper.cs文件生成
- 17. 防止Yesod生成client_session_key.aes文件
- 18. 防止属性生成资源
- 19. JAXB:防止类重新生成
- 20. 如何防止生成验证属性?
- 21. 如何防止bundler生成binstubs?
- 22. 防止在实体框架中生成导航属性代码生成工具
- 23. bx滑块不会停止
- 24. 防止自动提交在Cognos中生成报告
- 25. 如何防止在MVC中生成相同的OTP 2FA
- 26. 生成随机元素位置,并防止在JavaScript中重叠
- 27. 如何防止包含文件在PHP中生成输出?
- 28. 如何防止在WCF客户端中生成“指定”属性?
- 29. 如何防止人们在TFS2010中检查生成的文件?
- 30. 在jscript中创建随机数生成器并防止重复
“BX LR”有什么问题? – starblue
如果这只适用于一种功能,则可以使用嵌入式装配(搜索裸露功能)。 – auselen