所以我的问题是:
我有一个名为 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/