본문 바로가기
CS 공부/컴퓨터 구조

명령어 종류

by 학습하는 청년 2025. 1. 1.

최종 수정 : 25.1.1

명령어 종류

1. 데이터 전달 명령어

데이터 전달 명령어는 동작 코드, 소스 오퍼랜드, 목적지 오퍼랜드를 포함하고 있다. 일반적으로 데이터의 크기는 바이트의 배수이므로 동작코드는 전달할 데이터의 크기에 대한 정보를 포함하고 있어야 한다. 같은 동작을 수행하더라도 전달하는 데이터의 크기가 다르면, 별도의 동작 코드를 부여하여야 한다.

적재(load) (Register  ← Memory)
기억장치의 한 장소에서 레지스터로 데이터를 전송한다.
저장(store) (Memory ← Register)
레지스터의 값을 기억장치의 한 장소로 저장한다.
이동(moe) (Register ← Register, Register ← Memory, Memory ← Register, Memory ← Memory)
레지스터 간, 레지스터와 기억장치 간, 또는 기억장치 간에 데이터를 이동하는 명령어이다.
교환(exchange) 한 개의 명령어로 소스 오퍼랜드와 목적지 오퍼랜드의 값을 교환한다.
각 오퍼랜드는 레지스터 혹은 기억장치일 수 있다.
PUSH 레지스터의 값을 스택으로 전달하며, 거장 명령어의 일종이다.
POP 스택의 값을 레지스터로 전달하며, 적재 명령어의 일종이다.

2. 산술 연산 명령어

산술 연산 명령어는 종류가 같은 연산이더라도 데이터 형식과 데이터의 크기에 따라 동적 코드를 다르게 정의해야 한다.

항의 수 이항 연산, 다항 연산
데이터 형식 부호 없는 수, 정수, 실수, 이진화 십진 코드(BCD)
데이터의 크기 8비트, 16비트, 32비트, 64비트

3. 논리 연산 명령어

논리 연산 명령어도 항의 수, 데이터 형식, 데이터 크기에 따라 분류할 수 있다. 논리 연산 명령어는 대부분 부호 없는 수를 취급한다. 종류가 같은 연산이더라도 데이터 형식과 데이터의 크기에 따라 동작 코드를 다르게 정의해야 한다.

논리 이항 연산 명령어 AND, OR, XOR, NAND, NOR, XNOR
단항 논리 연산 명령어 NOT, 비트 클리어, 비트 세트, 시프트

4. 분기 명령어

1) 분기 명령어의 종류

무조건 분기 명령어

  • 니모닉 코드로 br(branch) 또는 jmp(jump)로 표현한다.
  • 조건과 관계없이 항상 프로그램 카운터에 분기 목적지 주소를 적재한다.
  • 분기 목적지 주소(banch targer address) : 직접 주소지정방식, 레지스터 간접 주소지정 방식, 상대주소지정방식 등과 같이 다양한 방법으로 표시될 수 있다.

조건 분기 명령어

  • 실행될 때 조건을 만족한 것을 "Taken"이라고 하고, 조건을 만족하지 않은 것을 "Not Taken"이라고 한다.
  • Branch Taken : 프로그램 카운터에 분기 목적지 주소를 적재한다.
  • Branch not taken : 프로그램 카운터의 값을 변경하지 않는다.

2) 분기 명령어의 형식

분기  조건 오퍼랜드
  • 분기 명령어의 동작 코드 : '분기하라'는 동작과 '분기 조건'을 표현하고 있어야 한다.
  • 오퍼랜드 필드 : 조건을 만족할 때 프로그램카운테에 적재할 주소에 대한 정보를 포함하고 있다.

5. 기타 명령어

1) 입출력 명령어

입력 명령어와 출력 명령어가 있다.

  • 입력(input)(Register ← I/O port) : 입출력 포트의 데이터를 레지스터로 전달한다.
  • 출력(output)(I/O port ← Register) : 레지스터의 데이터를 입출력 포트로 전달한다.

 

직접 주소지정방식 또는 레지스터 간접 주소지정방식을 사용한다.

 

2) 데이터 변환 명령어

데이터를 표현하는 형식을 변경하는 명령어이다.

  • BCD 코드 ↔ 부호 없는 수(binary)
  • 비트 크기 변환 : 8비트 ↔ 16비트 ↔32비트
  • 형식 변환 : 정수 ↔ 단정도 실수 ↔ 배정도 실수

표 참조(table reference)를 쉽게 하기 위한 변역(translation) 명령어도 있을 수 있다.

  • 인덱싱 주소지정방식을 사용
  • 인덱스 레지스터는 기억장치에 연속적으로 저장되어 있는 데이터의 시작 주소를 지정하도록 만들고, 상대 주소에 의하여 데이터의 내용을 참조한다.

 

3) 상태 레지스터 조작 명렁어

상태 레지스터의 값을 변경하는 명령어는 비교(compare)와 테스트(test)가 있다.

  • 비교(compare) 명령어 : 두 개의 오퍼랜드를 가지며, "Compare A, B" 형식으로 표현된다.
  • 테스트(test) 명령어 : 두 개의 오퍼랜드를 가지며, "test A, B"와 같은 형식으로 표현된다.

상태 레지스터의 특정 플래그를 셑, 리셋하는 명령어로 동작 코드만으로 구성되어 있고, 오퍼랜드 필드가 필요하지 않다.

  • Set/reset carry flag 명령어 : 니모닉 코드를 stc(set carry flag)와 clc(clear carry flag)로 표현한다.
  • Set/reset interruput flag 명령어 : 니모닉 코드를 sti(set interrupt flag)와 cli(clear interrupt flag)로 표현한다.

 

4) 서브루틴 호출 명령어

서브루틴 호출과 관련하여 프로세서는 서브루틴 호출(subroutine call)과 서브루틴에서 복구(return from subroutine) 명령어를 제공한다.

call 서브루틴의 시작 주소

호출 명령어의 오퍼랜드는 다양한 주소지정방식으로 표현될 수 있다.

ret 사용되지 않음

복귀 명령어는 지정된 주소를 프로그램 카운터에 적재함으로써, 서브루틴 호출 명령어 다음에 있는 명령어를 실행하도록 만든다.

 

5) 인터럽트 명령어

인터럽트와 관련하여 인터럽트 요청(interrupt request)과 인터럽트 서비스 루틴에서 복귀(return from ISR) 명령어가 있을 수 있다.

 

인터럽트 요청 명령어의 니모닉 코드로 int를 사용하고, 복귀 명령어의 니모닉 코드로 reti 또는 iret를 사용한다.

Int 서브루틴의 시작 주소

호출 명령어 수행할 때 프로세서는 인터럽트 번호 인터럽트 서비스 루틴의 시작 주소를 알 수 있다.

 

reti 사용되지 않음

복귀 명령어는 인터럽트 요청 명령어의 역동작을 실행한다.

 

6) 시스템 제어 명령어

컴퓨터 자체를 관리하거나 운영체제의 기능을 지원하기 위한 용도로 사용된다.

 

시스템 관리 명령어는 halt, wait, npo(no operation)가 있다.

  • halt : 시스템 정지
  • wait : 이벤트 대기
  • nop : 클럭 소모

 

프로세서는 시스템 모드에서만 실행할 수 있는 명령어들을 별도로 제공하고 있으며, 이것들을 특권 명령어(privileged instruction)이라고 한다.

  • 운영체제(시스템, 커널) 모드에서만 실행할 수 있는 명령어
  • 특수 레지스터 관리, 기억장치 관리, 입출력 명령어 등

참고

독학사 교재

'CS 공부 > 컴퓨터 구조' 카테고리의 다른 글

명령어 사이클  (0) 2025.01.02
중앙처리장치 구성요소  (0) 2025.01.01
주소지정방식  (0) 2025.01.01
명령어 구성과 형식  (0) 2024.12.31
수의 표현  (0) 2024.12.31

댓글