어셈블리어 masm질문입니다 왜 저장값이 바뀔까요

godzilla35의 이미지

예를들어
A배열에에 1h,2h,3h가 저장되잇다고 하고 A[1]에는 2h가 들어잇겠죠

근데
mov eax,0
mov esi,1
mov eax,A[1]

이러면 eax에는 2h가 저장되잇어야하는데 왜 이상한 값들이 붙어잇을까요

예를들어 09755402h이런식으로 말이죠

도와주세용 ㅠ
폰이라 좀 이상합니다

godzilla35의 이미지

위에서 A[eax]입니다

chanik의 이미지

A배열을 아래와 같이 정의하셨다면, 메모리에 아래와 같이 기록될 것입니다.

  A dd 01h,02h,03h    ; 01h,00,00,00,02h,00,00,00,03h,00,00,00,??,??,...

배열의 두 번째 정수를 읽어들이려면 A[1]이 아닌 A[4]라고 지정해야 합니다.
A[1]은 배열의 다음멤버가 아닌 A+1번지의 멤버를 가리킵니다.
리틀엔디안인 x86에서는 아래와 같이 처리되겠죠.

  mov eax,A[1]        ; -> 00,00,00,02h -> 02000000h == 33554432
  mov eax,A[4]        ; -> 02h,00,00,00 -> 00000002h == 2

esi를 배열인덱스로 써서 지정하려면 아래와 같은 식으로 하면 될 것입니다.

  mov esi,1
  mov eax,A[esi*4]