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 &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffyani Rd = Rn’nin 1’e tümleyenibic(Rd, Rn)
Rd &= ~RnRn’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 <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnMantıksal sağa kaydırmaasr(Rd, Rn<1-32>)
Rd >>= Rnaritmetik sağa kaydırmaror(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.