ori
lyszt.net은 ori 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
ori는 상수와 비트 단위 OR 연산을 수행합니다. ori와 or의 관계는 andi와 and의 관계와 같습니다. i는 즉시값(immediate)을 뜻하며, 명령어 안에 인코딩된 고정값입니다. ori는 두 레지스터를 OR하는 대신 레지스터와 그 상수를 OR합니다. OR 규칙은 바뀌지 않습니다. 결과의 각 비트 위치는 그 자리의 두 비트 중 하나라도 1이면 1이 되므로, 상수가 원하는 비트를 설정합니다. 이 연산은 or 페이지에서 설명합니다.
ori의 형식은 아래와 같습니다. rs1의 값을 상수 imm과 OR한 뒤 결과를 rd에 씁니다.
ori rd, rs1, imm
OR은 비트를 설정하고 나머지는 그대로 두므로, ori는 켜야 할 플래그를 알고 있을 때 그 플래그를 켭니다. 다음 줄은 t0의 오른쪽에서 세 번째 비트를 켜고 다른 비트는 모두 그대로 둡니다. 0b 접두사는 이진 상수를 나타냅니다.
ori t0, t0, 0b100
구성 레지스터, 권한 플래그, 상태 워드는 서로 독립적인 켜짐/꺼짐 비트를 담고 있으며, ori는 마스크 레지스터 없이 명령어 하나로 선택한 비트를 켭니다.
RISC-V 매뉴얼은 12비트 즉시값이 연산 전에 32비트로 부호 확장된다고 명시합니다. 따라서 음수 상수는 상위 비트가 모두 설정되어 있으며, -1과 ori를 하면 결과의 모든 비트가 설정됩니다.
상수는 andi, addi와 마찬가지로 12비트로 제한됩니다. 이 범위를 벗어나는 비트를 설정하려면 li로 더 넓은 마스크를 레지스터에 로드한 뒤 or를 사용합니다.
예시
li t0, 0 ori t1, t0, 0xf # t1 = 0xf
