gpt4 book ai didi

c++ - 在函数中更改数组值 - 内联汇编

转载 作者:可可西里 更新时间:2023-11-01 18:39:32 25 4
gpt4 key购买 nike

所以我不久前自学了 x86 汇编,并且只是在 C++ 中使用内联汇编。

所以我想做的是在一个函数参数中,传入一个数组、一个索引 ( unsigned int ) 和一个数字。使用汇编,它会将数组的该内存位置中的值更改为传入的值。所以代码看起来像这样。

inline void Set( int pArray[], unsigned int pIndex, int pNum ) {
__asm {
mov ebx, pIndex
mov eax, 4
mul ebx
mov ebx, pNum

lea edi, pArray
mov [ edi + eax ], ebx
}
}

int main() {
int myArray[ 5 ] = { 1, 2, 3, 4, 5 };
Set( myArray, 2, 7 );
std::cout << myArray[ 2 ] << std::endl;
}

因此代码应该加载数组地址的开头,获取索引并将其乘以 4,以便内存位置移动那么多字节,并将其更改为传入的值。但是,当我这样做时, 值保持不变。这是为什么?出了什么问题?

最佳答案

lea 代表“加载有效地址”,您的 lea 放置参数的地址。你的意思是 lea edi, [pArray]

但是,还有两件事:1)你不必乘以四。你可以做 lea edi, [pArray + 4*ebx]由于“scale index byte”寻址模式允许您乘以 4 并添加一个立即地址。

2) 你假设 32 位。您使用的是什么计算机,2015 年年中时仍在 32 位模式下运行?

我对英特尔语法汇编生疏了。我可以推荐你学习 GCC 中的汇编程序和 C++ 代码的集成吗? https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html

关于c++ - 在函数中更改数组值 - 内联汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com