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.