8 minute read


Instruction Format

범용 Register 구조 및 Stack 구조에서는 명령어의 Format 이 어떻게 달라지는가?
Single Accumulator Organization

  • ADD X : AC <- AC + X


General Register Organization

  • 범용 Register 구조에서는 Source 와 Destination 을 전부 정의 해주어야 한다.
    • ADD R1, R2, R3; R1 <- R2 + R3
    • ADD R1, R2; R1 <- R1 + R2


Instruction Format for Stack Organization

  • Stack 이라는 구조의 특성이 반영되어 있으므로 ADD 와 같은 명령어는 피연산자가 정의되어 있지 않아도 된다.
    • PUSH X
    • ADD


즉, 컴퓨터의 구조에 따라서 명령어 Format 의 요소가 정의되는 방식이 다를 수 있다.

  • Three address instruction
  • Two address instruction
  • One address instruction
  • Zero address instruction



Three address instructions 예시

X = (A + B) * (C + D)

  • X = (A 와 B 의 주소를 더한 값) * (C 와 D 의 주소를 더한 값)


Three address instructions

  1. ADD R1, A, B ;
    • R1 <- M[A] + M[B]
  2. ADD R2, C, D ;
    • R2 <- M[C] + M[D]
  3. MUL X, R1, R2 ;
    • M[X] <- R1 * R2


    결과적으로 프로그램의 길이는 짧아지고, 프로그램을 구성하고 있는 각 명령어의 길이는 길어진다.



Two address instructions 예시

가장 일반적인 형태.

X = (A + B) * (C + D)

  • X = (A 와 B 의 주소를 더한 값) * (C 와 D 의 주소를 더한 값)


  1. MOV R1, A
    • R1 <- M[A]
  2. ADD R1, B
    • R1 <- R1 + M[B]
  3. MOV R2, C
    • R2 <- M[C]
  4. ADD R2, D
    • R2 <- R2 + M[D]
  5. MUL R1, R2
    • R1 <- R1 * R2
  6. MOV X, R1
    • M[X] <- R1


    결과적으로, 각 명령어들의 길이는 짧아지지만 프로그램의 길이는 길어진다.



One address instructions 예시

Implied accumulator register

  • 명령어를 통해 명시적으로 표현하지 않지만 내재적으로 AC 에서 연산이 이루어지는 것을 가정하는 구조.
  • 명령어 형식은 짧아지고, 프로그램의 길이는 길어진다.


  1. LOAD A
    • AC <- M[A]
  2. ADD B
    • AC <- AC + M[B]
  3. STORE T
    • M[T] <- AC
  4. LOAD C
    • AC <- M[C]
  5. ADD D
    • AC <- AC + M[D]
  6. MUL T
    • AC <- AC * M[T]
  7. STORE X
    • M[X] <- AC



Zero address instruction 예시

Stack organized computer

  • Stack 구조를 가진 Computer 인 경우.


  1. PUSH A
    • TOS <- A
  2. PUSH B
    • TOS <- B
  3. ADD
    • TOS <- (A + B)
  4. PUSH C
    • TOS <- C
  5. PUSH D
    • TOS <- D
  6. ADD
    • TOS <- (C + D)
  7. MUL
    • TOS <- (C + D) * (A + B)
  8. POP X
    • M[X] <- TOS
    • X 주소에 최종 결과를 write



Addressing modes

path


다양한 Addressing modes 를 사용함으로서 프로그램을 효율적으로 작성할 수 있게 된다.


path


  • Implied mode
    • 실제 주소 지정없이 사용되는 mode.
    • 예: ADD X
      • AC <- AC + Y
      • 피연산자 하나는 Accumulator 이고, Destination 역시 Accumulator 임을 내재하고 있음.

  • Immediate mode
    • Address field 자체가 연산의 대상이 되는 경우.



  • Register mode, Register indirect mode
    • Register 에 있는 값이 유효 주소가 될 때.
    • Register 에 있는 값이 메모리 주소가 되어 해당 메모리 주소에 있는 값이 유효 주소가 될 때. (Indirect)
      • register Indirect : 해당 Register 의 값이 EA(유효주소) 가 되어 M[해당 Register 값] 에 저장된 값이 AC 에 저장된다.



  • Auto-increment / decrement mode
    • Register mode 와 같으나 값이 1씩 증/ 감 하는 mode.
    • Auto-increment
      • Register mode 의 명령어가 수행 후 Register 에 저장된 유효주소 값이 1 증가한다.
    • Auto-decrement
      • Register mode 의 명령어 수행 전에 Register 에 저장된 값이 1 감소하고, 해당 값이 EA(유효주소)가 된다.



  • Direct / Indirect mode
    • 피연산자의 Address field 값이 직접주소가 되거나 간접주소가 되는 경우.



  • Relative address mode, Indexed addressing mode, Base register address mode
    • Relative address mode : 프로그램 카운터와 더하여 Address 를 지정하는 방식
    • Indexed addressing mode : index address 라는 특정 address 와 더하여 address 를 지정하는 방식



Program Control Instructions

path

Program Control Instructions

  • PC(Program Counter) 값을 변화시키는 명령어.
    • Branch, Skip, Call, Return …
  • 참조되는 조건 bit 를 이용하여 Program control 이 이루어짐.
    • C, S, Z, V



조건 Bit

path

  • C : Carry
    • End carry 가 1인 경우 C는 1로 Set.
  • S : Sign
    • 산술 논리 연산의 대상이 되는 Register 의 최상위 Bit를 나타냄.
      • 1이면 S는 1로 Set.
  • Z : Zero
    • 산술 논리 연산의 결과가 0인 경우
      • 예(AC) : AC 의 모든 Bit 가 0인 경우 Z는 1로 Set.
  • V : Overflow
    • 최상위 2개 bit 가 서로 다르면 (Exclusive-OR) overflow 발생 가능.
    • 최상위 2개 Bit XOR 시 1인 경우 V는 1로 Set.



위 조건식을 회로로서 구현하면 다음과 같다. (Status Register)

path



Conditional Branch Instructions

path



Subroutine Call and Return

Subroutine Call and Return

  • 자주 사용하는 명령어에 대해서 해당 명령어로 Jump 하여 명령 수행 후 앞서 진행했던 명령어의 다음 명령어로 돌아가는 것.
  • Main Program 에서 자주 사용.



  • Category
    • Call Subroutine
    • Jump to Subroutine
    • Branch to Subroutine
    • Branch and Save Address



  • Logic
    • 한 명령어가 끝난 후 PC 값을 Jump할 Subroutine 의 시작 주소로 바꾼다.
    • PC 값은 1이 증가하여 다음 명령어(Subroutine 수행 후 돌아갈 주소) 를 가지고 있으므로 해당 값(Return address)을 임시로 다른 곳에 저장해두어야 함.
    • Subroutine 이 끝난 후 임시 저장소에 저장되어 있는 Return address 를 PC 에 전송하여 Jump 했던 지점으로 돌아간다.



[STACK] Subroutine Call and Return

Subroutine 을 Call 하는 방법 중 가장 효율적인 방법은 Memory Stack 에 Return Address 를 저장하는 방법이다.

  • Memory Stack 은 순환적인 Subroutine 에 효율적.



  1. [PUSH] Subroutine Call
    • SP <- SP + 1
    • M[SP] <- PC
    • PC <- EA
  2. [POP] Return from subroutine
    • PC <- M[SP]
    • SP <- SP - 1



예시

  %esp : Stack Pointer (SP)
  %eip : Program Counter (PC)



  1. [Subroutine CALL]
    path
    • 804854e 번지의 명령어는 e8 3d 06 00 00
      • 해당 명령어는 8048b90 번지(Subroutine)를 call 하는 명령어.
      • 현재 PC 값은 804854e (현재 실행 할 명령어의 주소값)
    • 다음 명령어는 8048553 번지이고, 이는 Return Address 가 된다.
      • 따라서 Stack 에 Return address 인 8048553 번지를 Push.
      • Stack Pointer 는 하나 증가 (현 예에서는 감소)
      • PC 에 Subroutine 시작 주소인 8048b90 값을 넣어 Call.



  2. [Subroutine 수행 후 Return] path
    • Subroutine 수행 종료 후 Return 명령 실행.
      • 현재 PC 값은 Return 명령어의 주소인 8048591.
      • Stack Pointer (%esp) 와 Stack 의 구조는 Subroutine 시작 시점과 동일.
    • Stack Pointer 가 가리키고 있는 주소가 Return Address 이므로 POP.
      • SP 가 가리키고 있는 Stack 의 104 번지 값인 8048553 이 POP 되어 PC(%eip) 에 저장되고 SP(%esp) 는 하나 증가. (현 예에서는 감소 = 108)



Program Interrupt

Program Interrupt 와 Subroutine Call 의 차이점

  • Subroutine Call 은 Program 수행 중 Program 내부에서 특정 Subroutine 으로 점프하여 수행 후 Return.
  • Interrupt 는 Subroutine Call 이 Program 의 외부에서 Trigger 됨.
    • I/O Device 에 의해 Program 외부에서 Subroutine Call 이 발생함.



Program State Word, PSW

  • 마찬가지로 Subroutine 수행 후 돌아올 곳이 존재해야 하므로 State Word 가 존재.
  • CPU 의 모든 조건 Bit (C-carry, S-sign, Z-zero, V-overflow) 상태의 집합.



Types of Interrupts

  1. External Interrupt
    • I/O, Timing, Circuit Monitoring Power Supply 등의 장치에 의해 발생
  2. Internal Interrupt (traps)
    • Invalid opeartions, Register overflow, Division by zero 등에 의해 발생
  3. Software Interrupt
    • Supervisor Call 에 의해 발생



Reduced Instruction Set Computer (RISC)

RISC 구조의 컴퓨터는 CISC 구조와 대비하여 설명된다.

CISC vs RISC

  • CISC(Complex Instruction Set Computer)
    • 말 그대로 복잡한 구조의 명령어를 가진 컴퓨터.
      • 명령어의 종류가 많음.
      • 다양한 Addressing mode 를 지원.
      • 명령어의 길이 조정이 가능.
      • Memory 에서 직접 Data 의 처리가 가능함.
    • 하나의 명령어에서 메모리 접근 및 적절한 처리가 가능.
      • 한 명령어에 많은 Microoperation 이 포함되어 많은 작업을 처리할 수 있다.



  • RISC (Reduced Instruction Set Computer)
    • 단순한 구조의 명령어를 가진 컴퓨터.
      • 상대적으로 ~
        • 적은 종류의 명령어.
        • 적은 종류의 Addressing mode 를 지원.
      • 명령어의 길이는 고정.
      • 하나의 명령어는 한 Clock 에 수행됨.
      • 처리의 속도를 빠르게 하는 명령어 Set 을 가짐.
    • Load 및 Store 명령어에 한해 메모리 접근가능.
    • Register 내부에서 모든 처리를 진행.
    • 상대적으로 많은 수의 Register 를 가지고 있음.
    • 중첩된 Register Window 를 가짐.



[RISC] - Overlapped Register Windows

중첩된 Register Window

  • 한 Procedure 수행 중 다른 Procedure 를 수행하고자 할 때 (Subroutine call) 각각의 Procedure 가 사용할 수 있는 Register 들의 영역이 할당됨.
    • 이때, 여러 Procedure 가 공통으로 사용할 수 있는 영역이 존재. (Global 영역)



path

  • (a) Procedure 를 진행 할 때에는 R_8 ~ R_31 까지의 Register 에 접근할 수 있다.
    • Register (In)
      • 이전 Procedure 와 현재 Procedure (a) 가 공유 할 수 있는 Register.
    • Register (Locals)
      • 현재 Procedure 인 (a) 만 접근할 수 있는 Register.
    • Register (Out)
      • 현재 Procedure 인 (a) 가 다음 Procedure (b) 을 Call 할 때 b 와 공유할 수 있는 Register.
  • CWP (Current Window Pointer)
    • 해당 포인터로 Procedure 마다 사용 가능한 Register 의 범위를 지정.



[RISC] - Overlapped Register Window 예시

path
Global register (공용 Register)

  • R0 ~ R9



Procedure A 에게 할당된 Register

  • In: R10 ~ R15
  • Local: R16 ~ R25
  • Out: R26 ~ R31



Window Size

  • 하나의 Procedure 가 접근할 수 있는 Register 의 개수.
  • Window Size = L(Local) + 2C(Common, In/Out) + G(Global)
    • 10(G) + 10(L) + 2 * 6(Common) = 32



Register File

  • 전체 Register 의 개수.
  • Register File = (L + C)W + G
    • 윈도우(W) 의 개수만큼 Local 과 Common 이 존재함 + G(Global)
    • 10(G) + 4(W) * (10(L) + 6(Common)) = 74



[RISC] - Berkeley RISC 1

path


RISC System 의 초기 모델.

  • 총 32 Bit CPU 를 가짐.
  • 13 번째 Bit 값에 따라 Register / Register Immediate mode 구분
  • 31 개의 명령어
  • W: 8, G: 10, L: 10, C: 6
    • 8개의 Window
    • 10개의 Global Register, Local Register
    • 6개의 Common Register
  • Register File: 138
    • (10(L) + 6(C)) * 8(W) + 10(G)
  • Window Size = 32
    • 한 Procedure 에서 접근할 수 있는 Window 의 수 = 32 개
    • 따라서 각 Register 는 5 bit 가 할당됨.



Register mode 인 경우 (Bit(13) = 0)

  • Opcode: 8 Bits (31 ~ 24)
  • Rd, Rs (destination, source): 5 Bits (23 ~ 19, 18 ~ 14)
  • S2: 5 Bits (4 ~ 0)
    • S2 로서 또다른 Register 를 지정할 수 있다.



Register immediate mode 인 경우 (Bit(13) = 1)

  • S2: 13bit (0 ~ 12)
    • S2 에 저장된 값을 Immediate 값으로서 사용하게 됨.



PC relative mode

  • Opcode: 8 Bit (31 ~ 24)
  • COND: 5 Bit (23 ~ 19)
    • Opcode 와 COND 는 조건으로서 사용됨.
  • Y: 19 Bit (18 ~ 0)
    • 상대적인 주소값을 정의



[Berkeley RISC 1] - 31 개의 명령어 및 예시

path
ADD

  • ADD R22, R21, R23 : R23 <- R22 + R21
    • 앞의 두 Register 가 Source, 마지막 Regiater 가 Destination 이 된다.
  • ADD R22, #150, R23 : R23 <- R22 + 150
    • 위와 같이 연산에 #150 이라는 Immediate 값을 사용할 수 있다.



LDL

  • LDL (R22) #150, R5 : R5 <- M[R22 + 150]
    • R22 에 있는 Register 값(주소)에 150 을 더한 주소에 있는 값을 R5에 저장.
    • 상대 주소의 개념을 사용함으로서 더 많은 Bit 의 번지를 접근할 수 있게 된다.



지식 공유 및 기록을 위한 컴퓨터 구조 개인 학습 포스트입니다. 피드백은 항상 환영합니다! 긴 글 읽어주셔서 감사합니다.



처음으로~

Task Lists

  • Instruction Format
  • Three address instructions 예시
  • Two address instructions 예시
  • One address instructions 예시
  • Zero address instruction 예시
  • Addressing modes
  • Program Control Instructions
  • 조건 Bit
  • Conditional Branch Instructions
  • Subroutine Call and Return
  • [STACK] Subroutine Call and Return
  • Program Interrupt
  • Reduced Instruction Set Computer (RISC)
  • [RISC] - Overlapped Register Windows
  • [RISC] - Overlapped Register Window 예시
  • [RISC] - Berkeley RISC 1
  • [Berkeley RISC 1] - 31 개의 명령어 및 예시

Comments