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 |