익명 사용자
로그인하지 않음
계정 만들기
로그인
youngwiki
검색
Assembly 문서 원본 보기
youngwiki
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
원본 보기
역사
←
Assembly
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[컴퓨터 시스템]] ==개요== C 프로그램을 작성하고 컴파일하면 해당 코드는 assembly code로 변환된다.(이렇게 변환된 코드는 나중에 machine code로 다시 변환된다.) Assembly는 컴퓨터가 이해할 수 있는 code의 형태이다. 즉, Assembly를 공부한다는 것은 컴퓨터가 내부적으로 어떻게 동작하는지를 공부한다는 것이다. 이를 공부해야 하는 이유는 각각의 사람마다 알아야 하는 abstraction의 수준이 다르기 때문이다. 예를 들어 C 프로그래머는 C언어에 대해서만 알아도 된다. Compiler writer(Assembly programmer)는 또한 ISA<ref>CPU design이 반드시 따라야 하는 abstract한 설계 수준을 보여준다.</ref>에 대해서 알아야 한다. 이는 x86-64에서 어떤 종류의 instruction이 사용 가능하고, 해당 instruction들이 CPU에서 정확히 무엇을 하는지 알려준다. 마지막으로 CPU designer는 디지털 회로, logic gate와 같은 microarchitecture에 대해서도 알아야 한다. ==Inside Our Computer== CPU와 Main Memory는 프로그램을 구동하는 가장 핵심적인 두가지 요소이다. Assembly code는 이들의 실행을 직접적으로 제어한다. ===CPU work=== CPU는 다음과 같은 과정을 따라서 동작한다. [[파일:HowCPUWorks.png|테두리|프레임없음|450x450픽셀]] # CPU가 메모리로부터 machine instruction을 fetch한다. #* Program Counter(PC)는 해당 instruction을 fetch하기 위해서 사용되는 주소를 저장하는 register이다. #* 이때 메모리는 Code와 Data 모두를 저장하고 있다. # fetch된 instruction이 CPU에게 무엇을 해야할지를 알려준다. #* 예를 들면 두 register를 더하거나, register로부터 메모리로 데이터를 옮기거나 하는 등의 행동이 있다. #* Assembly instruction은 machine instruction과 1대1로 대응되며, 사람이 해석하기 편하도록 가독성이 좋아진 버전이다. # 해당 instruction의 execution 후에 PC는 자동적으로 next instruction에 대한 주소를 업데이트한다. #* 이때 jump와 같은 명령어는 PC가 특정한 address를 저장하도록 직접적으로 명령하기도 한다. #* 해당 작업을 수행한 수, CPU는 1부터 다시 작업을 반복한다. ===Architecture=== ISA와 microarchitecture라는 두가지 의미를 가진다. * Instruction set architecture(ISA): CPU design이 반드시 따라야 하는 abstract한 구체화 ** assembly code를 분석하거나 쓰기 위해서는 CPU의 특정 부분의 design을 반드시 알아야 한다.<ref>예를 들어 어떤 종류의 연산이 CPU에 의해 지원되는지, CPU에 반드시 존재하는 register의 이름들 등...</ref> ** IA32, x86-64가 ISA의 대표적인 예시들 중 하나이다. * Microarchitecture: hardware 수준에서 ISA가 어떤 방식으로 구현되는지에 대한 구체적인 방법을 의미한다. 하지만 현재 문서에는 주로 ISA의 의미를 가지는 architecture에 대해서 설명을 할것이다. ====Intel x86==== x86은 Intel에 의해 개발된 architecture 시리즈이다. 32bit에서 64bit로의 word 크기의 확장과 같이 수많은 진보가 있어왔으며, 얼마 전까지만 해도 laptop/desktop/server 시장을 쥐락펴락했다. 최근에는 AMD architecture에 의해서 시장에서의 선두를 빼았겼지만, 아직 많은 system들이 x86 system을 사용하므로, YOUNGWIKI의 서술은 기본적으로 x86 기준으로 한다. x86은 종종 두가지 의미로 사용되는데, 첫번째는 앞서 말한 architecture 시리즈이고, 다른 하나는 IA32라는 특정한 architecture를 말하는 것이다. 하지만 YOUNGWIKI에서는 x86 중에서도 x86-64 architecture에 초점을 두어 설명한다. ==From C source to Machine Code== <syntaxhighlight lang="shell"> gcc p1.c p2.c -0 p.bin </syntaxhighlight> 위 코드를 Linux shell에 입력한다면 아래와 같은 복잡한 과정을 거쳐 p.bin이라는 이름의 executable file이 생성된다. [[파일:CtoMachineCode.png|테두리|프레임없음|400x400픽셀]] # C source code: p1.c, p2.c라는 text 형태로 존재하는 c code이다. #* 프로그래머가 직접 프로그램하는 파일 형식이다. #* compile을 통해서 assembly code가 된다. # Assembly code: p1.s, p2.s라는 text 형태로 존재하는 assembly code이다. #* Machine code와 1대1로 대응되는 text 형식의 assembly로 작성된 code이다. #* Assmble을 통해서 object file이 된다. # Object file: p1.o, p2.라는 binary form으로 존재하는 object file이다. #* Linking을 통해서 executable file이 된다. # Executable file: 최종적으로 실행가능한 결과 파일이다. ==각주== [[분류:컴퓨터 시스템]]
Assembly
문서로 돌아갑니다.
둘러보기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록