
컴퓨터 시스템 : CSAPP 3장 정리 - 3.7 프로시저 Part.1
🌟 3.7장: 프로시저란 무엇인가?프로시저는 컴퓨터 프로그램에서 어떤 일을 "묶어서" 해주는 작은 기계 같은 것이다. 예를 들어, "사과 3개를 깎는 방법"을 한 번에 설명할 수 있으면, 그걸 다른 날에도 똑같이 쓸 수 있을 것이다. 그게 바로 프로시저다.💡 왜 좋은가?여러 번 같은 일을 하지 않도록 함.복잡한 내용을 숨기고, "무엇을 하는지"만 쉽게 보여줄 수 있음.예시로, 엄마가 "아침에 학교 갈 준비 해!"라고 할 때, 학교 갈 준비 안에는세수하기옷 갈아입기가방 챙기기밥 먹기등이 포함되어 있을 것인데 이렇게 많은 일을 하나의 명령으로 묶은 게 바로 프로시저다.프로시저는 소프트웨어에서 핵심적인 추상화(abstraction) 개념이다. 특정 기능을 수행하는 코드를 인수들과 함께 하나의 단위로 묶어놓..
- 크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
- · 2025. 4. 6.
컴퓨터 시스템 : CSAPP 3장 정리 - 3.6 장 제어문 Part.2
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장 프로그램의 기계수준 표현
- · 2025. 4. 5.
컴퓨터 시스템 : CSAPP 3장 정리 - 3.6 장 제어문 Part.1
📘 3장 6절 도입부: "제어(컨트롤)"우리가 컴퓨터한테 “이거 해!” 하고 명령을 내릴 때, 컴퓨터는 순서대로 차례차례 그 명령들을 따라 한다. 그런데 어떤 때는 "만약 이 조건이 맞으면 이걸 하고, 아니면 저걸 해!"라고 조건을 걸 수도 있다. 마치 게임에서 “보스를 이기면 다음 스테이지로 가고, 아니면 다시 도전하기” 같은 것이다.이렇게 "조건에 따라 행동을 다르게 하기"를 제어 흐름(control flow)이라고 한다. 그리고 컴퓨터는 점프(jump)라는 특별한 명령을 써서 이 흐름을 바꾼다. “여기서 저기로 점프!”라고 말이다.🧠 3.6.1절 - 조건 코드 (Condition Codes): 컴퓨터가 생각하는 방법컴퓨터는 계산을 한 다음, 그 결과에 대해서 “이건 0인가?”, “음수인가?”, ..
- 크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
- · 2025. 4. 5.
컴퓨터 시스템 : CSAPP 3장 정리 - 3.5 장 산술 및 논리 연산
📘 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장 프로그램의 기계수준 표현
- · 2025. 4. 5.
컴퓨터 시스템 : CSAPP 3장 정리 - 3.4 장 정보 접근하기 Part.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장 프로그램의 기계수준 표현
- · 2025. 4. 5.
컴퓨터 시스템 : CSAPP 3장 정리 - 3.4 장 정보 접근하기 Part.2
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장 프로그램의 기계수준 표현
- · 2025. 4. 5.