lb
lyszt.net은 lb 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
lb는 메모리에서 1바이트를 읽으며, 이는 로드가 가져올 수 있는 가장 작은 단위입니다. 메모리는 바이트로 구성되고, 각 바이트는 8비트이며, 하나의 주소는 하나의 바이트를 식별합니다. lw는 4바이트를 읽고, lh는 2바이트, lb는 1바이트를 읽습니다. 다른 로드 명령과 동일한 주소 지정 방식을 사용합니다: 베이스 레지스터 더하기 오프셋(lw 페이지 참조). 형식은 아래와 같습니다.
lb rd, offset(rs1)
레지스터는 32비트를 담고 바이트는 8비트를 담으므로, 상위 24비트에 값이 필요합니다. lb는 부호 확장을 수행합니다: 바이트의 최상위 비트를 모든 상위 비트에 복사하여 값을 부호 있는 수로 유지합니다. -5를 담은 바이트는 32비트 -5로 도착합니다.
부호 있는/없는 선택은 텍스트, 즉 가장 흔한 바이트 데이터에서 가장 중요합니다. 문자 코드는 부호가 없기 때문입니다. 많은 문자 코드는 최상위 비트가 설정되어 있습니다. 부호 확장 lb로 이러한 문자를 로드하면 음수가 되고, 일반적인 양수 문자 코드와의 비교가 실패합니다. 텍스트에는 lbu, 즉 부호 없는 바이트 로드를 사용하세요. 상위 비트를 0으로 채웁니다. 부호 있는 데이터, 예를 들어 양수나 음수가 될 수 있는 작은 오프셋에는 lb를 사용하세요.
RISC-V 매뉴얼은 lb와 lbu를 하프워드 로드의 8비트 버전으로 정의하며, 레지스터 rs1 더하기 부호 확장된 12비트 오프셋이라는 동일한 유효 주소를 가집니다. 메모리는 바이트 주소 지정이므로, 하나의 주소는 하나의 바이트를 식별합니다.
바이트는 한 주소 간격으로 위치하므로, 루프는 주소에 1을 더하여 바이트 배열을 순회합니다. 일반적인 루프는 바이트를 읽고, 그것이 0인지(텍스트의 끝을 나타내는 표시) 확인하고, 그에 대해 동작하고, 주소를 1만큼 진행합니다.
예시
.data val: .byte -5 .text la t0, val lb t1, 0(t0) # t1 = -5 (sign-extended)
