我正在阅读System V Application Binary Interface,还有一部分是我无法理解的。
首先,文件说明了
没有尝试为C
以外的语言指定ABI
(第10页)。
稍后,在第20页,数组分为MEMORY,POINTER等:
聚合(结构和数组)和联合类型的分类有效 如下:
...
然后使用分类来定义调用约定 - 它们的值和边界如何传递给函数并从函数返回。如果我正确地读取算法,则可以将数组分类为INTEGER,MEMORY或SSE。
但是在C语言中,数组总是作为指针传递和返回。那么为什么对数组进行分类以及数组类在哪种情况下很重要?
答案 0 :(得分:1)
我想通了:如果数组是结构或联合的一部分,它可以在寄存器中传递。
此C代码
#include <stdint.h>
struct somebytes {
uint8_t bytes[8];
};
uint8_t plus(struct somebytes p) {
return p.bytes[3]+p.bytes[5];
}
转换为此程序集:
mov %rdi,%rax
shr $0x28,%rdi
shr $0x18,%rax
add %edi,%eax
retq