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 &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffأي Rd = المتمم الأحادي لـ Rnbic(Rd, Rn)
Rd &= ~Rnمسح بتات Rd باستخدام القناع في Rn
لاحظ استخدام "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 بت.
يعمل الدوران بمقدار (على سبيل المثال) ثلاثة بتات على النحو التالي. إذا احتوى 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.