이론/컴퓨터구조

명령어 특성

ohojee 2023. 11. 6. 00:44

명령어란?

  • 컴퓨터가 수행할 수 있는 동작을 2진 코드로 정의(아키텍쳐마다 다름)
  • 구성
    • 연산 부호: cpu가 실행할 동작 ex) 덧셈, 뺄셈, 저장, 분기, etc
    • 피연산자: 연산의 대상이 되는 데이터 or 데이터의 위치 ex) 메모리 주소, 레지스터 번호, 상수 값, 입출력 포트

명령어 길이 형식

고정길이가변길이
명령어 길이모두 동일명령어의 종류/구성요소에 따라 다양
해석쉬움어려움
프로그램 설계단순복잡
프로그램 낭비 o ⇒ 짧게 표현 가능해도 길이 맞춰야함x
사용 아키텍쳐 (ISA)RISC(Reduced)CISC(Complicated)

피연산자 수에 따른 명령어 형식

  • 컴퓨터에 따라 다름

3-주소 명령어 형식

opcodeoperand(target)operand(source1)operand(source2)
operand(target)=opcode(operand(source1)+operand(source2))operand(target) = opcode(operand(source1) + operand(source2))
  • ex) Y = A * B + C * D
    MUL R1, A, B // R1 <- A * B
    MUL R2, C,D // R2 <- C * D
    ADD Y, R1, R2 // Y <- R1 + R2
  • 특징
    • 명령어 길이 ⬆️
    • 명령어 개수 ⬇️
    • 2, 3주소는 모두 범용레지스터 사용(여러 개의 레지스터 존재)

2-주소 명령어 형식

opcodeoperand(source-target)operand(source2)
operand(sourcetarget)=opcode(operand(sourcetarget,operand(source2))operand(source-target) = opcode(operand(source-target, operand(source2))
  • ex) Y = A * B + C * D
    LOAD R1, A // R1 <- A
    MUL R1, B // R1 <- R1 * B 
    LOAD R2, C // R2 <- C
    MUL R2, D // R2 <- R2 * D 
    ADD R1, R2 // R1 <- R1 + R2 
    STORE Y, R1 // Y <- R1
  • 특징
    • source와 target 동일하게 사용
    • 명령어 길이 ⬇️
    • 명령어 개수 ⬆️

1-주소 명령어 형식

opcodeoperand
Acc=opcode(Acc,operand)Acc = opcode(Acc , operand)
  • ex) Y = A * B + C * D
    LOAD A // Acc <- A
    MUL B  // Acc <- Acc * B
    STORE T // T <- Acc 
    LOAD C // Acc <- C
    MUL D // Acc <- Acc * D
    ADD T // Acc <- Acc + T 
    STORE Y // Y <- Acc
  • 특징
    • 레지스터 1개 <= 이 레지스터는 누산기
    • source와 target 동일하게 사용
    • 명령어 길이 ⬇️(Acc 생략)
    • 명령어 개수 ⬆️(제일 많음)
    • 초기 컴퓨터에서 사용, 지금은 x

0-주소 명령어 형식

  • 스택 사용하는 계산기에서 사용하는 명령어 형식
    • ADD, MUL 등의 연산자는 stack에서 두 개의 데이터를 pop하여 계산하고 그 결과를 다시 push
  • 중위 표기식: Y = A * B + C * D ⇒ 후위표기식: Y = A B * C D * +
    PUSH A 
    PUSH B 
    MUL 
    PUSH C 
    PUSH D 
    MUL 
    ADD
    POP Y
  • 명령어 길이를 줄이는 방법
    • 메모리 주소 대신 레지스터 주소 사용
      • 메모리 용량 >>>> 레지스터 용량 ⇒ 레지스터 주소는 매우 적은 비트로 표현 o
      • 16bit 메모리면 항상 메모리는 16bit로 표현, but 레지스터는 8개라고 한다면 000으로 3bit로 표현 o
    • 2-주소 명령어
      • source 연산자 하나를 target과 겸함 ⇒ 3-주소 명령어보다 길이 ⬇️
    • 1-주소 명령어
      • 묵시적 피연산자 사용
      • Acc(누산기) 생략 ⇒ 길이 ⬇️
      • but 최종적으로 효과적이냐는 의문 존재

명령어 사이클

폰노이만 모델

  • CPU, 메모리, 입출력장치로 구성

가상컴퓨터 AccCom의 CPU 구성

  • 제어장치
    • PC(program counter): 프로그램 계수기
      • 다음에 실행해야할 명령어의 주소 가짐
        그럼 프로그램 처음 시작하면 pc에 누가 넣어줌? ⇒ os가 pc에 프로그램의 시작 주소 넣어줌
    • IR(instruction register): 명령어 레지스터
  • 연산장치
    • Acc(accumulator): 누산기
  • 메모리 인터페이스
    • MAR(memory address register): 메모리 주소 레지스터
    • MBR(memory buffer register): 메모리 버퍼 레지스터

가상컴퓨터의 명령어 형식과 데이터 형식

  • 명령어 형식
    • 16bit 고정 길이 명령어
    • 메모리 주소: 0x0000~0x0FFF
  • 데이터 형식
    • 16bit 부호-크기 방식의 정수
    • 정수: -32767 ~ -0, 0 ~ 32767
    • 연산: add, sub, mul

가상 컴퓨터의 명령어 목록

명령어 사이클의 종류

  • 인출 사이클: 메모리 → cpu로 명령어 가져오기
  • 실행 사이클: cpu에서 명령 실행
  • 인터럽트 사이클: 인터럽트 발생 시 서비스 루틴 실행

⇒ 프로그램 실행은 인출 사이클 → 실행 사이클 반복

인출 사이클

  • 메모리 → cpu로 명령어 가져오기
    1. pc에 저장된 명령어 메모리 주소 → mar
    1. 메모리는 mar이 지정하는 주소에 있는 데이터(명령어)를 mbr에 저장 (버스로 보내면 자동으로 mbr에 저장)
    1. mbr의 명령어 → ir에 저장
    1. pc에 다음 명령어 주소로 갱신

실행 사이클

  • cpu에서 명령 실행(명령어에 따라 다르긴 함)
    • ex) 읽기 명령어(LDA(load))
      1. 프로세서는 데이터가 있는 메모리 주소를 MAR에 지정
      1. 메모리는 MAR이 지정하는 메모리 주소에 있는 데이터를 MBR에 저장
      1. 프로세서는 MBR에 저장된 데이터를 Acc에 저장
    • ex) 쓰기 명령어(STA(store))
      1. 프로세서는 데이터가 있는 메모리 주소를 MAR에 지정
      1. 프로세서는 Acc의 데이터를 MBR에 저장
      1. 메모리는 MAR이 지정하는 메모리 주소에 MBR의 내용을 저장
    • ex) 덧셈 명령어(ADD)
      1. IR에 저장된 명령어에서 피연산자 주소 부분을 MAR에 지정
      1. 메모리는 MAR이 지정하는 주소에 있는 데이터를 MBR에 저장
      1. MBR의 데이터와 Acc의 데이터를 더하고 그 결과를 다시 Acc에 저장

예제

  • MAR ← IR[11:0]: 11bit부터 0bit까지 슬라이싱해서 MAR에 전달

인터럽트(용어정도만 기억하면 됨)

  • CPU가 컴퓨터 내부 또는 외부에서 발생할 수 있는 갑작스런 사건에 대응하는 기능
    1. 인터럽트가 발생 → 상태 레지스터에 인터럽트 발생을 표시
    1. 명령어 실행 단계가 끝날 때마다 인터럽트 발생을 확인 → if 인터럽트 발생 ? 현재 CPU 상태를 저장, 해당 인터럽트 서비스 루틴을 실행 : continue
    1. 인터럽트 서비스 루틴의 실행을 마치고, 이전 CPU 상태로 복귀
  • 내부 인터럽트의 종류
    • 하드웨어 고장
    • 실행할 수 없는 명령어
    • 명령어 실행 오류 ex) 0으로 나누기
    • 사용 권한 위배
  • 외부 인터럽트의 종류
    • 타이머 인터럽트: 프로세스 스케줄링 또는 예약 작업 처리. 워치독
    • 입출력 인터럽트: 입출력 장치의 상태 변화 알림

Uploaded by N2T