4. 논리 및 비트 연산 명령어¶
4.1. 문서 표기 규칙¶
표기: Rd, Rn은 ARM 레지스터 R0-R7을 나타내며, R0-R15를 사용할 수 있는 특수 명령어의 경우는 예외입니다. Rn<a-b>는 그 내용이 a <= contents <= b 범위에 있어야 하는 ARM 레지스터를 나타냅니다. 두 개의 레지스터 인수를 갖는 명령어의 경우, 둘이 동일해도 됩니다. 예를 들어 다음은 R0의 초기 내용과 무관하게 R0을 0으로 만듭니다(Python R0 ^= R0).
eor(r0, r0)
이 명령어들은 달리 명시된 경우를 제외하고 조건 플래그에 영향을 줍니다.
4.2. 논리 명령어¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffff즉 Rd = Rn의 1의 보수bic(Rd, Rn)
Rd &= ~RnRn의 마스크를 사용하여 Rd의 비트 클리어
“and” 대신 “and_”를 사용하는 것에 유의하십시오. “and”는 Python에서 예약된 키워드이기 때문입니다.
4.3. 시프트 및 회전 명령어¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> Rn논리 우측 시프트asr(Rd, Rn<1-32>)
Rd >>= Rn산술 우측 시프트ror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd를 오른쪽으로 Rn 비트 회전.
(예를 들어) 3비트 회전은 다음과 같이 동작합니다. Rd가 처음에 비트 b31 b30..b0을 담고 있다면 회전 후에는 b2 b1 b0 b31 b30..b3을 담게 됩니다
4.4. 특수 명령어¶
이 명령어들은 조건 코드에 영향을 주지 않습니다.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn)은 Rn에서 첫 번째 1 비트 앞에 있는 0 비트의 개수를 반환합니다.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn)은 Rn의 비트를 반전시킨 내용을 반환합니다. Rn이 비트 b31 b30..b0을 담고 있다면 Rd는 b0 b1 b2..b31로 설정됩니다
후행 0의 개수는 clz를 실행하기 전에 비트 반전을 수행하여 셀 수 있습니다.