728x90
반응형
#include<stdio.h>
int main(){
printf("Hello World");
return 0;
}
고급 언어(C, Python 등등) => 저급 언어
저급 언어
- 기계어: 0과 1로 이루어진 명령어
- 어셈블리어: 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역
- 0101 0101 >>>> push rbp
- 0101 1101 >>>> pop rbp
- 1100 0011 >>>> ret
고급 언어를 저급 언어로 변환하는 방식 (컴파일 / 인터프리트)
- 컴파일 언어
- 소스코드 >>> 컴파일러 >>> 목적 코드
- (test.c) => 전처리기 (test.i) >>> 컴파일러 (test.s) >>>> 어셈블러 (test.o) >>>> 링커 => (test.exe)
- 전처리 과정: #include, #define 등 컴파일하기 전에 처리할 작업 처리
- 컴파일러: 소스코드를 어셈블리어로 변환
- 어셈블러: 어셈블리어를 기계어로 변환
- 인프린터 언어: 한 줄씩 실행하는 언어
- 소스 코드 전체가 저급 언어로 변환되기까지 기다릴 필요 없음
명령어의 구조: 무엇을 대상으로, 무엇을 수행하라
연산코드 | 오퍼랜드 |
연산코드: 수행할 연산
오퍼랜드: 연산에 사용될 데이터, 연산에 사용될 데이터가 저장된 위치
유효주소: 연산에 사용할 데이터가 저장된 위치
명령어 주소 지정 방식: 연산에 사용할 데이터가 저장된 위치를 찾는 방법
- 즉시 주소 지정 방삭: 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시 (연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름)
- 직접 주소 지정 방식: 오퍼랜드 필드에 유효 주소 직접적으로 명시 (유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦)
- 간접 주소 지정 방식: 오퍼랜드 필드에 유효 주소의 주소를 명시 (느림)
- 레지스터 주소 지정 방식: 연산에 사용할 데이터가 저장된 레지스터 명시 (메모리에 접근하는 것 보다 레지스터에 접근하는 것이 빠름)
- 레지스터 간접 주소 지정 방식: 연산에 사용할 데이터를 메모리에 저장 (그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시)
연산코드
- 데이터 전송
- move: 데이터를 옮겨라
- store: 메모리에 저장하라
- load (fetch): 메모리에서 CPU로 데이터를 가져와라
- push: 스택에 데이터 저장
- pop: 스택에서 값 가져오기
- 산술 / 논리 연산
- add / subtract / multiply / divide
- increment / decrement: 오퍼랜드에 1을 더하라 / 빼라
- and / of / not
- compare: true / false
- 제어 흐름 변경
- jump: 특정 주소로 옮겨라
- conditional jump: 조건에 맞을 때 옮겨라
- halt: 프로그램을 멈춰라
- call: 되돌아올 주소를 저장하고 특정 주소로 실행을 옮겨라
- return: call을 호출할 때 저장했던 주소로 가라
- 입출력 제어
728x90
반응형
'전공 > 컴퓨터 구조' 카테고리의 다른 글
RAM의 특성과 종류 (0) | 2023.07.29 |
---|---|
CPU) 설계, 병렬 처리, CISC & RISC (0) | 2023.07.29 |
CPU) ALU와 제어장치, 레지스터, 명령어 사이클과 인터럽트 (0) | 2023.07.28 |
데이터) 0과 1로 숫자 / 문자를 표현하는 방법 (1) | 2023.07.28 |
컴퓨터 구조 큰 그림 (0) | 2023.07.28 |