2010-04-15 39 views
3

我第一次搞乱程序集,并且似乎无法更改数组的索引值。下面是我对更改x86汇编中的数组值(嵌入在C++中)

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

奇怪的是类似于另一个问题(http://stackoverflow.com/questions/2628018/using-an-array-in-embedded-x86 -assembly) - 这是课堂作业吗? – 2010-04-15 23:33:58

+0

可能的重复http://stackoverflow.com/questions/2643341/sort-an-array-via-x86-assembly-embedded-in-c-possible – 2010-04-15 23:38:28

+0

@迈克尔伯尔:奇怪的是,这两个问题提问者有相同的头像。相同的IP地址? – 2010-04-22 00:16:21

回答

2

arrayOfLetters值相当于一个指针。所以,你的汇编代码可能需要:

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

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

0

这太问题涉及读取阵列的元件,而不是修改它们,但我怀疑底层解释将在很大程度上是相同的(即arrayOfLetters需要被视为一个指针):

3

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

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

或者更一般:

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