sb

sb

RISC-V 어셈블리 참조

lyszt.net은 sb 및 기타 RISC-V 명령어를 더 자세히 다룹니다.

인코딩 형식

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

설명

sb는 1바이트(8비트)를 메모리에 씁니다. 이는 스토어가 쓸 수 있는 가장 작은 양입니다. 이는 lb 및 lbu 로드의 스토어 버전에 해당합니다. 구문은 아래에 나와 있습니다. 소스 레지스터 rs2의 값을 읽고 그 최하위 8비트를 베이스 레지스터 rs1에 오프셋을 더한 주소에 씁니다. 피연산자 배치는 sw와 일치하며, 소스 레지스터가 먼저 나열됩니다.

sb rs2, offset(rs1)

레지스터의 32비트 중 최하위 8비트만 메모리에 도달하고 나머지 비트는 버려집니다. 스토어는 값을 좁히고 하위 바이트를 유지하므로 부호 있는 형식이나 부호 없는 형식이 없습니다. 바이트보다 넓은 값은 경고 없이 여분의 비트를 잃습니다. 300을 저장하면 44가 기록되는데, 300이 256을 넘어 랩되기 때문입니다.

메모리의 최소 단위는 바이트이므로 sb는 데이터를 한 바이트씩 구축하며, 텍스트를 문자별로 조립하거나 버퍼를 채우거나 개별 색상 값을 쓰는 등의 작업에 사용됩니다. 연속된 바이트는 1씩 떨어진 주소를 차지하므로 루프는 1을 더하여 진행합니다.

RISC-V 매뉴얼에 따르면 sb는 레지스터 rs2의 하위 8비트를 rs1에 부호 확장된 12비트 오프셋을 더한 주소의 메모리에 저장합니다. 메모리는 바이트 주소 지정이므로 바이트 스토어는 항상 자연스럽게 정렬됩니다.

일반적인 연습 문제는 텍스트를 손으로 작성합니다. 각 문자의 코드를 sb로 저장하고, 시퀀스를 0 바이트로 끝낸 다음, 그것을 출력합니다. 메모리에 있는 코드 72, 105, 0은 단어 Hi로 출력되며, 이는 문자열이 0으로 종료된 연속 메모리 슬롯의 바이트임을 보여줍니다. 스토어는 대상 바이트 하나만 변경하고 그 옆의 바이트는 이전 값을 유지합니다.

예시

la t0, slot
li t1, 200
sb t1, 0(t0)   # memory at slot now holds the low 8 bits, 200