4. التعليمات المنطقية وعلى مستوى البتات

4.1. اصطلاحات المستند

الترميز: تشير Rd, Rn إلى سجلات ARM المسماة R0-R7 إلا في حالة التعليمات الخاصة حيث يجوز استخدام R0-R15. وتشير Rn<a-b> إلى سجل ARM يجب أن تقع محتوياته في النطاق a <= contents <= b. في حالة التعليمات ذات الوسيطين السجلّيّين، يُسمح بأن يكونا متطابقين. على سبيل المثال ستصفّر التعليمة التالية R0 (في Python R0 ^= R0) بغض النظر عن محتوياته الأولية.

  • eor(r0, r0)

تؤثر هذه التعليمات على أعلام الحالة إلا حيث يُذكر خلاف ذلك.

4.2. التعليمات المنطقية

  • and_(Rd, Rn) Rd &= Rn

  • orr(Rd, Rn) Rd |= Rn

  • eor(Rd, Rn) Rd ^= Rn

  • mvn(Rd, Rn) Rd = Rn ^ 0xffffffff أي Rd = المتمم الأحادي لـ Rn

  • bic(Rd, Rn) Rd &= ~Rn مسح بتات Rd باستخدام القناع في Rn

لاحظ استخدام "and_" بدلًا من "and"، لأن "and" كلمة محجوزة في Python.

4.3. تعليمات الإزاحة والدوران

  • lsl(Rd, Rn<0-31>) Rd <<= Rn

  • lsr(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 بت.

يعمل الدوران بمقدار (على سبيل المثال) ثلاثة بتات على النحو التالي. إذا احتوى 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.

  • rbit(Rd, Rn) Rd = bit_reverse(Rn)

تُرجع bit_reverse(Rn) محتويات Rn معكوسة البتات. إذا احتوى Rn على البتات b31 b30..b0 فسيُضبط Rd على b0 b1 b2..b31

يمكن عدّ الأصفار اللاحقة بإجراء عكس للبتات قبل تنفيذ clz.