在x86程序集中更改数组的值(嵌入在C ++中)

时间:2010-04-15 23:24:10

标签: c++ assembly embedded x86

我第一次搞乱汇编,似乎无法改变数组的索引值。这是我正在研究的方法

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

这符合,但它没有改变阵列......

3 个答案:

答案 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需要被视为指针):