我第一次搞乱汇编,似乎无法改变数组的索引值。这是我正在研究的方法
int ascending_sort( char arrayOfLetters[], int arraySize )
{
char temp;
__asm
{
//???
}
}
这些是我试过的
mov temp, 'X'
mov al, temp
mov arrayOfLetters[0], al
这给了我一个错误C2415:不正确的操作数类型
所以我试过
mov temp, 'X'
mov al, temp
mov BYTE PTR arrayOfLetters[0], al
这符合,但它没有改变阵列......
答案 0 :(得分:3)
当你有一个数组的参数或变量时,它实际上是一个指向数组第一个元素的指针。你必须尊重指针,以便改变它指向的数据。例如:
__asm
{
mov eax, arrayOfLetter
mov [eax], 0x58
}
或者更一般地说:
__asm
{
mov eax, arrayOfLetter
mov [eax+index], 0x58
}
答案 1 :(得分:2)
arrayOfLetters
值等同于指针。因此,您的汇编代码可能需要:
mov temp, 'X'
mov al, temp
mov edx, arrayOfLetters
mov [edx], al
在上面的代码中,edx
加载了arrayOfLetters
的地址。然后,最后一条指令将al
字节存储到edx
所指向的地址中。
答案 2 :(得分:0)
这个SO问题涉及读取数组的元素而不是修改它们,但我怀疑底层的解释将大致相同(即arrayOfLetters需要被视为指针):