컴퓨터 시스템 : CSAPP 3장 정리 - 3.6 장 제어문 Part.2
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
3.6.5 - 조건부 분기를 조건 제어로 구현하기 (Implementing Conditional Branches with Conditional Control)🎯 조건부 분기를 조건 제어로 구현한다는 건?우리 눈에 보이는 C 코드에서는 if, else 같은 조건문이 있다. 컴퓨터는 이걸 어셈블리 코드에서 점프(jump) 명령어를 써서 구현한다.👨‍🏫 예시 C 코드long absdiff_se(long x, long y) { if (x 여기서 lt_cnt랑 ge_cnt는 "x가 y보다 작을 때"와 "크거나 같을 때"를 센다는 의미다.🧱 이걸 어셈블리로 바꾸면?컴파일러는 이렇게 바꾼다.cmpq %rsi, %rdi ; x = y면 .L2로 점프addq $1, lt_cnt(%rip); lt_c..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.6 장 제어문 Part.1
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
📘 3장 6절 도입부: "제어(컨트롤)"우리가 컴퓨터한테 “이거 해!” 하고 명령을 내릴 때, 컴퓨터는 순서대로 차례차례 그 명령들을 따라 한다. 그런데 어떤 때는 "만약 이 조건이 맞으면 이걸 하고, 아니면 저걸 해!"라고 조건을 걸 수도 있다. 마치 게임에서 “보스를 이기면 다음 스테이지로 가고, 아니면 다시 도전하기” 같은 것이다.이렇게 "조건에 따라 행동을 다르게 하기"를 제어 흐름(control flow)이라고 한다. 그리고 컴퓨터는 점프(jump)라는 특별한 명령을 써서 이 흐름을 바꾼다. “여기서 저기로 점프!”라고 말이다.🧠 3.6.1절 - 조건 코드 (Condition Codes): 컴퓨터가 생각하는 방법컴퓨터는 계산을 한 다음, 그 결과에 대해서 “이건 0인가?”, “음수인가?”, ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.5 장 산술 및 논리 연산
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
📘 3.5장 도입: 산술 및 논리 연산🎯 이 장에서 무엇을 배우는가?이 장에서는 컴퓨터가 덧셈, 뺄셈, 곱셈 같은 산술 연산이나AND, OR, NOT 같은 논리 연산을 어떻게 수행하는지를 배운다.🧠 왜 중요한가?우리가 프로그램에서 a + b, x * 2, if (x > y) 같은 걸 사용한다. 컴퓨터는 이걸 아주 빠르게 계산하기 위해 레지스터, 비트 연산, 이진수 덧셈기 같은 도구를 사용한다. 이걸 어셈블리어에서 어떻게 처리하는지를 보면 컴퓨터가 똑똑하게 일하는 방식을 이해할 수 있다.📌 3.5.1 Load Effective Address (LEA, 유효 주소 적재)🤔 LEA란?leaq 명령어는 주소를 계산하지만, 메모리에서 값을 읽지는 않는다💡 예: leaq 7(%rdx, %rdx, 4), ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.4 장 정보 접근하기 Part.3
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
3.4.3 "데이터 이동 예제(Data Movement Example)"🎯 이 절의 핵심메모리에서 값을 읽고 쓰는 방식을 실제 C 코드와 어셈블리 코드 예제를 통해 배워본다.📘 C 코드 예시long exchange(long *xp, long y) { long x = *xp; *xp = y; return x;}💡 무슨 뜻인가?xp는 숫자가 들어 있는 상자의 주소이다.y는 바꿔치기할 새 숫자*xp = y: xp가 가리키는 곳의 값을 y로 바꿔준다.return x: 바꾸기 전에 있던 값을 결과로 돌려준다.마치 “친구 상자에 있는 숫자를 내가 보고, 그 자리에 새 숫자를 넣고, 원래 있던 숫자를 기억해 두는 것” 같다.🔧 어셈블리 코드exchange: movq (%rdi), %rax..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.4 장 정보 접근하기 Part.2
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
3.4.1 "오퍼랜드 지정자(Operand Specifiers)"🧠 오퍼랜드란?오퍼랜드(Operand)는 명령어에서 사용되는 값예를 들어, 계산기에서 3 + 5라면+는 연산자 (operator),3과 5는 오퍼랜드어셈블리에서도 똑같다mov %rax, %rbx여기서 %rax와 %rbx는 오퍼랜드야.→ “rax에 있는 값을 rbx로 복사해 줘!”🔧 오퍼랜드의 종류컴퓨터는 다양한 종류의 값을 계산에 쓸 수 있어! 대표적으로 3가지이다:종류예시설명즉시 값 (Immediate)$10, $0x20그냥 숫자 자체!레지스터 (Register)%rax, %rbx빠른 기억상자메모리 (Memory)(%rax), 8(%rbx)주소를 따라가서 값을 가져와요🧮 메모리 주소 지정 (주소 계산 방법들)컴퓨터는 주소를 숫자로 계..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.4 장 정보 접근하기 Part.1
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
3.4장 "정보 접근하기 (Accessing Information)" 부분 전체를 살펴보겠다. 이 장은 컴퓨터가 값(정보)을 어디서, 어떻게 꺼내 쓰고 저장하는지 알려주는 아주 중요한 부분이다 😊🎯 3.4장 핵심 주제:컴퓨터가 값을 꺼내고 저장하는 방법을 배운다.🧠 왜 이게 중요할까?컴퓨터는 모든 걸 메모리에 저장하고 꺼내서 사용한다.어셈블리어에서는 "정보를 어디서 꺼내서, 어디에 놓을지"를 직접 알려줘야 한다📦 1. 컴퓨터에는 저장 공간이 3가지가 있다.종류예설명레지스터%rax, %rbx빠른 임시 상자!메모리(%rax)느리지만 큰 저장소즉시값$10, $0x40그냥 숫자 자체🧩 2. 레지스터란?레지스터는 컴퓨터 안에 있는 아주 빠른 기억 상자다.예를 들어:mov $10, %rax→ rax라는 상..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.2장 프로그램의 인코딩 Part. 2
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🧪 3.2.2 Code Examples — 코드 예제💡 C 코드로 함수 만들기먼저 아래와 같은 C 코드를 가정해 보자. 파일 이름은 mstore.c라고 한다.long mult2(long, long);void multstore(long x, long y, long *dest) { long t = mult2(x, y); *dest = t;}이 함수는 x와 y를 mult2 함수에 넘겨서 곱한 결과를 dest가 가리키는 곳에 저장한다.🛠️ 어셈블리 코드로 보기이 C 코드를 어셈블리로 바꾸려면 이렇게 명령어를 입력한다:gcc -Og -S mstore.cmultstore: pushq %rbx ; %rbx 저장 (함수 호출 시 보존해야 함) movq %rdx, %rbx ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.2장 프로그램의 인코딩 Part. 1
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🧠 핵심 질문: 우리가 만든 프로그램은 컴퓨터에게 어떻게 전달될까?우리가 C 같은 언어로 프로그램을 짜면, 그 코드는 컴퓨터가 직접 이해할 수 없다. 컴퓨터는 오직 기계어라는 아주 특별한 형태의 언어만 이해한다. 그래서 우리가 만든 코드는 컴퓨터가 이해할 수 있는 모양으로 인코딩(Encoding) 되어야 한다.이 인코딩은 기계 수준 코드(Machine-Level Code)라고 부르며, 그 과정을 거치면 컴퓨터가 그 프로그램을 메모리에 올리고, 실행할 수 있게 된다.🏗️ 컴퓨터가 프로그램을 실행할 준비를 하는 과정컴퓨터는 다음과 같은 과정으로 우리가 만든 코드를 처리한다:컴파일러가 C 코드 같은 고급 언어를 받아서 어셈블리 코드라는 저수준 언어로 바꿔준다.어셈블러가 이 어셈블리 코드를 읽어서 기계가 이..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.1장 역사적 배경
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
이 부분은 우리가 지금 사용하는 컴퓨터가 어떻게 발전해왔는지를 이야기하는 “컴퓨터 역사 이야기”라고 생각하면 된다. 🧠 쉬운 설명으로 각 CPU 살펴보기🧱 8086: 아주 기본적인 벽돌 컴퓨터8086 (1978년)→ 첫 번째 16비트 마이크로프로세서. 계산도 느리고 메모리도 작았다.→ IBM 컴퓨터에 들어가서 MS-DOS와 함께 사용되었다.계산은 느리고 단순함16비트 숫자만 다룸 (0~65,535까지만 가능)요즘 계산기보다 느릴 수 있다.🚪 80286: 문이 더 생긴 컴퓨터80286 (1982년)→ 더 많은 주소를 다룰 수 있게 되었으며. 윈도우가 돌아가던 초기 PC에 들어갔다.주소 공간을 확장했으며. 더 많은 데이터를 기억 가능했다."보호 모드" 덕분에 프로그램 충돌 방지 가능 (안전한 방)🛣️..