FastCampus UpStage AI/컴퓨터구조

컴퓨터구조 - 명령어

하오츠(해석:맛있다) 2024. 10. 14. 11:04

컴퓨터가 c/c++ 을 이해하게 되는 과정 

: 컴퓨터는 0/1의 구조로만 이해를 하게 된다

: 컴파일과정 자체는 소스코드 -> 전처리기 -> 컴파일러 -> 어셈블러(목적 코드 생성) -> 링커 -> 프로그램 실행 가능

 

* 컴파일러와 인터프리터의 차이 

   컴파일러 - 소스코드를 목적코드(기계어)로 변환

   인터프리터 - 한 줄씩 검사, 목적코드로 변환

 

* 컴파일되어 어셈블리어로 구성된 코드 확인

- 어셈블러의 명령어의 수는 CPU나 소프트웨어에 의해 달라진다.( CISC, RISC / 주소 명령어 체계 등등)

 

명령어와 명령어 주소 체계

: 오퍼랜드의 갯수에 따라서 명령어의 갯수가 달라진다.

 

명령어의 종류 

1. 데이터 전송   

move 데이터를 옮겨라

store 메모리에 저장해라

load(fetch) 메모리에서 가져와라

push 스택 최상단에 데이터를 저장해라

pop 스택 최상단에 데이터를 가져와라 

 

2. 산술 논리연산

add/substract/multiply/divide 덧셈/뺄셈/곱셈/나눗셈

increment/decrement 1증가/감소

and/or/not and/or/not 연산을 수행하라

compare 두 숫자 또는 true/false값을 비교해라

 

3. 제어 흐름

jump 특정 주소로 실행 순서로 옮겨라

conditional jump 조건에 부합할 경우 특정 주소로 실행 순서로 옯겨라

halt 프로그램 실행을 멈춰리ㅏ

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

return call 호출시 저장했던 주소로 돌아가라

 

4. 입출력 제어

read 특정 입출력 장치로부터 데이터를 읽어라

write 특정 입출력 장치로 데이터를 써라

start io 입출력 장치로 시작해라

test io 입출력 상태를 확인해라

 

주소지정

왜  직접 데이터를 명시하지 않고, 주소로 명시할까? 

: 명령어의 길이가 한정되어 있기 때문이다.

: 명령어의 오퍼랜드 바이트를 넘어가게 되는 숫자가 있는 경우, 비트를 넘어가는 부분을 예방하기 위해 레지스터의 주소를 명시한다.

 

* 유효주소 

연산코드에 사용할 데이터가 저장된 위치, 연산의 대상이 되는 데이터가 저장된 위치 

 

즉시 주소지정

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

: 가장 빠른 주소 지정 + 데이터 크기 제한

 

직접 주소지정

: 오퍼랜드 필드에 유효주소를 명시

: 오프랜드 필드로 표현가능한 메모리 주소 크기 제한

 

간접 주소지정

: 오프랜드 필드에 유효주소의 주소 명시

: 유효주소 크기에 제한이 없으나, 두번 이상 접근해야함으로 메모리 접근이 속도가 느리다.

 

레지스터 주소 지정

: 연산에 사용할 데이터를 저장한 레지스터에 오프랜드 필드에 직접 명시

: 레지스터에 직접 접근, 메모리 접근보다 빠르다 

 

레지스터 간접 주소 지정

: 연산에 사용할 데이터를 메모리에 저장하고, 저장된 메로리 주소를 레지스터에 저장

: cpu 는 레지스터에 의해 한번만 메모리에 접근이 가능하기때문에 간접 주소 지정보다 빠르다.