티스토리 뷰

반응형

https://www.youtube.com/watch?v=B8TDaBp3UWo&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=8

 

초심으로 돌아가서 다시 정리하는 개념입니다.

이미 알고 있어 스킵하는 부분도 있으니, 직접 보시는 걸 추천드립니다.

 

고급 언어와 저급 언어

고급 언어는 개발자의 언어(C,python,java 등등)

저급 언어는 기계어와 어셈블리어

 

기계어를 사람이 읽기 편하게 어셈블리어로 변환

어셈블리어를 알아두면 좋은 개발을 할 수도 있다.

 

고급 언어를 저급 언어로 변환하는 방식은 컴파일 방식, 인터프리트 방식이 있다.

 

고급 언어로 작성된 소스 코드를 저급 언어의 목적 코드로 바꾸는 걸 컴파일이라고 한다.

컴파일방식은 컴파일러가 필요하다.

컴파일은 한 줄씩 실행하는 게 아니라 전부 다 훑어보고 오류가 있는지 없는지 살펴본다.

 

인터프리트 방식은 인터프리터에 의해 '한 줄씩' 실행

소스 코드 전체가 변환되기까지 기다릴 필요가 없다.

파이썬에서 오류가 발생되기 직전까지 출력이 나오는 이유.

 

명령어의 구조

명령은 무엇을 대상으로, 무엇을 수행하라는 명령어로 이루어져 있다.

 

더해라 / 100과 / 120을

빼라 / 메모리 32번지 안의 값과 / 메모리 33번지 안의 값을

 

수행할 연산 / 데이터 혹은 데이터가 저장된 위치

-> 연산 코드 + 오퍼랜드로 이루어져 있다.

 

오퍼랜드

오퍼랜드에는 데이터 자체 보다, 연산에 사용될 데이터가 저장된 위치가 더 자주 사용된다. 이를 주소 필드라고 한다.

 

오퍼랜드의 개수는 0개~여러 개가 있을 수 있다.

 

연산 코드

연산 코드는 수행할 연산을 담고 있다.

 

1.데이터 전송

2.산술/논리

3.제어 흐름 변경

4. 입출력 제어

 

데이터 전송 

데이터를 옮기고(Move), 저장하고(Store), 가져오고(Load), 스택에 저장(Push)하고, 최상단 데이터를 가져온다(PoP).

자료구조에서 스택의 구조와 똑같다.

FILO(First in last OUT)

 

산술/ 논리

더하기 빼기 곱셈 나눗셈은 기본.

오퍼랜드에 1 더하기 / 빼기

AND OR NOT

COMPARE : True false 비교

 

제어 흐름 변경

JUMP: 특정 주소로 실행 순서를 옮겨라

CONDITIONAL JUMP: 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라

HALT : 프로그램의 실행을 멈춰라

CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라

RETURN : CALL을 호출할 때 저장했던 주소로 돌아가라

 

입출력 제어

읽고 쓰고 시작, 상태확인

 

명령어 주소 지정 방식

연산에 사용할 데이터가 저장된 위치를 찾는 방법

 

명령어에서 표현할 수 있는 데이터 크기가 제한되어 있기에 채택된 방식

 

오퍼랜드가 줄어들수록 정보를 표현할 수 있는 숫자가 줄어든다.

그런 상황에서 메모리 주소를 입력해버리면 메모리의 단위 크기로 데이터를 다룰 수 있다.

 

레지스터에도 저장할 수 있다.

 

유효 주소(effective address)

연산에 사용될 데이터가 저장된 위치

 

즉시 주소 지정 방식(immediate addressing mode)

연산에 사용할 데이터를 오퍼랜에 직접 명시

명령어에서 표현할 수 있는 데이터 크기가 제한되어 있어 한계점이 있다.

그러나 조금 더 빠르다.

 

직접 주소 지정 방식(direct addressing mode)

오퍼랜드 필드에 유효 주소 직접적으로 명시

유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어든다.

 

간접 주소 지정 방식(indirect addressing mode)

유효 주소의 크기를 표현할 수 있는 데이터가 제한된다.

그래서 유효 주소의 주소를 명시한다.

그런데 이건 메모리를 너무 뒤적뒤적 해야한다(느리다)

 

CPU가 메모리를 탐색하는 시간은 사실 무지 느리므로 과정을 최소화하는게 중요하다.

다만 유효 주소를 충분하게 크게 가지고 갈 수 있다.

 

레지스터 주소 지정 방식(register addressing mode)

메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠르다.

직접 주소 지정보다도 빠르다.

 

연산에 사용할 데이터를 메모리에 저장하고, 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시한다.

 

 

추가 강의: C언어의 컴파일 과정

https://www.youtube.com/watch?v=MYKFLepF1UM&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=10

반응형