arm - 非常 Baisc 臂组装问题(添加、比较)
问题描述
TLDR:bx lr 到底是做什么的?
我无法理解以下两个示例:
我知道代码“add r0, r0, r1”将 r1 添加到 r1 并将其存储到寄存器 0。我不明白的是代码“bx lr”如何知道如何在没有明确说明 r0 的情况下返回 r0。
同样在这里我知道代码“BGT r0_Gt”比较如果 r0 > r1,如果这是真的,代码将跳到 r0_gt: 但是,bx lr 如何知道如何返回正确的值?
解决方案
它由使用的 ABI 定义;对于 ARM,这是 EABI,在“5.4 Result Return”中声明
- 小于 4 个字节的基本数据类型以零或符号扩展为一个字并在 r0 中返回。
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf
推荐阅读
- mysql - 根据另一个子标签的值获取子标签的值
- spring - Spring-EL 表达式可以在沙箱中执行吗?
- javascript - 使用 keystone-storage-adapter-s3 后的字段错误
- javascript - 如何通过网络 ajax 加载和验证 mp3 文件而不播放它?
- ios - 从单个 Observables 创建多个 Observables - RxSwift
- javascript - JQuery 事件不是函数
- python - Python 3 相当于 Python 2 str.decode('hex')
- sql - 我如何需要将 ID 和名称传递给变量并执行过程
- javascript - 检测 google.maps.InfoWindow ({ content: contentString }) 内的点击;
- raspberry-pi - 在 Raspberry pi 3 中使用监控模式捕获探测请求