装配功能基础?

时间:2013-02-21 19:48:06

标签: function assembly stack

我需要一些帮助来理解装配中的一些功能。我可以创建一个简单的函数,它接受一个参数或2,然后通过将它放在寄存器%eax中返回一个类似数字的东西。我的问题是你如何归还清单?我正在创建一个函数,它将搜索可能包含100个数字的已定义数据集,并且我需要在特定范围(0-9,10-19,20-29等)中保持运行总数的数字,这样一个变量对于每个范围。由于寄存器的数量是有限的,我显然必须通过调整堆栈来创建局部变量的空间。但是,我如何返回所有这些值?我假设你会在%eax中返回一个指向这些变量所在位置的地址,但由于这些值是本地的并且在堆栈上创建,我不能访问这些吗?我的意思是我猜你可以,但这与我所了解的局部变量及其范围有关。这些值是应该放在堆上还是什么?我没有被教过任何涉及堆装的东西,所以我不知道那是我应该做的还是我不理解的东西......?任何帮助表示赞赏。感谢。

3 个答案:

答案 0 :(得分:0)

我打算用“list”来表示你的意思是“数组”。如果要返回指向数组数组的指针,则需要为该数组分配一些内存。让调用者传入它,或者调用malloc来分配缓冲区 - 它对于汇编程序和C程序一样有效。最后,将指针返回到eax中的数组。

答案 1 :(得分:0)

将内存索引返回到堆上创建的列表。或者将它传递到内存索引中以将数据写入参数,并将其用作输出变量。然后该内存索引可以是堆栈或基于堆。

答案 2 :(得分:0)

如果您知道列表/数组中有多少元素,您可以在该函数中分配内存(使用C的malloc()或等价物)或在其外部(再次,使用malloc()或将数组/列表声明为一个变量或一组引用彼此的变量)并将函数传递给列表/数组的第一个元素的地址。

或者,您可以在函数中按元素构建列表/数组元素,并从中返回第一个元素的地址。当然,您需要分配第一个元素,然后增加分配以便为后续元素留出一些空间(使用C的realloc()),或者您可以单独分配所有元素(使用C的malloc())和链它们(也就是说,元素需要包含一个指针/地址,以便将它们链接到一个列表中)。