○Assembly - Array

 ▷T A[L]: T 타입의 길이가 L인 배열 

 ▷L*sizeof(T) 바이트만큼 연속적인 공간 차지

 ▷A - indentifier: 배열의 가장 첫 원소를 가리키는 포인터

 

 ▶Accessing

  ▷A[i] = *(A+i)

  ▷주소: A + i*K (K: 요소의 바이트 크기)

  ▷%rdi = A, %rsi = i, 요소 크기 = K일때 (%rdi, %rsi, K)

 

 ▶Multidimensional Arrays (다차원 배열)

  ▷T A[R][C]: T타입의 원소가 R행, C열을 가지는 배열.

  ▷중첩(Nested)을 활용

  ▷R*C*sizeof(T) 바이트만큼 연속적인 공간 차지.

  ▷n차원 배열: n-1차원 배열을 원소로 하는 배열

 

  ▶다차원 배열 Accessing

   ▷원소의 크기가 K이고, 행의 크기가 C일때

   ▷A[i][j] = *(*(A+i)+j) = *((int*)A+i*C+j) = Mem[A+i*(C*K)+j*K]

   ▷주소: A + (i*C + j) * K

 

 ▶Multi-Level Array (배열을 가리키는 포인터의 배열)

  ▷int* A[L] = {a, b, c};

  ▷포인터 배열의 원소가 다른 배열을 가리킴.

  ▷접근: A[i][j] = *(*(A+i)+j) = Mem[ Mem[A[8*i] + K*j ]

  ▷여러 번의 메모리 접근 필요.

 

 ※포인터, 변수 비교

  ▶배열과 포인터

   ▷A1: 길이가 3인 int형 배열

   ▷A2: int를 가리키는 포인터

  ▶포인터 배열, 배열을 가리키는 포인터

   ▷A1: 길이가 3인 int형 배열

   ▷A2: 길이가 3인 int 포인터형 배열 (각각 가리키는 int는 할당되지 않음)

   ▷A3: 길이가 3인 int형 배열을 가리키는 포인터 (int 배열은 할당되지 않음)

'컴퓨터 지식 > 시스템' 카테고리의 다른 글

Assembly - Floating Point  (0) 2020.11.03
Assembly - Structure  (0) 2020.11.03
Assembly - Procedure  (0) 2020.10.28
Assembly-Control  (0) 2020.10.13
Assembly  (0) 2020.10.07

+ Recent posts