CS/컴퓨터 구조

[컴퓨터 구조](16)[어셈블리어 7]

황올뱀 2025. 1. 28. 18:59

배열: 같은 자료형의 자료를 모은 자료구조
예) int A[2]; 이때 A = &A[0]으로 쓰일수도 있다.
-> 메모리에서 연속적으로 저장되어있음
예) int A[3]; -> 메모리에 4바이트 int형 자료가 3개 저장되어있음.
각각 자료 시작 주소 = A, A+4, A+8 이다. 총 배열의 크기 = 4*3 = 12바이트

 

어셈블리의 배열 처리
완전 메모리 어드레싱으로 처리
예) a = A[3]; 처리하기
    rsi에 int 배열 A의 시작주소가 들어 있을때
    movq $3, %rdi
    movq (%rsi, rdi, 4), %rax -> A+4*3에 있는 값 받아와 rax에 저장 -> rax에 A[3]저장

 

어셈블리의 다차원 배열
행 우선 방식으로 메모리에 저장 후 처리
예시) {{1,2,3},{4,5,6}}의 2x3 배열이 있으면, 메모리에는 1,2,3,4,5,6순서로 저장
-> 먼저 행을 계산하고 그 후 열을 계산한다
예) A가 int 2x3배열일때 A[1][2]; 처리하기
    rsi에 A의 시작 주소가 들어 있을때
    movq $1, %rdi -> rdi에 1 저장
    movq $2, %rax -> rax에 2 저장
    leaq (, %rdi, 3), %rdi -> 3*rdi =3
    leaq (%rsi, %rdi, 4), %rsi -> rsi = rsi+4*rdi = A시작주소 + 12
    movq (%rsi, %rax, 4), %rax -> rax = (rsi + 4*rax)에 있는 값 = (A시작주소 + 12 + 8)에 있는 값

 

어셈블리의 구조체

  • 구조체: 여러개의 자료형이 묶여있는 자료 구조 -> 각자료의 크기가 다를 수 있다.
  • 자료들이 2,4,8의 배수가 되게 배치 (만약 그렇지 않으면 자료 접근시 주소 계산 곤란) -> 중간에 패딩을 넣어 배수가 되게 배치함.
  • 단순히 패딩을 넣으면 공간을 많이 차지 -> 큰 자료를 먼저 넣어 최대한 공간 아끼기
728x90
반응형