목차
2-18
Immediate Operands
C code of using a constant 4
g = g + 4;
Allow a constant inside the instruction
addi x22, x22, 4
-> add의 i는 이미디어틀리(?) 첫번째는 레지스터, 두번째는 상수
프로그램이 차지하는 공간이 작아짐
Alternative: to define constants and load them in memory
ld x9, AddrConstant4(x3)
add x22, x22, x9
... ...
somewhere : 4 #AddrConstant4(x3)
Sign Extension
Representing a number using more bits
- preserve the numeric value
Replicate the sign bit to the left
cf. unsigned values are extended with 0s
Ex) 8-bit to 16-bit
+2 : 0000 0010 => 0000 0000 0000 0010
-2 : 1111 1110 => 1111 1111 1111 1110
-> 부호를 상위 부분에 채워넣는것처럼 보이는데 sign extension
수가 유한하기 때문에 자리를 맞춰야함
2-19쪽 보면
add x22, x22, x9
addi x22, x22, 4
더하기 위해 값을 확장해야함.제한된 공간을 어떻게 나눠쓸거냐
RISC-V instructions
- 1b (load byte) : sign-extend loaded byte
- 1bu (load byte, unsigned) : zero-extend loaded byte
- addi : sign-extend immediate value
- beq : sign-extend the displacement
Instruction Formats
An instruction is composed of fields
- Operation code
- Operands (register numbers and memory location)
Instructions are encoded in binary
- Operations are referred as a number
- Registers are referred as another number (ex x0, x1, et al.)
Instruction format
- Layout of the instruction
- Instruction formats encodes operation code (opcode) and operands kept in a register or memory
- All RISC-V instructions are 32 bits long (the same length as data)
- Regularity!
2-22
R-format
일단 opcode를 7bit만 잡아놓음. 이론상으론 128개만 나오는데, 얘를 확장하면 됨
무조건 늘리는건 부담있음. 전체 공간을 줄이게 되니까
2-23
더하기에 해당하는 번호가 51. x9는 9
소스 레지스터 두개 순서대로 20 21번 순서 상관x
나머지는 0 0
opcode는 51, func은 0 0이 된거.
2-24
I-format
위에서 rs2가 5비트였으니까 immediate에서 충분하다고 생각하는 12비트를 채우려면 7비트가 남았으니까 일부로 func을 7 3으로 나눈거임
immediate는 12비트니까 저만큼 표현가능
2-27
S-format
데스티네이션이 달라짐
immediate이 분산되어있음. 인덱스 11~5, 4~0
레지스터 2개 imediate 12bit는 똑같은데,
sd는 ld랑 방향이 바뀜
메모리 자체가 데스티네이션. sd x9, 64(x22)에서 따지고보면 x9가 데스티네이션. 명목상 데스티네이션은 없음. 셋 다 소스
rd를 쓰는건 딱 데스티네이션이 있을때!
sd는 데스티네이션이 없으니까 그럴땐 immediate를 나눈거
'Stored Program' Computers
일반적으로 생각할 수 있는 추상화된 모델 :
프로그램이 메모리 위에 있다.
Logical Instructions
instructions for bitwise manipulation
1&2 : 비트연산자. ~001 & ~010 = 000
1&&2 : 논리연산자. 결과는 1.참.
Useful for extracting and inserting groups of bits in a word
* x 동그라미더하기 1 = 위에줄있는 x
-> Not은 xor로 쓸수잇음
a<<2 = 곱하기, 2의 제곱
a>>2 = 나누기, 2의 제곱
1111110 ->left -> 11111100 : -2 -> -4
1111110 ->right-> ?1111111 => 수인지 논리인지 판단해서 채우기?
srl 의 l른 logical
sra의 a는 산술적어쩌고
2-31
Select some bits, clear others to 0
-> 의미 : 특정 수 빼고 다 0으로 덮어라
2-32
Set some bits to 1, leave others unchanged
2-33
Create a 1 if bits are different, create a 0 if bits are the same
2-36
funct6은 안쓰는 6비트. 항상 0. 전체 12비트를 다 쓸 필요 없어서.