4. Logic & Bit Operation Instructions¶
4.1. File Specification¶
Symbol:Except for the special instructions using R0-R15, Rd, Rn
means ARM registers R0-R7. Rn<a-b>
means the ARM register whose content is in the range of a <= contents <= b
.
For instructions with two register parameters, both are allowed to be the same. For example, regardless of the initial content, the following instruction will reset R0 to zero (Python R0 ^= R0
).
- eor(r0, r0)
Unless otherwise specified, these instructions affect condition flags。
4.2. Logic instruction¶
- and_(Rd, Rn)
Rd &= Rn
- orr(Rd, Rn)
Rd |= Rn
- eor(Rd, Rn)
Rd ^= Rn
- mvn(Rd, Rn)
Rd = Rn ^ 0xffffffff
i.e. Rd = 1’s complement of Rn - bic(Rd, Rn)
Rd &= ~Rn
bit use the mask in Rn to clear Rd
Note: Use “and_” instead of “and” because “and” is a reserved keyword in Python.
4.3. Conversion and rotation instructions¶
- lsl(Rd, Rn<0-31>)
Rd <<= Rn
- lsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> Rn
Logical shift right - asr(Rd, Rn<1-32>)
Rd >>= Rn
Arithmetic shift right - ror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)
Rd turn right Rn bit.
The three-position rotation operation is as follows. If Rd initially contains bits b31 b30..b0
, then it will contain b2 b1 b0 b31 b30..b3
after rotation.
4.4. Special instructions¶
Condition codes are not affected by these instructions.
- clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) Returns the number of binary zero digits before the first binary digit in Rn.
- rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) Returns the bit-reversed content of Rn. If Rn contains bits b31 b30..b0
, then Rd will be set to b0 b1 b2..b31
。
Before executing clz, the null point can be calculated by performing a bit reversal.