Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly eax如何存储大于4字节的返回值?_Assembly_Return Value_Cpu Registers - Fatal编程技术网

Assembly eax如何存储大于4字节的返回值?

Assembly eax如何存储大于4字节的返回值?,assembly,return-value,cpu-registers,Assembly,Return Value,Cpu Registers,EAX用于存储32位平台中函数的返回值,我只是想知道一个函数返回值的大小是否大于4字节,EAX是如何处理的?在这种情况下,OS可以将返回值保存在堆栈上,并将堆栈的地址存储在EAX中,但OS如何判断存储在EAX中的值是返回值的地址,还是实际上是返回值本身 调用方和被调用方必须就寄存器和堆栈包含的内容达成一致。这就是所谓的,这是一个更大的概念的一部分,称为。被调用方定义如何调用它(即参数是否需要在堆栈、寄存器等中),编译器确保它生成的代码符合调用约定 至于你的具体问题,这取决于ABI。有时,如果返回

EAX用于存储32位平台中函数的返回值,我只是想知道一个函数返回值的大小是否大于4字节,EAX是如何处理的?在这种情况下,OS可以将返回值保存在堆栈上,并将堆栈的地址存储在EAX中,但OS如何判断存储在EAX中的值是返回值的地址,还是实际上是返回值本身

调用方和被调用方必须就寄存器和堆栈包含的内容达成一致。这就是所谓的,这是一个更大的概念的一部分,称为。被调用方定义如何调用它(即参数是否需要在堆栈、寄存器等中),编译器确保它生成的代码符合调用约定

至于你的具体问题,这取决于ABI。有时,如果返回值大于4字节但不大于8字节,则可以将其拆分为EAX和EDX。但大多数时候,调用函数只会分配一些内存(通常在堆栈上),并将指向该区域的指针传递给被调用函数


还要注意,操作系统的作用并不像你想象的那么重要。具有不同调用约定的二进制文件可能在同一系统上共存,二进制文件甚至可以在内部使用不同的调用约定。只有当二进制文件调用其系统库时,操作系统的ABI才是重要的。

请参阅此问题的答案: