lbu
lyszt.net은 lbu 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
lbu는 메모리에서 1바이트(8비트)를 부호 없는 값으로 읽습니다. lb와 짝을 이루며, 둘은 레지스터의 나머지 부분을 채우는 방식에서만 차이가 납니다. 둘 다 동일한 주소 지정 방식을 사용하여 1바이트를 읽습니다. 바이트와 주소 지정 형식은 lb 페이지에서 다룹니다. lbu의 형식은 아래와 같습니다.
lbu rd, offset(rs1)
레지스터는 32비트를 담으므로, 1바이트 로드는 24비트를 채워야 합니다. lb는 바이트의 최상위 비트를 그 비트들에 복사하는데, 이는 부호 확장이며 음수를 만들 수 있습니다. lbu는 그 비트들을 0으로 채우므로, 결과는 항상 0과 255 사이에 있습니다. u는 부호 없는 읽기를 나타냅니다.
텍스트 로드는 보통 lbu를 사용합니다. 문자 코드는 부호가 없으며, 악센트가 있는 글자와 여러 기호를 포함한 많은 코드가 최상위 비트가 설정되어 있습니다. 부호를 확장하는 lb는 그것들을 음수로 만들어 비교를 깨뜨립니다. 표준 텍스트 루프는 lbu를 사용합니다. 바이트를 로드하고, 그것이 0인지 확인하는데, 이는 텍스트의 끝을 나타내며, 처리하고 주소에 1을 더합니다.
RISC-V 매뉴얼은 lb와 lbu를 하프워드 로드의 8비트 버전으로 정의하며, 유효 주소는 레지스터 rs1에 부호 확장된 12비트 오프셋을 더한 것과 같습니다. 메모리는 바이트 주소 지정이므로, 각 주소는 1바이트를 가리킵니다.
lbu는 이미지의 색상 채널, 원시 데이터 버퍼, 인터프리터의 명령어 바이트를 포함한 다른 바이트 데이터에도 적합합니다. 이렇게 로드된 바이트는 처리할 부호가 없으므로, 단일 바이트에서 더 큰 값을 재구성할 때 시프트 및 OR와 직접 결합됩니다. 8비트 데이터가 부호 있는 경우에만 lb를 사용하십시오.
예시
.data val: .byte 0xff .text la t0, val lbu t1, 0(t0) # t1 = 255 (zero-extended)
