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 程序集如何存储参数的不同方法?_Assembly_Nasm_Calling Convention_Function Parameter - Fatal编程技术网

Assembly 程序集如何存储参数的不同方法?

Assembly 程序集如何存储参数的不同方法?,assembly,nasm,calling-convention,function-parameter,Assembly,Nasm,Calling Convention,Function Parameter,我是汇编(NASM)方面的新手,我有一些问题。我读过,我们可以在6寄存器中存储参数,但我也读过,我们可以在ebp+值中存储参数。 我们可以在寄存器或ebp+值中存储函数的参数吗 如果正确,我们可以将局部变量保存在寄存器和ebp值中吗 谢谢请查阅相应的呼叫约定文档。只要调用者和被调用者就参数的位置达成一致,您也可以创建自己的参数传递。cpu不在乎。请注意,即使使用stack,也不需要使用ebp。汇编语言允许您在指令集规则范围内自由执行任何操作。除非您使用的是高级语言(C等),否则您需要遵守该编译器

我是汇编(NASM)方面的新手,我有一些问题。我读过,我们可以在6寄存器中存储参数,但我也读过,我们可以在ebp+值中存储参数。 我们可以在寄存器或ebp+值中存储函数的参数吗

如果正确,我们可以将局部变量保存在寄存器和ebp值中吗


谢谢

请查阅相应的呼叫约定文档。只要调用者和被调用者就参数的位置达成一致,您也可以创建自己的参数传递。cpu不在乎。请注意,即使使用stack,也不需要使用
ebp
。汇编语言允许您在指令集规则范围内自由执行任何操作。除非您使用的是高级语言(C等),否则您需要遵守该编译器的调用约定(假定编译器特定而非目标特定)。您可能混淆了32位和64位调用约定。在SysV调用约定(用于Linux等)下的32位代码中,参数在堆栈上传递,通常通过偏移量访问
ebp
。在64位SysV代码中,前六个参数在寄存器中传递。当你们阅读有关汇编语言的文章时,一定要检查他们所谈论的体系结构、模式和操作系统;对于一种组合为true的语句可能不会转移到其他组合。