4. Logiska och bitvisa instruktioner¶
4.1. Dokumentkonventioner¶
Notation: Rd, Rn betecknar ARM-registren R0-R7 förutom i fallet med specialinstruktionerna där R0-R15 kan användas. Rn<a-b> betecknar ett ARM-register vars innehåll måste ligga i intervallet a <= contents <= b. I fallet med instruktioner med två registerargument är det tillåtet att de är identiska. Till exempel kommer följande att nollställa R0 (Python R0 ^= R0) oavsett dess ursprungliga innehåll.
eor(r0, r0)
Dessa instruktioner påverkar villkorsflaggorna förutom där annat anges.
4.2. Logiska instruktioner¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffdvs. Rd = 1-komplementet av Rnbic(Rd, Rn)
Rd &= ~Rnbitrensning av Rd med mask i Rn
Observera användningen av ”and_” i stället för ”and”, eftersom ”and” är ett reserverat nyckelord i Python.
4.3. Skift- och rotationsinstruktioner¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnLogiskt högerskiftasr(Rd, Rn<1-32>)
Rd >>= Rnaritmetiskt högerskiftror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd roteras höger Rn bitar.
En rotation med (till exempel) tre bitar fungerar på följande sätt. Om Rd inledningsvis innehåller bitarna b31 b30..b0 kommer det efter rotation att innehålla b2 b1 b0 b31 b30..b3
4.4. Specialinstruktioner¶
Villkorskoder påverkas inte av dessa instruktioner.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) returnerar antalet binära nollbitar före den första binära ettbiten i Rn.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) returnerar det bitomvända innehållet i Rn. Om Rn innehåller bitarna b31 b30..b0 sätts Rd till b0 b1 b2..b31
Avslutande nollor kan räknas genom att utföra en bitomvändning innan clz exekveras.