【问题标题】:Change an array's value in x86 assembly (embedded in C++)在 x86 程序集中更改数组的值(嵌入在 C++ 中)
【发布时间】:2010-04-15 23:24:09
【问题描述】:

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

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

这符合,但它没有改变数组...

【问题讨论】:

标签: c++ assembly embedded x86


【解决方案1】:

当你有一个参数或变量是一个数组时,它实际上是一个指向数组第一个元素的指针。您必须尊重该指针才能更改它指向的数据。例如:

__asm
{
mov eax, arrayOfLetter
mov [eax], 0x58
}

或者,更笼统地说:

__asm
{
mov eax, arrayOfLetter
mov [eax+index], 0x58
}

【讨论】:

    【解决方案2】:

    arrayOfLetters 值相当于一个指针。因此,您的汇编代码可能需要:

    mov temp, 'X' 
    mov al, temp 
    mov edx, arrayOfLetters
    mov [edx], al 
    

    在上面的代码中,edx 加载了arrayOfLetters 的地址。然后最后一条指令将al字节存储到edx指向的地址中。

    【讨论】:

      【解决方案3】:

      这个 SO 问题涉及读取数组的元素而不是修改它们,但我怀疑基本解释将大致相同(即需要将 arrayOfLetters 视为指针):

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-08
        • 2015-06-15
        • 2012-10-25
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多