4. Các lệnh logic & bitwise¶
4.1. Quy ước tài liệu¶
Ký hiệu: Rd, Rn biểu thị các thanh ghi ARM R0-R7 trừ trong trường hợp các lệnh đặc biệt nơi R0-R15 có thể được sử dụng. Rn<a-b> biểu thị một thanh ghi ARM có nội dung phải nằm trong phạm vi a <= contents <= b. Trong trường hợp các lệnh có hai đối số thanh ghi, được phép chúng giống nhau. Ví dụ, lệnh sau sẽ đặt R0 về không (Python R0 ^= R0) bất kể nội dung ban đầu của nó.
eor(r0, r0)
Các lệnh này ảnh hưởng đến các cờ điều kiện trừ khi có ghi chú.
4.2. Các lệnh logic¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xfffffffftức là Rd = bù 1 của Rnbic(Rd, Rn)
Rd &= ~Rnxóa bit của Rd bằng mặt nạ trong Rn
Lưu ý việc sử dụng "and_" thay vì "and", vì "and" là từ khóa dành riêng trong Python.
4.3. Các lệnh dịch chuyển và xoay¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnDịch logic phảiasr(Rd, Rn<1-32>)
Rd >>= Rndịch số học phảiror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd được xoay phải Rn bit.
Một phép xoay (ví dụ) ba bit hoạt động như sau. Nếu Rd ban đầu chứa các bit b31 b30..b0 sau khi xoay nó sẽ chứa b2 b1 b0 b31 b30..b3
4.4. Các lệnh đặc biệt¶
Mã điều kiện không bị ảnh hưởng bởi các lệnh này.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) trả về số lượng bit nhị phân bằng không trước bit nhị phân một đầu tiên trong Rn.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) trả về nội dung đảo bit của Rn. Nếu Rn chứa các bit b31 b30..b0, Rd sẽ được đặt thành b0 b1 b2..b31
Các bit không đuôi có thể được đếm bằng cách thực hiện đảo bit trước khi thực thi clz.