首页 > 解决方案 > 非常 Baisc 臂组装问题(添加、比较)

问题描述

TLDR:bx lr 到底是做什么的?

我无法理解以下两个示例:

*添加示例:* 在此处输入图像描述

我知道代码“add r0, r0, r1”将 r1 添加到 r1 并将其存储到寄存器 0。我不明白的是代码“bx lr”如何知道如何在没有明确说明 r0 的情况下返回 r0。

比较示例: 在此处输入图像描述

同样在这里我知道代码“BGT r0_Gt”比较如果 r0 > r1,如果这是真的,代码将跳到 r0_gt: 但是,bx lr 如何知道如何返回正确的值?

标签: armpi

解决方案


它由使用的 ABI 定义;对于 ARM,这是 EABI,在“5.4 Result Return”中声明

  • 小于 4 个字节的基本数据类型以零或符号扩展为一个字并在 r0 中返回。

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf


推荐阅读