
배열을 선언하는 방법은 여러가지가 있다.
여기서 사용한 방법은 두가지이다.
1. 값을 나열해서 적용
2. times를 이용하여 동일한 값을 배열에 전부 적용
a db 0x01, 0x02, 0x03, 0x04, 0x05 의 경우 값을 1~5까지 순서대로 넣은 배열을 생성한다. debug redbox에서 확인해보자
b times 5 dw 1 ; 는 1을 dw크기로 5개 갖는 배열을 생성한다. debug bluebox에서 보면 {0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0} 이렇게 만들어져서 나오는 것을 확인할 수 있다. 여기서 값이 0x1, 0x0 이런 순서로 만들어진 것은 앞서 배운 Little-endian 으로 적용됐기 때문이다. 즉, 실제 만들어진 값은 0x0001임을 알 수 있다.
우리는 지난 시간에 주소에서 값을 출력하는 방법을 배웠다. [] 대괄호를 씌우면 값이 나오는 것을 기억할 것이다.

하지만 출력해보면 가장 앞에 있는 값인 1만 출력되는 것을 알 수 있다. 우리는 배열에 있는 값들이 전부 주소+index로 이뤄져있는 것을 알고 있다. 그래서 아래와 같이 출력할 수 있다.

연습문제 : a 배열의 모든 데이터 출력해보기
mov eax, 0
LABEL_PRINT:
PRINT_HEX 1, [a+eax]
NEWLINE
inc eax
cmp eax, 5
jne LABEL_PRINT

연습문제 : b 배열의 모든 데이터 출력해보기
xor eax, eax
LABEL_PRINT_B:
PRINT_HEX 2, [b+eax]
NEWLINE
add eax, 2
cmp eax, 10
jne LABEL_PRINT_B

강의 답안 :
xor eax, eax
LABEL_PRINT_B:
PRINT_HEX 2, [b+eax*2]
NEWLINE
inc eax
cmp eax, 5
jne LABEL_PRINT_B
C와 python, JS 등에서 많이 사용하던 배열에 대한 내용이었다. 간단하게 배열을 선언하고 사용하는 방법에 대해서 알아봤는데, 문제는 배열의 크기가 변동되는 것이 어셈블리에서는 어떻게 동작하는지 아직 잘 모르겠다. 해당 부분에 대해서도 찾아봐야할 것 같다.