1

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

4

3 回答 3

0

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

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

于 2013-02-21T20:07:40.517 回答
0

我将通过“列表”假设您的意思是“数组”。如果要返回指向数字数组的指针,则需要为该数组分配一些内存。要么让调用者把它传入,要么调用malloc分配一个缓冲区——它对汇编程序和 C 程序一样有效。最后,返回指向数组的指针eax

于 2013-02-21T19:52:38.350 回答
0

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

于 2013-02-21T19:52:49.800 回答