[컴퓨터구조] Control Transfer Operations

최원석·2024년 10월 22일

Instructions: Language of the Machine

Instruction Set Architecture (ISA)

Interface between Hardware and Software

RISC-V: Operations

  • 레지스터 데이터에 대한 산술 또는 논리 수행한다.
  • memory와 register사이에서 data를 전송한다.
    • Load data from memmory into register
    • Store register data into memmory
  • 제어를 전환한다.
    • Unconditional jmp
    • Conditional branch
    • Procedure call and return

RISC-V: Registers

RISC-V에서는 Register에 Name을 달아 Usage을 구분한다.

Registers 번호 - Name : Usage 순서이다.

  • x0 - Zero : Hard-wored zero
  • x1 - ra : Return adress
  • x2 - sp : Stack pointer
  • x3 - gp : Global pointer
  • x4 - tp : Thread pointer
  • x5~x7 - t0~t2 : Temporaries
  • x8 -s0/fp : Saved register/Frame pointer
  • x9 - s1 : Saved register
  • x10~x11 - a0~a1 : Function arguments/Return values
  • x12~x17 - a2~a7 : Function arguments
  • x18~x27 - s2~s11 : Saved registers
  • x28~31 - t3~t6 : Temporaries
  • PC - Program Counter

Registers vs. Memory

  • 레지스터는 메모리보다 접근이 빠르다.
  • RISC-V에서는 산술 또는 논리연산에 의해 메모리에 있는 데이터에 직접적으로 바로 접근할 수 없다.
  • 메모리 데이터 수행은 데이터 전송 명령어를 필요로 한다.
  • 컴파일러는 가능한 한 변수에 레지스터를 사용해야 한다.

Data Representation

데이터의 최소 단위는 bits로 0과1인 2진수로 표현한다.

Bit strings은 아래 처럼 표현된다.


Arithmetic & Logical Operations

RISC-V: Addressing

Immedtiate addressing

즉시 값은 레지스터나 메모리에서 값을 저장해서 사용하는 것이 아닌 상수로써 사용된다. 명령어의 일부분에 2진수로 저장 되어 사용된다.

Value in a register

register 안에 있는 값의 경우 명령어에 포함되어있는 레지스터의 주소를 통해 값을 가져와 사용한다.

Value in memory

memory 안에 있는 주소 값의 경우 즉시 값과 레지스터로 메모리 주소값을 통해 메모리에 접근한다.

Address : pc + imm

현재 PC 값에 imm을 더해서 주소값을 사용한다.

Arithmetic Operations

산술 피연산자

  • 3개의 operands를 가진다.
add a, b ,c // a <- b + c
sub a, b, c // a <- b - c

연산을 수행한 뒤에 목적지register인 a에 값을 넣고 있다.

Register Operands

Register 피연산자

  • 산술 명령어는 register 피연산자를 가진다.
  • RISC-V는 32 registerfile을 가진다. x0~ x31

C code

// f in x19
// g in x20
// h in x21
// i in x22
// j in x23

f = (g + h) - (i + j);

Compiled RISC_V code

add x5 x20 x21
add x6 x22 x23
sub x19 x5 x6

Immediate Operands

명령어에 지정된 상수 데이터

addi x22, x22, 4 //x22에서 외쪽으로 2번 shift한 후 x22에 저장한다.

Why? using immediate operands?

12bits 이하의 작은 상수들은 흔하게 사용된다. 이러한 작은 상수들은 레제스터의 모든 공간을 요구하지 않기때문에 immediate 값을 사용한다.

→immediate값은 load 명령어가 필요없다.

Upper Immediate Operations

상수는 최대 32bits로 표현된다.

immeditate 값 중에는 12bits 값도 있는데? → “Upper Immediate” 필요!

lui rd, contant

즉시 값을 상위 비트로밀고 0으로 채운다.


Data Transfer Operations

Memory Operands

Putting data in Registers

Memory에서 Register로 가져오는 명령어를 Load라고 한다.

Load instructions have thress parts

  • Operator name
  • Destination register
  • Base resgister addesss (base) and constant offset (off)
ld dst, off(base)

Data transfer instructions

Register에서 Memory로 저장하는 명령어를 Store라고 한다.

load data의 반대되는 절차를 거친다.

sd src, off(base)

1개의 댓글

comment-user-thumbnail
2024년 10월 23일

컴구 B+

답글 달기