본문 바로가기
지식/컴퓨터아키텍쳐

Machine Language

by 칙칙폭폭 땡땡 2025. 10. 16.
반응형

기계어는 컴퓨터 하드웨어가 직접 이해하고 실행할 수 있는 명령어의 이진수로 나타낸 것을 말한다.

RISC-V에서는 모든 명령어가 32비트로 표현된다

명령어의 형식으로는 4가지 타입이 있다

구분
명령어 종류
역할
예시
R-Type
Register 타입
레지스터끼리 연산
add, sub, and, or
I-Type
Immediate 타입
즉값(상수)과 연산 또는 load
addi, lw, jalr
S/B-Type
Store / Branch 타입
메모리 저장, 조건 분기
sw, sh, beq, bne
U/J-Type
Upper / Jump 타입
상위비트 로드, 점프 명령
lui, jal

R-Type

R 타입은 레지스터간 연산을 수행하는 명령어 형식이다.

두 개의 레지스터의 값을 읽어서 연산 결과를 다른 레지스터에 저장한다.

비트 구간
필드명
비트 수
설명
31–25
funct7
7 bits
연산 종류를 구분하는 추가 정보
24–20
rs2
5 bits
두 번째 피연산자(source register 2)
19–15
rs1
5 bits
첫 번째 피연산자(source register 1)
14–12
funct3
3 bits
연산 종류를 세분화하는 코드
11–7
rd
5 bits
연산 결과를 저장할 목적지(destination register)
6–0
opcode
7 bits
명령어의 대분류 (예: ALU 연산, 메모리, 점프 등)

opcode에 따라서 어떤 타입의 어떤 연산을 수행할지 결정한다.

func3은 같은 opcode내에서 연산의 종류를 결정한다.

func7은 ALU 안에서 add/sub, srl,sra 등 미세한 차이를 구분한다.

(add와 sub은 opcode와 func3이 같다.)

opcode에서 func3을 거쳐 func7로 갈수록 더 가지가 늘어나는 것처럼 세분화된다.

I-Type

I 타입은 레지스터 하나와 즉시값을 이용하는 연산 형식이다

혹은 메모리에서 값을 읽어올 때도 I 타입 구조를 사용한다.

비트 구간
필드명
비트 수
설명
31–20
imm
12 bits
즉시값(상수, signed)
19–15
rs1
5 bits
첫 번째 피연산자(source register 1)
14–12
funct3
3 bits
연산 종류를 세분화하는 코드
11–7
rd
5 bits
연산 결과를 저장할 목적지(destination register)
6–0
opcode
7 bits
명령어의 대분류 (예: ALU 연산, 메모리, 점프 등)

대표적으로 addi, lw, jal 가 있다.

즉시값은 부호를 가진다.

12비트 즉시값은 2의 보수 표현을 사용해서 나타낸다.

+12 → 0000 0000 1100 -4 → 1111 1111 0010

S-Type

즉시값이 두 부분으로 쪼개져서 인코딩된다.

이 즉시값은 위에서와 같이 12비트의 2의 보수 값으로 나타낸다.

비트 구간
필드명
비트 수
설명
31–25
imm[11:5]
12 bits
즉시값 상위 7비트(상수, signed)
24:20
rs2
5 bits
저장할 데이터가 들어 있는 레지스터
19–15
rs1
5 bits
메모리의 주소 기준 레지스터
14–12
funct3
3 bits
저장 크기 구분 (000=byte, 001=half, 010=word)
11–7
imm[4:0]
5 bits
즉시값 하위 5비트
6–0
opcode
7 bits
Store 명령

대표적으로 sw, sh, sb가 있다.

각각 직관적으로 word, hald, biit다

B-Type

B 타입은 S 타입이랑 구조가 비슷하다.

주소 계산은 현재의 프로그램 카운터에서 즉시값을 offset로 삼아서 이루어진다.

비트 구간
필드명
비트 수
설명
31–20
imm[12,10:5,4:1,11]
12 bits
분기 오프셋 (2의 보수, 짝수 주소 단위)
19-15
rs2
5 bits
두 번째 비교 대상
14-10
rs1
5 bits
첫 번째 비교 대상
9-7
funct3
3 bits
분기 조건 (==, !=, <, >= 등)
6–0
opcode
7 bits
Branch 명령

branch하는 명령어들은 모두 여기에 속한다.

(beq, bne, blt, bge, …)

U-Type

즉시값의 크기가 20비트 이상인 명령어 형식이다

비트 구간
필드
비트수
설명
31–12
imm[31:12]
20
상위 20비트 상수 (하위 12비트는 0으로 자동 채워짐)
11-7
rd
5
즉값을 저장할 레지스터
6-0
opcode
7
U-Type 명령어 (0110111=LUI, 0010111=AUIPC)

J-Type

J 타입은 프로그램 카운터를 상대적으로 변경해서 점프한다.

jal이 여기에 속한다.

비트 구간
필드
비트 수
설명
31-12
imm[20,10:1,11,19:12]
20
점프 오프셋 (2의 보수, instruction 단위)
11-7
rd
5
점프 전의 다음 주소(PC+4)를 저장할 레지스터
6-0
opcode
7
1101111 (JAL 명령어)



반응형

'지식 > 컴퓨터아키텍쳐' 카테고리의 다른 글

Arithmetic for Computers(2)  (0) 2025.10.16
Arithmetic for Computers(1)  (0) 2025.10.16
Instructions(3)  (0) 2025.10.07
Instruction(2)  (0) 2025.10.07
Instructions(1)  (0) 2025.10.07