어셈블리의 데이터 형식
- 1, 2, 4, 8 바이트의 정수형 데이터
- 데이터 값, 주소
- 4, 8, 10 바이트의 부동소수점 데이터
- 배열이나 구조체 같은 형태 없이 메모리 상에 연속으로 할당됨
어셈블리의 연산
- 레지스터 or 메모리 데이터에 대한 산술 기능 수행
- 메모리와 레지스터 사이 데이터 전송
- 전송 통제: 프로시저로 점프, 조건부 분기
x86-64의 정수 레지스터 (64비트 길이)
- %rax
- %rbx
- %rcx
- %rdx
- %rdi
- %rsp: 특수 용도 레지스터라 보통 계산에 사용 안함
- %rbp
- %r8, %r9 ... %15
- 8바이트이지만, 하위 4바이트, 2바이트에 참조 가능 (예전 프로그램과 호환성)
어셈블리의 데이터 이동
- 피연산자 형식 (AT&T문법)
- 상수 정수 데이터: 숫자 앞에 $를 붙임
- 예시) $0x3A65, $-533
- 레지스터: 16개의 정수 레지스터 중 하나 (1, 2, 4 바이트로 인코딩)
- 예시) %rax, %rcx (레지스터의 내용)
- 메모리: 레지스터에 주어진 주소의 메모리의 8개의 연속 바이트. 괄호로 감싸기
- 예시) (%rax) (주소가 레지스터값인 변수의 값)
- MOV 연산: MOV A B: A를 B로 옮겨라 (복사해서 넣어라): A에 있는 값은 그대로 남아있고 B에 복사됨.
- AT&T문법에서는 mov뒤에 명시적으로 참조할 데이터 크기 적음: movb(move byte), movw(move word), movq(move quad word(64비트)) 등
- x86-64에서는 메모리에서 메모리로 바로 옮길 수 없게 설정해놓음.
- 예시) movq 0x6444 0x3232 (x)
- movq 0x6444 %rax -> movq %rax 0x3232 (o)
- 예시) movq $0x40 %rax: rax 레지스터의 값을 0x40으로 변경하기
- 예시) movq $0x40 (%rax): rax가 가리키는 메모리 주소에 있는 값을 0x40으로 바꿔라
- 약간 x = 0x40 과 포인터 역참조 *p = 0x40같은 느낌이다
- Intel 문법에서는 mov B A가 A를 B로 옮겨라 이고, AT&T 문법에서는 movq A B가 A를 B로 옮겨라이다. (어순 다름)
728x90
반응형
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조](12)[어셈블리어 3] (0) | 2025.01.22 |
---|---|
[컴퓨터 구조](11)[어셈블리어 2] (0) | 2025.01.21 |
[컴퓨터 구조](9)[운영체제의 추상화] (0) | 2025.01.17 |
[컴퓨터 구조](8)[하드웨어의 동작 + 암달의 법칙] (0) | 2025.01.16 |
[컴퓨터 구조](7)[컴퓨터 구조 훑어보기] (3) | 2025.01.15 |