반응형

movq 3

05. movq와 leaq의 address 계산 방식

movq의 주소 지정 방식의 가장 일반적인 형식과 그에 따른 메모리 계산식은 다음과 같다. D(Rb, Ri, S), MEM[Reg[Rb] + S*Reg[Ri] + D] D: 일정 배수. 1, 2, 4 byte중 하나. 임의의 데이터 구조에 대해 임의의 offset을 정해주는 용도. Rb: 베이스 레지스터. %rax를 포함한 16개의 레지스터 중 하나. 명시되지 않으면 0으로, hw가 작동할 때 D, Ri, S가 무슨 값을 갖던 간에 신경쓰지 않는다. 메모리의 base 주소를 알려주는 용도. Ri: 인덱스 레지스터. %rsp를 제외한 모든 레지스터. 명시되지 않으면 0. S: scale, size를 의미. 어셈블리어를 지원하는 정수들. 1, 2, 4, 8 중 하나. 명시되지 않으면 1. 아래는 위 기본 형..

04. Register - movq source, dest

x86-64 bit 컴퓨터의 CPU에는 아래 16개의 레지스터가 저장되어 있다. 8byte 4byte 1byte %rax %r8 %eax %r8d %al %r8b %rbx %r9 %ebx %r9d %bl %r9b %rcx %r10 %ecx %r10d %cl %r10b %rdx %r11 %edx %r11d %dl %r11b %rsi %r12 %esi %r12d %sil %r12b %rdi %r13 %edi %r13d %dil %r13b %rsp %r14 %esp %r14d %spl %r14b %rbp %r15 %ebp %r15d %bpl %r15b 기본적으로 64bit이며, 어셈블리의 특징인 '모든 데이터 타입은 정수형 1, 2, 4, 8 byte 이다'를 만족하기 위해 각각의 레지스터들을 1, 2, 4b..

02. 시스템의 컴파일 과정

적정한 크기의 소스코드를 컴파일하면 수 초 안에 결과물을 볼 수 있다. 그 수 초 안에는 어떤 과정들이 담겨있는 걸까? 총 4단계로 이뤄지며 각 단계에서 산출한 파일이 순차 처리된다. 가상의 파일 hello.c가 있다고 가정해보자. 1단계, 전처리(Preprocessing) text형식의 c언어 파일(hello.c)를 받아서 modified source program(hello.i)으로 변환한다. 2단계, C언어로 어셈블리 코드 생성(Compilation) text형식의 modifed source program(hello.i)를 assembly code(hello.s)로 변환한다. 3단계, 기계어로 object파일 생성(Assembly) text형식의 assembly code(hello.s)를 reloc..

반응형