我之前学习了x86汇编语言,最近在尝试使用C++内联汇编。
我的想法是,在函数的参数中传递一个数组、一个索引(无符号整数)和一个数字。通过汇编语言,它将改变数组中该内存位置的值为传入的值。代码看起来像这样:
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,以便内存位置向右移动那么多个字节,并将其更改为传递的值。然而,当我这样做时,值保持不变。为什么会这样?出了什么问题?
mov edi, pArray
,否则你可能会加载参数变量的地址,而不是它指向的位置。你可能还想通过使用调试器来自学 :) - Jester