2017-05-17 13 views
-3

eax에 char 배열의 주소가있는 경우 0 (% eax)와 (% eax)의 차이점은 무엇입니까? 아니면 둘 다 같습니까? 둘 다 배열의 첫 번째 요소를 참조합니까?0 (% eax)과 (% eax)의 차이점은 무엇입니까?

+5

조립 한 후 분해 한 경우 차이가 있습니까? –

+0

'0 (% eax)'의 의미에 대해 생각해보십시오. 그것은'eax'의 값에서 0의 오프셋이 있음을 의미합니다. 자,'(% eax)는 무엇을 의미합니까? 'eax'의 값을 의미합니다. 따라서 'x == x + 0' 일 때, 아니요, 분명히 차이가 없습니다. –

+0

역 어셈블러 출력 (어셈블리 소스 코드와 반대)에서'0 (% eax)'와 같은 것을 보는다면 0은 아마도 오브젝트 파일이 링크 될 때 다른 값으로 바꿀 재배치의 대상 일 것입니다. –

답변

0

이들은 동일합니다.

eax가 배열의 첫 번째 요소의 주소를 가리 키도록 올바르게 설정 했으므로 movb를 사용하여 배열의 데이터 바이트를 넣을 수 있습니다.

+0

'MOVB'는 여기서 무엇을해야합니까? 단지 무작위적인 예일 경우, 질문에 나타난 것처럼'MOVB'와'EAX'를 사용할 수 없기 때문에 특히 혼란 스럽습니다. BYTE 크기의 레지스터가 필요합니다. 아마도 더 좋은 예가'MOVZBL'이었을 것입니까? 또는 DWORD 크기의 값을 저장하는'MOVL '. –

+0

질문은 eax의 char 배열에 대해 질문했습니다. 배열의 요소에 액세스하려면 movb가 필요합니다. ie : movb $ 32, 0 (% eax) – lostbard

1

정확히 동일합니다. 당신은이 개 지침을 조립하고 분해에 의해 쉽게 증명할 수있다 : 그들은 바이트 정확히 동일한 인코딩을

movl (%eax),%edx 
movl 0(%eax),%edx 
Disassembly of section .text: 

0000000000000000 <.text>: 
    0: 67 8b 10    mov (%eax),%edx 
    3: 67 8b 10    mov (%eax),%edx 

공지있다.