일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- html 기본문서
- 코딩 자율학습 html + css + 자바스크립트
- html 실무
- Git
- do it! html+css+자바스크립트 웹 표준의 정석
- propschildren
- react
- 혼자 공부하는 컴퓨터구조+운영체제
- cpu 성능 향상 기법
- https://api.jquery.com/
- JavaScript
- TS
- JS
- 이벤트
- css필수 속성
- 자바스크립트
- Do it
- html 필수태그
- css박스 모델
- CPU
- html 문서작성
- 메모리와 캐시 메모리
- 코딩
- 코딩 자율학습
- CSS
- HTML
- 코딩 자율학습 html + css + 자바스크립트]
- 코딩자율학습
- do it! 한권으로 끝내는 웹 기본 교과서 html+css+자바스크립트 웹 표준의 정석
- css배경
- Today
- Total
게으른 나에게
[혼자 공부하는 컴퓨터구조+운영체제] "chapter3. 명령어" 본문
3-1 소스 코드와 명령어
명령어는 컴퓨터를 실질적으로 작동시키는 매우 중요한 정보!
모든 소스 코드는 컴퓨터 내부에서 명령어로 변환.
고급 언어와 저급 언어
고급언어: 사람이 이해하고 작성하기 쉽게 만들어진 언어. 대부분의 프로그래밍 언어.
저급언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어.
고급언어로 작성된 소스 코드가 실행되려면 반드시 저급언어, 명령어로 변환되어야 함.
저급언어
1. 기계어: 0과 1의 명령어 비트로 이루어진 명령어 모음.
2. 어셈블리어: 0과 1로 표현된 명령어(기계어)를 읽기 편한 형태로 번역한 언어.
-하드웨어와 밀접하게 맞닿아 있는 프로그램을 개발하는 임베디드 개발자, 게임 개발자, 정보 보안 분야 등의 개발자 많이 이용.
-어셈블리어를 읽으면 컴퓨터가 프로그램을 어떤 과정으로 실행하는지, 프로그램이 어떤 절차로 작동하는지를 가장 근본적인 단계에서 하나하나 추적하고 관찰할 수 있음.
고급언어
1. 컴파일 언어: 컴파일러에 의해 소스코드 전체가 저급언어로 변환되어 실행되는 고급언어. (c언어)
-컴파일: 코드 전체가 저급언어로 변환되는 과정.
-컴파일러: 컴파일을 수행해 주는 도구. 소스 코드에 문법적인 오류가 있는지, 실행가능한 코드인지, 실행하는 데 불필요한 코드는 없는지 등을 따지며 소스 코드를 처음부터 끝까지 저급언어로 컴파일. 컴파일이 성공적으로 수행되면 저급언어로 변환.
-목적코드: 컴파일러를 통해 저급언어로 변환된 코드.
2. 인터프리터 언어: 인터프리터에 의해 소스 코드가 한줄씩 실행되는 고급언어.(python)
-인터프리터: 소스 코드를 한 줄씩 저급언어로 변환하여 실행해주는 도구.
고급언어 종류 | 컴파일 언어 | 인터프리터 언어 |
차이점 | 개발자가 작성한 소스 코드 전체를 쭉 훑어보며 소스 코드에 소스 코드를 처음부터 끝까지 저급언어로 컴파일. | 소스 코드를 한 줄씩 한 줄씩 차례로 실행. |
컴파일러가 소스 코드 내에서 오류를 하나라도 발견하면 해당 소스 코드는 컴파일 실패. | 소스 코드를 한 줄씩 실행하기 때문에 소스 코드 N번째 줄에 문법 오류가 있더라도 N-1번째 줄까지는 올바르게 수행. |
목적파일 vs 실행파일
-목적파일: 목적 코드로 이루어진 파일
-실행파일: 실행 코드로 이루어진 파일
-링킹: 목적코드가 실행파일이 되기 위해서 거치는 연결 작업.
3-2 명령어의 구조
연산코드와 오퍼랜드
명령어는 '무엇을 대상으로, 어떤 작동을 수행하라'는 구조로 되어 있음.
명령어: 연산코드와 오퍼랜드로 구성
연산코드 (=연산자): 색 배경 필드값, '명령어가 수행할 연산'
오퍼랜드 (= 피연산자): 흰색 배경 필드 값, '연산에 사용할 데이터', '연산에 사용할 데이터가 저장된 위치'
연산코드 필드: 색칠된 부분, 연산코드가 담기는 영역.
오퍼랜드 필드 (=주소필드): 색칠되지 않은 부분, 오퍼랜드가 담기는 영역. 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있음.
연산코드: 붉은 글씨
검은글씨: 오퍼랜드
오퍼랜드
오퍼랜드는 명령어 안에 하나도 없을 수 있고, 한개, 두개, 세개 등 있을 수 있음.
0-주소 명령어: 오퍼랜드가 하나도 없는 명령어.
1-주소 명령어: 오퍼랜드가 하나인 명령어.
2-주소 명령어: 오퍼랜드가 두개인 명령어.
연산코드
연산코드 유형:
1. 데이터 전송
2. 산술/논리 연산
3. 제어 흐름 변경
4. 입출력 제어
명령어의 종류와 생김새는 CPU마다 다르기 때문에 연산 코드의 종류와 생김새 또한 다름.
유효주소: 연산 코드에 사용할 데이터가 저장된 위치, 연산의 대상이 되는 데이터가 저장된 위치.
주소 지정 방식
명령어 길이 때문에 오퍼랜드 필드에 메모리나 레지스터의 주소를 담음.
오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법. 유효 주소를 찾는 방법.
현대 CPU의 다양한 주소 지정 방식.
1. 즉시 주소 지정 방식: 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시. 가장 간단한 형태의 주소 지정 방식. 연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름.
2. 직접 주소 지정 방식: 오퍼랜드 필드에 유효 주소(메모리 주소) 직접적으로 명시, 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦
3. 간접주소 지정 방식: 오퍼랜드 필드에 유효 주소의 주소를 명시, 앞선 주소 지정 방식들에 비해 속도가 느림
4. 레지스터 주소 지정 방식: 연산에 사용할 데이터가 저장된 (유효주소 = 레지스터 이름)레지스터 명시, 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름
5. 레지스터 간접 주소 지정 방식: 연산에 사용할 데이터를 메모리에 저장, 그 유효주소를 저장한 레지스터를 오퍼랜드 필드에 명시
스택과 큐
스택
-한쪽 끝이 막혀 있는 통과 같은 저장 공간.
-나중에 저장한 데이터를 가장 먼저 빼내는 데이터 관리 방식 (후입선출) (LIFO)
-POP: 스택에 새로운 데이터를 저장하는 명령어
-PUSH: 스택에 저장된 데이터를 꺼내는 명령어
큐
-양쪽이 뚫려 있는 통과 같은 저장공간
-가장 먼저 저장된 데이터부터 빼내는 데이터 관리 방식 (선입선출) (FIFO)
출처