2025 동계 모각코 3주차

강리아·2026년 2월 1일

2025 동계 모각코

목록 보기
4/7

Instructions: Language of the Computer

Instruction과 ISA 개념

Instruction은 소프트웨어가 하드웨어에게 무엇을 할지 알려주는 최소 단위의 명령이다. 강제라기보다는 “이렇게 해달라”는 약속에 가깝다. 이러한 명령들의 집합을 Instruction Set Architecture(ISA) 라고 하며, 하드웨어와 소프트웨어가 공통으로 지켜야 하는 규칙이다.

Instruction은 매우 제한적이며, 레퍼토리가 정해져 있다. 하드웨어는 instruction 개수가 적을수록 구현이 쉬워지고, 소프트웨어는 instruction이 많을수록 표현할 수 있는 기능이 늘어난다. 즉, ISA는 하드웨어와 소프트웨어 사이의 공학적 타협의 결과이다.

Statement와 Instruction의 차이

고급 언어의 statement는 하나의 문장 안에 여러 연산이 포함될 수 있다. 예를 들어 a = b + c + d; 는 하나의 문장이지만, 하드웨어 수준에서는 여러 개의 instruction으로 나뉘어 처리된다.

Instruction은 statement에 비해 매우 단순하며, 어떤 데이터를 가지고 어떤 연산을 할지만 명확히 나타낸다. 복잡한 문장을 instruction 하나로 만들 수는 있지만, 하드웨어 구현 측면에서는 득보다 실이 크기 때문에 사용하지 않는다.

레지스터 중심 구조

프로세서는 연산만 담당하고, 실제 데이터는 레지스터나 메모리에 저장된다. 레지스터는 프로세서 내부에 있어 접근 속도가 매우 빠르다.

register int i; 와 같은 선언은 변수를 레지스터에 두고 사용하겠다는 의미지만, 실제로는 컴파일러가 자동으로 레지스터 할당을 잘 수행한다.

레지스터는 많을수록 좋지만, 너무 커지면 접근 시간이 길어져 클럭 사이클이 늘어나 실행 속도가 느려질 수 있다. 32개의 레지스터가 있을 경우 이를 구분하는 데 5비트만 필요하다.

메모리, 워드, 주소 개념

메모리는 바이트 단위로 주소가 매겨진다. 한 워드는 4바이트이므로, 연속된 정수 데이터는 주소가 4씩 증가한다. 즉 주소는 0 → 4 → 8 → 12 와 같이 증가한다.

정수 배열에서 인덱스를 사용할 때도 기준 주소에서 (인덱스 × 4바이트) 만큼 떨어진 위치를 가리키게 된다.

Load / Store 구조

연산은 반드시 레지스터에서만 수행된다. 메모리에 있는 값을 바로 연산할 수 없으며, 반드시 load 또는 store 명령어를 사용해야 한다.

  • load: 메모리 → 레지스터
  • store: 레지스터 → 메모리

이 구조를 load/store architecture라고 한다.

Immediate 값과 비트 확장

Instruction에는 즉시값(immediate)이 포함될 수 있다. 즉시값의 비트 수가 32비트보다 작을 경우, 나머지 비트는 채워야 한다.

  • 부호 있는 값: 부호 비트를 복사하여 채움 (sign extension)
  • 부호 없는 값: 0으로 채움 (zero extension)

이 과정을 통해 연산 결과의 의미가 유지된다.

분기 명령어와 상대 주소

분기 명령어는 조건에 따라 프로그램 흐름을 변경한다. 이때 주로 상대 주소를 사용하며, 현재 위치에서 얼마나 떨어져 있는지를 기준으로 이동한다.

분기 오프셋은 워드 단위이기 때문에 항상 4의 배수여야 하며, 하위 비트는 0이 된다.

0개의 댓글