1. 배열

배열의 각 값을 배열 요소(Element)라고 함

배열의 각 위치를 가리키는 숫자를 인덱스(Index)라고 함

ex) {A, B, C, D}

배열 요소 : A, B, C, D

C의 인덱스 : 3

section .data

a db 0x01, 0x02, 0x03, 0x04, 0x05 ; 5*1=5바이트
b times 5 dw 1 ; b={1,2,3,4,5};5*2=10바이트(워드)

2. 주소

배열의 각 배열 요소의 값을 알고싶으면 먼저 첫번째 요소의 어드레스를 알아낸다.

그리고 1바이트 씩 더해준다.

 

ex) 배열 a의 요소를 1에서 5까지 출력하기

main: mov rbp, rsp ; for correct debugging

mov rax, a
xor ecx, ecx

LABLE_LOOP:
PRINT_HEX 1, [a+ecx]
NEWLINE
inc ecx
cmp ecx, 5
jne LABLE_LOOP

xor rax, rax
ret

 

ex 2) 배열 b의 요소를 5개 출력

LABLE_LOOP_B: PRINT_HEX 2, [b+ecx*2] ;b는 리틀엔디안
NEWLINE
inc ecx
cmp ecx, 5
jne LABLE_LOOP_B

b = {0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00}

에서, ecx가 1씩 증가해버리면 (리틀엔디안에서)

0x00, 0x01 = 0x01 = 1 (Hex)

0x01, 0x00 = 0x0100 = 100 (Hex)

0x00, 0x01 = 0x01 = 1 (Hex)

0x01, 0x00 = 0x0100 = 100 (Hex)

0x00, 0x01 = 0x01 = 1 (Hex)

이므로, 2개씩 분석할 수 있도록 ecx에 2를 곱하여 더해주도록 한다.

'어셈블리' 카테고리의 다른 글

0-12. 스택 메모리(Stack)  (0) 2023.04.28
0-11. 함수(Function, 프로시저)  (0) 2023.04.28
0-9. 반복문(Loop)  (0) 2023.04.28
0-8. 분기문(If)  (0) 2023.04.28
0-7. 시프트 연산과 논리 연산  (0) 2023.04.28