我需要一些帮助来理解组装中的某些功能。我可以创建一个简单的函数,它接受一个参数或2,然后通过将它放入一个寄存器%eax来返回类似于数字的内容。我的问题是你如何返回一个列表?我正在创建一个函数,它将搜索可能为100个数字的已定义数据集,并且我需要继续运行特定范围(0-9,10-19,20-29等)中的数字总数,以便将一个变量为每个范围。由于寄存器的数量是有限的,所以我显然必须通过调整堆栈来创建局部变量的空间,而不是。但是,如何返回所有这些值?我会假设你会返回一个地址在%eax指向这些变量的位置,但由于这些值是本地的,并在堆栈上创建,我不会无法访问这些?我的意思是我猜你可以,但是这违背了我对局部变量及其范围的所有知识。这些价值观应该放在堆上还是什么东西?我没有教过任何涉及堆的任何东西,所以我不知道这是我应该做什么,或者我不了解某些东西......?任何帮助表示赞赏。谢谢。装配功能基础?
装配功能基础?
回答
如果你知道如何列表/数组中的许多元素,更将是,你可以分配内存,要么在功能(使用C++的malloc()
或等价物)或它(外面再使用malloc()
或将数组/列表声明为一个变量或一组相互引用的变量),并将函数传递给列表/数组的第一个元素的地址。
或者,你可以在函数中通过元素生成列表/数组元素,并从它返回的第一个元素的地址。当然,你需要分配的第一要素,然后成长的分配有一定的空间,后续元素(用C的realloc()
),也可以单独分配的所有元素(用C的malloc()
),并把它们连(即元素会需要包含一个指针/地址以将它们链接到列表中)。
我要去“清单”那你的意思是“数组”的假设。如果你想返回一个指向数组数组的指针,你需要为该数组分配一些内存。要么调用者通过它,要么调用malloc
来分配一个缓冲区 - 它对于程序集和C程序一样好。最后,将指针返回到eax
中的数组。
您返回内存指数在堆上创建的列表。或者你将它传递给存储器索引以将数据写入为参数,并将其用作输出变量。那么内存索引可以是堆栈或堆的。
所以你说我可以返回一个内存索引将指向我创建的变量在栈上的函数没有使用堆? – zProgrammer 2013-02-21 19:55:36
@杰克 - 不,那会非常危险。如果你调用一些其他函数来修改堆栈中的这些变量呢? – 2013-02-21 19:57:22
不,它必须是一个堆内存索引,否则它可能会被覆盖(同样的原因,你不能在C++中返回一个指向堆栈对象的指针)。但是,如果您的调用函数在堆栈中分配内存,则可以安全地将该索引传递给该函数。这里的折衷是调用函数需要知道(或猜测)提前分配多少内存。 – 2013-02-21 19:57:26
- 1. 基础错误功能
- 2. 的SharePoint:功能基础
- 3. ,它覆盖基础功能
- 4. JavaScript - 功能基础知识
- 5. 装配基础 - 输出不工作
- 6. 递归(?)的基础上性病函数包装::功能<>
- 7. 基础路过R中的功能
- 8. 指定日志功能的基础
- 9. 一个基础研发功能
- 10. 变化的基础功能behaveiour
- 11. 扩展基础类字段的功能
- 12. 功能NHibernate:通用基础类
- 13. 云基础架构建模功能
- 14. 获取的JavaScript的基础功能
- 15. MOVQ装配功能
- 16. 装配功能流
- 17. 问题基础上安装
- 18. 基础安装和turbolinks
- 19. 安装NServiceBus基础设施
- 20. 试图在Eclipse(使用ADT为基础包)来安装新的功能
- 21. 核心基础VS基础或核心基础+基金会
- 22. 与功能匹配值基于类型
- 23. 替代基本分配功能
- 24. 检测功能支持与modernizer和PHP的基础上结果
- 25. 错误:无法找到功能“forceAndCall” - 过时的基础包?
- 26. 缺少SharePoint 2007中的SharePoint Server发布基础结构功能
- 27. 的Eclipse工作中的功能(S)的基础上设置
- 28. 承诺为基础的功能回路不运行异步
- 29. R:修补程序包功能并重新加载基础库
- 30. 基础是否具有标准的“const”功能?
谢谢,我想我没有想到这样做我会在C做同样的事的...... -.-装配 – zProgrammer 2013-02-21 20:07:40