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 = 1's complement ของ Rnbic(Rd, Rn)
Rd &= ~Rnbit clear Rd โดยใช้ mask ใน Rn
โปรดสังเกตการใช้ "and_" แทน "and" เนื่องจาก "and" เป็น keyword สงวนใน Python
4.3. คำสั่ง shift และการหมุน¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> Rnการเลื่อนบิตไปทางขวาแบบ logicalasr(Rd, Rn<1-32>)
Rd >>= Rnการเลื่อนบิตไปทางขวาแบบ arithmeticror(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
สามารถนับ trailing zero ได้โดยดำเนินการ bit reverse ก่อนดำเนินการ clz