not
의사lyszt.net은 not 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
설명
not는 레지스터의 모든 비트를 반전합니다. 0은 1이 되고, 1은 0이 됩니다. 아래 형식은 소스 레지스터 rs를 읽고, 32비트를 모두 뒤집고, 그 결과를 대상 레지스터 rd에 씁니다. 이 연산은 비트 단위 보수입니다.
not rd, rs
not은 의사 명령어입니다. 즉, 어셈블러가 실제 명령어로 다시 쓰는 읽기 쉬운 이름입니다. 이것은 아래 명령어가 되며, 모두 1인 마스크와의 XOR입니다.
xori rd, rs, -1
XOR는 마스크가 1인 곳마다 비트를 뒤집으므로, 모두 1인 마스크는 모든 비트를 뒤집습니다. 값 -1은 비트로 모두 1이며, 이것이 마스크로 작동하는 이유입니다. RISC-V에는 전용 반전 명령어가 없는데, 이 재작성이 그것을 처리하기 때문입니다.
not은 마스크의 반대를 생성합니다. 어떤 패턴이 특정 비트를 선택하면, not은 나머지를 선택하는 패턴을 생성합니다. not 뒤에 and를 사용하면 원래 마스크가 지정한 비트가 지워지며, 이는 일련의 플래그를 끕니다.
RISC-V 매뉴얼은 not을 상수 -1을 사용하는 xori의 어셈블러 의사 명령어로 정의하고, 그 xori를 레지스터 rs1의 비트 단위 논리 반전으로 설명합니다.
not과 neg는 다른 결과를 냅니다. not은 비트를 뒤집고, neg는 부호를 뒤집습니다. 5의 not은 -6이고, 5의 neg는 -5입니다. 시뮬레이터의 트레이스는 not 대신 실행되는 xori를 보여줍니다.
확장 대상
xori rd, rs, -1
어셈블러는 이 의사 명령을 위에 나열된 실제 명령 또는 명령들로 대체합니다.
예시
li t0, 0 not t1, t0 # t1 = -1 (every bit flipped)
