2010-04-15 2 views
3

저는 처음으로 어셈블리를 망설이고 있으며 배열의 인덱스 값을 변경할 수 없습니다. 여기에 내가(C++에 포함 된) 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 
을 시도

잘못된 피연산자 유형을

이것은 준수했지만 배열을 변경하지 않았습니다 ...

+0

(http://stackoverflow.com/questions/2628018/using-an-array-in-embedded-x86 - 어셈블리) -이 수업은 무엇입니까? –

+0

가능한 복제본 http://stackoverflow.com/questions/2643341/sort-an-array-via-x86-assembly-embedded-in-c-possible –

+0

@Michael Burr : 이상한 점은 두 질문자가 같은 질문을했습니다. 화신. 같은 IP 주소? –

답변

2

arrayOfLetters 값은 포인터와 같습니다. 그래서, 어셈블리 코드가해야 할 수 있습니다 :

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

을 위의 코드에서, edxarrayOfLetters의 주소로로드됩니다. 그런 다음 마지막 명령어는 edx이 가리키는 주소에 al 바이트를 저장합니다.

0

이 SO 배열의 요소를 읽는 대신 그들을 수정과 거래 질문,하지만 난 기본 설명이 거의 동일 (즉 arrayOfLetters 포인터로 취급 될 필요가 있음) 될 것이라고 생각 :

3

매개 변수가 있거나 배열 인 경우 실제로 배열의 첫 번째 요소를 가리키는 포인터입니다. 가리키는 데이터를 변경하려면 해당 포인터를 참조해야합니다.

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

또는 더 일반적으로 : 예를 들어

다른 질문에 이상하게도 비슷한
__asm 
{ 
mov eax, arrayOfLetter 
mov [eax+index], 0x58 
} 
관련 문제