4. Mantıksal ve bit düzeyinde komutlar#

4.1. Belge kuralları#

Gösterim: Rd, Rn R0-R15’in kullanılabileceği özel komutlar dışında R0-R7 ARM yazmaçlarını belirtir. Rn<a-b> içeriği a <= contents <= b aralığında olması gereken bir ARM yazmacını belirtir. İki yazmaç argümanı olan komutlarda, bunların aynı olmasına izin verilir. Örneğin aşağıdaki kod, başlangıç içeriği ne olursa olsun R0’ı sıfırlar (Python’da R0 ^= R0).

  • eor(r0, r0)

Bu komutlar, aksi belirtilmedikçe koşul bayraklarını etkiler.

4.2. Mantıksal komutlar#

  • and_(Rd, Rn) Rd &= Rn

  • orr(Rd, Rn) Rd |= Rn

  • eor(Rd, Rn) Rd ^= Rn

  • mvn(Rd, Rn) Rd = Rn ^ 0xffffffff yani Rd = Rn’nin 1’e tümleyeni

  • bic(Rd, Rn) Rd &= ~Rn Rn’deki maskeyi kullanarak Rd’nin bitlerini temizle

“and” Python’da ayrılmış bir anahtar sözcük olduğundan, “and” yerine “and_” kullanımına dikkat edin.

4.3. Kaydırma ve döndürme komutları#

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

  • lsr(Rd, Rn<1-32>) Rd = (Rd & 0xffffffff) >> Rn Mantıksal sağa kaydırma

  • asr(Rd, Rn<1-32>) Rd >>= Rn aritmetik sağa kaydırma

  • ror(Rd, Rn<1-31>) Rd = rotate_right(Rd, Rn) Rd, Rn bit kadar sağa döndürülür.

(Örneğin) üç bitlik bir döndürme şu şekilde çalışır. Rd başlangıçta b31 b30..b0 bitlerini içeriyorsa, döndürmeden sonra b2 b1 b0 b31 b30..b3 bitlerini içerir.

4.4. Özel komutlar#

Koşul kodları bu komutlardan etkilenmez.

  • clz(Rd, Rn) Rd = count_leading_zeros(Rn)

count_leading_zeros(Rn), Rn’deki ilk ikili bir bitinden önceki ikili sıfır bitlerinin sayısını döndürür.

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

bit_reverse(Rn), Rn’nin bit ters çevrilmiş içeriğini döndürür. Rn b31 b30..b0 bitlerini içeriyorsa, Rd b0 b1 b2..b31 olarak ayarlanır.

Sondaki sıfırlar, clz çalıştırılmadan önce bir bit ters çevirme işlemi gerçekleştirilerek sayılabilir.