검색 여닫기
검색
메뉴 여닫기
555
262
4
6.2천
noriwiki
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
파일 올리기
환경 설정 메뉴 여닫기
notifications
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
user-interface-preferences
한국어
개인 도구
로그인
Assembly 문서 원본 보기
noriwiki
문서 공유하기
다른 명령
←
Assembly
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[컴퓨터 시스템]] ==개요== C 프로그램을 작성하고 컴파일하면 해당 코드는 assembly code로 변환된다.(이렇게 변환된 코드는 나중에 machine code로 다시 변환된다.) Assembly는 컴퓨터가 이해할 수 있는 code의 형태이다. 즉, Assembly를 공부한다는 것은 컴퓨터가 내부적으로 어떻게 동작하는지를 공부한다는 것이다. ==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이 생성된다. # C source code: p1.c, p2.c라는 text 형태로 존재하는 c code이다. ==각주== [[분류:컴퓨터 시스템]]
Assembly
문서로 돌아갑니다.