【问题标题】:How to use vectors in assembly code x86 and SSE如何在汇编代码 x86 和 SSE 中使用向量
【发布时间】:2016-08-27 09:39:39
【问题描述】:

我不知道如何在 x86 中访问 stl 向量。我试过这样做,但我有一些错误。

mov ebx, stl_vector 
mov eax, [ebx] ;Here I want to store the first element of the vector
mov edx, [ebx + 4] ; I want to store the second element of the vector

我想用 SSE 语言做同样的事情。

提前谢谢你!

【问题讨论】:

    标签: assembly sse sse3


    【解决方案1】:

    stl 向量是对象。除非您知道确切的班级布局,否则您无法直接访问它们。您可能应该将指向数组的指针和大小分别传递给您的汇编函数,例如asm(vector.data(), vector.size()) 所以编译器会处理 c++ 的东西。

    【讨论】:

    • 您需要知道stl_vector 类的_vTable 布局才能正确访问其成员。您的mov eax, [ebx] 可能会为您提供stl_vector 类的析构函数的地址,而不是所需的数据字段(地址)。仅供参考,此布局可能会在您的编译器版本之间发生变化。
    • 拥有数组后,如何访问元素?就像我之前写的那样?谢谢!
    • 是的,如果您在ebx 中有地址,那么[ebx][ebx+4] 将分别是第一个和第二个元素。
    • 取决于值的类型,对于 32 位 int[ebx][ebx+4] 是第一个和第二个元素(如 [ebx + 4 * element_index])。对于其他类型,根据元素类型大小调整“4”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多