본문 바로가기

Background

(18)
J-Type J-type은 RISC-V 아키텍처에서 무조건 점프(jump) 명령어를 수행하는 명령어 형식입니다. J-type 명령어는 프로그램의 흐름을 변경할 때 절대적인 주소가 아닌, PC-relative 오프셋을 사용하여 상대적인 위치로 점프합니다. 이 명령어 형식은 주로 함수 호출, 루프 구현, 조건문 처리에 활용됩니다.J-type 명령어의 구조J-type 명령어는 다음과 같은 필드로 구성됩니다:| imm[20], imm[10:1], imm[11], imm[19:12] | rd      | opcode || 1 bit,       10 bits,      1 bit,       8 bits          | 5 bits | 7 bits    | 각 필드의 역할은 다음과 같습니다:imm[20], imm[10:1..
U-Type U-type은 RISC-V 아키텍처에서 상위 즉시값(Upper Immediate)을 레지스터에 로드하거나, 프로그램 카운터(PC)와 상위 즉시값을 연산하는 명령어 형식입니다. U-type 명령어는 주로 큰 즉시값을 사용하여 연산을 수행하거나, 주소 계산에 사용됩니다. RISC-V는 32비트 아키텍처이므로, 큰 값을 즉시값(immediate)으로 처리하기 위해 U-type 명령어가 필요합니다.U-type 명령어의 구조U-type 명령어는 다음과 같은 필드로 구성됩니다:| imm[31:12] | rd      | opcode || 20 bits        | 5 bits | 7 bits    | 각 필드의 역할은 다음과 같습니다:imm[31:12] (20 bits): 상위 20비트 즉시값입니다. U-typ..
B-Type B-type은 RISC-V 아키텍처에서 조건부 분기(branch) 연산을 수행하는 명령어 형식입니다. B-type 명령어는 두 레지스터 값의 비교 결과에 따라 프로그램의 제어 흐름을 변경합니다. 이를 통해 조건문(예: if-else)이나 반복문(예: for, while)을 구현할 수 있습니다. B-type 명령어는 특정 조건이 만족될 때 지정된 오프셋만큼 점프하여 다른 명령어로 분기합니다.B-type 명령어의 구조B-type 명령어는 다음과 같은 필드로 구성됩니다:| imm[12], imm[10:5] | rs2    | rs1     | funct3 | imm[4:1], imm[11] | opcode | | 1 bit,       6 bits        | 5 bits | 5 bits | 3 bits ..
S-Type S-type은 RISC-V 아키텍처에서 메모리 저장(store) 연산을 수행하기 위한 명령어 형식입니다. S-type 명령어는 레지스터의 데이터를 메모리에 저장하는 작업을 수행하며, 주로 변수나 배열의 값을 메모리에 쓰는 데 사용됩니다. 이 명령어는 메모리 주소를 계산하기 위해 **기준 레지스터(base register)**와 **즉시값(offset)**을 사용합니다.S-type 명령어의 구조S-type 명령어는 다음과 같은 필드로 구성됩니다:css코드 복사| imm[11:5] | rs2     | rs1     | funct3 | imm[4:0] | opcode || 7 bits        | 5 bits  | 5 bits | 3 bits  | 5 bits      | 7 bits    |각 필드의 ..
I-Type I-type은 RISC-V 아키텍처에서 레지스터와 즉시값(immediate)을 사용하는 연산을 수행하기 위한 명령어 형식입니다. I-type 명령어는 즉시값을 피연산자로 사용하여 산술, 논리, 메모리 접근 및 제어 흐름 등 다양한 작업을 수행합니다. I-type은 RISC-V 명령어 집합에서 매우 중요한 부분을 차지하며, 프로그램의 효율성과 간결성을 극대화하는 역할을 합니다.I-type 명령어의 구조I-type 명령어는 다음과 같은 필드로 구성됩니다:| imm[11:0] | rs1     | funct3 | rd       | opcode || 12 bits      | 5 bits  | 3 bits  | 5 bits | 7 bits    | 각 필드의 역할은 다음과 같습니다:imm[11:0] (12 b..
R-Type R-type은 RISC-V 아키텍처에서 레지스터 간의 연산을 수행하기 위한 기본적인 명령어 형식입니다. RISC-V 명령어 집합에서 산술 연산, 논리 연산, 시프트 연산, 비교 연산 등 여러 중요한 연산이 R-type으로 구현됩니다. R-type 명령어는 레지스터만을 사용하여 연산을 수행하며, 즉시값(immediate)을 사용하지 않습니다.R-type 명령어의 구조R-type 명령어는 다음과 같은 필드로 구성됩니다:| funct7 | rs2    | rs1     | funct3  | rd      | opcode || 7 bits  | 5 bits | 5 bits | 3 bits   | 5 bits | 7 bits    | 각 필드의 역할은 다음과 같습니다:funct7 (7 bits): 특정 연산의 종..
x28~x31(Temporaries) register x28에서 x31 레지스터는 RISC-V 아키텍처에서 **임시 레지스터(Temporaries)**로 사용되며, 각각 t3, t4, t5, **t6**라는 이름을 가지고 있습니다. 이 레지스터들은 함수 호출 시 값이 보존되지 않는(caller-saved) 레지스터로, 함수 내에서 임시 계산이나 단기 데이터 저장을 위한 용도로 사용됩니다. 다른 함수가 호출될 때 이 레지스터들의 값이 보존되지 않기 때문에, 함수는 이들 레지스터를 자유롭게 사용할 수 있습니다.x28 (t3) ~ x31 (t6) 레지스터의 주요 역할과 사용 이유임시 데이터 저장소:t3 (x28)부터 t6 (x31) 레지스터는 함수 내에서 임시 데이터를 저장하는 데 사용됩니다. 함수가 연산을 수행하는 동안 일시적으로 값을 저장하거나, 중간 계산 ..
x18-x27 (callee-saved) register x18에서 x27 레지스터는 RISC-V 아키텍처에서 **저장된 레지스터(Saved Registers)**로 사용되며, 각각 **s2**부터 **s11**이라는 이름을 갖습니다. 이 레지스터들은 함수 호출 시 값이 보존되는(callee-saved) 레지스터들로, 함수가 호출되는 동안 중요한 데이터를 안전하게 유지하기 위해 설계되었습니다. 이는 함수가 중첩되거나 재귀적으로 호출될 때 데이터의 일관성을 보장하며, 함수 내에서 장기적인 데이터를 저장하고 사용할 수 있도록 합니다.x18 (s2) ~ x27 (s11) 레지스터의 주요 역할과 사용 이유중요한 데이터 보존:s2 (x18)부터 s11 (x27)까지의 레지스터는 함수가 자신의 실행 중에 중요한 데이터를 저장하는 데 사용됩니다. 예를 들어, 반복적으로 사..