arrays - NASM - 如何制作结构指针数组并访问它们

标签 arrays pointers assembly struct nasm

所以我的问题是:
我有一个名为 vertex 的结构

struc vertex
  .x  resq 1
  .y  resq 1
  .z  resq 1
endstruc

我想创建一个指向由该定义构成的结构的指针数组。就像加载顶点表单文件并将它们保存在结构和数组中的指针中,以便我以后可以访问它们。
有任何想法吗?

我唯一的想法是使用这样的东西:
modelVertices resb vertex_size*100

制作所有顶点的这个巨大“数组”并像访问它一样
[modelVertices+i*vertex_size]

我要访问的顶点在哪里,那么我将如何访问顶点元素?
我现在不确定,但结构大小不完全是 elem1_size+elem2_size ......对吗?所以我不能仅仅通过添加元素的大小来访问它们以进入下一个不?

有没有什么通用的方法来实现这一目标?

提前致谢,祝您有美好的一天

编辑:
我试过这个
[modelVertices + vertexNumber*vertex_size + vertex.x]

要读取 vertexNumberth 顶点的 x,我知道程序集允许我用内存做几乎所有的事情,所以它可以工作,但这是正确的用法吗?

最佳答案

结构的元素是从结构开始的偏移量,因此您可以通过添加偏移量来访问元素:

[modelVertices+i*vertex_size + vertex.x]

您可能想为此定义宏:
%define VERTEX(i, e)  [modelVertices+i*vertex_size + vertex. %+ e]

mov VERTEX(3, y), rax     ; move rax to y of vertex at index 3

编辑 : 如果要使用寄存器作为索引,则必须单独计算乘法:
%define VERTEX(offset, e)  [modelVertices + offset + vertex. %+ e]

; calculate offset from start of the array
mov eax, vertex_size
mov edx, 3 ; index
mul edx

mov VERTEX(rax, y), rcx     ; move rcx to y of vertex at index 3

如果要创建指针数组而不是直接使用结构,请创建 qwords 数组:
ptrArray resq 100 ; fill in the addresses somewhere

; ...

; get pointer to vertex at index i
%define VERTEX_PTR(i)   [ptrArray + i * 8]

%define VERTEX(ptr, e)  [ptr + vertex. %+ e]

mov rdx, VERTEX_PTR(3)
mov VERTEX(rdx, y), rax   ; move rax to y of vertex at index 3

关于arrays - NASM - 如何制作结构指针数组并访问它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26412158/

相关文章:

c# - 什么是线程安全 (C#)? (字符串,数组,...?)

c++ - "if(pointer) delete ponter"即使指针未初始化也尝试删除

c - 最快的位计数方法

assembly - "mov offset(%rip), %rax"是做什么的?

java - 将字符串数组添加到ArrayList中

将 Char* 转换为 Char* 数组

c - 段错误和指向不存在结构的指针不为空

c - 了解 C 中的内存地址和指针

c - 如何在 MacOS X 下的 GCC 中使用内联汇编器调用 write 系统调用?

java - 将列表均匀分布到 Java 中的子列表中