4. Instruksi logika & bitwise¶
4.1. Konvensi dokumen¶
Notasi: Rd, Rn menunjuk register ARM R0-R7 kecuali dalam kasus instruksi khusus di mana R0-R15 dapat digunakan. Rn<a-b> menunjuk register ARM yang isinya harus berada dalam rentang a <= contents <= b. Dalam kasus instruksi dengan dua argumen register, diperbolehkan bagi keduanya untuk identik. Misalnya, berikut ini akan mengubah R0 menjadi nol (Python R0 ^= R0) terlepas dari isi awalnya.
eor(r0, r0)
Instruksi-instruksi ini mempengaruhi flag kondisi kecuali dinyatakan sebaliknya.
4.2. Instruksi logika¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffyaitu Rd = komplemen 1 dari Rnbic(Rd, Rn)
Rd &= ~Rnhapus bit Rd menggunakan mask di Rn
Perhatikan penggunaan "and_" alih-alih "and", karena "and" adalah kata kunci yang dicadangkan dalam Python.
4.3. Instruksi geser dan rotasi¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnGeser logika ke kananasr(Rd, Rn<1-32>)
Rd >>= Rngeser aritmetika ke kananror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd dirotasi ke kanan sebanyak Rn bit.
Rotasi sebanyak (misalnya) tiga bit bekerja sebagai berikut. Jika Rd awalnya berisi bit b31 b30..b0 setelah rotasi akan berisi b2 b1 b0 b31 b30..b3
4.4. Instruksi khusus¶
Kode kondisi tidak terpengaruh oleh instruksi-instruksi ini.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) mengembalikan jumlah bit biner nol sebelum bit biner satu pertama di Rn.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) mengembalikan isi Rn yang dibalik bitnya. Jika Rn berisi bit b31 b30..b0 maka Rd akan diset ke b0 b1 b2..b31
Trailing zero dapat dihitung dengan melakukan pembalikan bit sebelum mengeksekusi clz.