调用约定是指函数将参数传递给被调用函数并从中接收返回值的方式。
我目前正在上一门涵盖 MIPS ISA 的课程,我注意到的一件事是临时寄存器的分割: 临时寄存器$t0到$t7存储在$8到$15中,但是$t8和$t9是...
avr-gcc 中 Y 寄存器与调用/堆栈帧的偏移量来自哪里?
在 avr-gcc 网站(https://gcc.gnu.org/wiki/avr-gcc#Frame_Layout)上,它说帧指针(Y 寄存器)偏移了一个字节,因此 Y+1 指向框架的底部。但是当我编译时...
在intel平台上,BP用于指向堆栈帧的开头并访问参数[bp+0x??]和局部变量[bp-0x??]。 ARM中使用哪个寄存器?或者,是寻址
考虑这个 TU: 结构体 Foo { int 运算符()(int) const; }; int foo(Foo b) { 返回 b(17); } 它将编译为: 富(富): 子 rsp,24 莫夫ESI,17 莉亚·迪,[rsp+15] 打电话给 Foo::ope...
Linux ARM64 调用约定:被调用者需要保存哪些寄存器?
是否有一个寄存器列表,在 aarch64 Linux/BSD 上,如果被调用者要使用它们,被调用者绝对必须保存/恢复它们? ABI 文档在这一点上似乎很混乱。或者至少,...
如果我们看一下一些现代调用约定,例如 x86-64 SysV 风格或 AArch64 风格(标题为“Arm® 64 位架构的过程调用标准”的 aapcs64.pdf 文档),我们会看到 ex...
我正在开发一个库,允许其用户(驻留在同一进程中的其他库)交换数据缓冲区和流。该库必须可以从 MSVC 和 mingw 代码中使用(更多
x86-64 上的 C++:结构/类何时在寄存器中传递和返回?
假设 Linux 上的 x86-64 ABI,在 C++ 中的什么条件下,结构体会传递给寄存器中的函数,还是传递给堆栈上的函数?在什么条件下它们会返回到寄存器中?答案是吗
为什么“long long”参数需要在RISC-V中“对齐奇偶寄存器对”
正如 RISC-V 调用约定文档所述: 当在堆栈上传递两倍于指针字大小的原始参数时,它们是 自然对齐。当它们传入整数时
我从来没有遇到过组装本身的问题。我唯一的问题是我不明白参数如何在函数中传递以及如何返回它们。 比方说 公共地址号码 添加编号过程 ...
我编写了一个最小函数来测试是否可以调用/链接C和x86_64汇编代码。 这是我的 main.c #包括 外部 int 测试(int); int main(int argc, char* argv[]) { ...
如何迭代 x86 汇编中字符串的各个字符并打印它们? 全局_main;声明 _main 入口点 外部_printf;外部方法 部门...
这是我用gcc编译的C代码 - #包括 #包括 int sum(int arr[20]) { 整数s = 0; 对于 (int i = 0; i < 20; i++) s += arr[i]; retur...
我一直在写一个编译器,并和一位同事讨论过这种情况。 在最一般的情况下,假设您的参数位于堆栈中(一旦参数寄存器耗尽)。 如果...
在 iPhone/ARM 上,哪些 CPU 寄存器是应该保留的函数(如果有)?
以下代码在不同的编译器上产生不同的输出; #包括 void fun(int x, int y, int z) /* 函数定义 */ { printf("%d %d %d “,x,y,z)...
我用于创建学生 ID 的代码无法找到姓氏,并且我不确定代码的哪一部分导致它无法看到创建新学生对象时给出的姓氏...
我正在从 ctypes 调用 NASM 64 位 DLL。该 dll 有五个输入参数。在 Windows 调用约定中,前四个在 rcx、rdx、r8 和 r9 中传递,第五个在
记住 x86-64 System V arg 寄存器顺序的最佳方法是什么?
我经常忘记系统调用中每个参数需要使用的寄存器,每次我忘记时我都会访问这个问题。 整数/指针参数到 x86_64 用户空间函数的正确顺序...
初始化可变参数列表时,您可以使用宏 va_start 并在 va 列表开始之前传递 list_name 和最后一个固定参数,因为“最后一个固定参数与