Wat is de betekenis van XOR in x86-assemblage?

Ik begin met assembleren en kom steeds xor tegen, bijvoorbeeld:

xor     ax, ax

Wist het alleen de waarde van het register?


Antwoord 1, autoriteit 100%

A XOR Bin het Engels zou worden vertaald als “zijn A en B niet gelijk”. Dus xor ax, axzal axop nul zetten aangezien ax altijd gelijk is aan zichzelf.

A B | A XOR B
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0

Antwoord 2, autoriteit 39%

xor reg, regwordt vaak gebruikt om het register te wissen. Het kan een alternatief zijn voor mov reg, 0

AFAIR, het was in sommige gevallen sneller (of korter).

En natuurlijk is XOR zelf een exclusieve OR (ook wel: exclusieve disjunction) operatie (maar het is jammer om hier dergelijke basisprincipes te beschrijven – gebruik Wikipedia)


Antwoord 3, autoriteit 21%

xor ax, axis de snelst mogelijke manier om het bijlregister op 0te zetten. Snelst in termen van de grootte van de instructie en het aantal instructies. Voor details over hoe het werkt, heb je een beetje kennis van beetje rekenen nodig.

XOR-bewerking tussen twee bits retourneert 1 als één en slechts éénvan de twee bits 1 is; 0 anders. Een andere manier om uit te leggen is dat het 1 retourneert als de twee bits verschillend zijn; 0 anders.

XOR-bewerking tussen twee binaire getallen van dezelfde lengte werkt eveneens bit-voor-bit. XOR twee getallen krijg je een getal met bits ingesteld op 1 waar corresponderende bits van de twee operanden verschillen, 0 wanneer corresponderende bits hetzelfde zijn.

Vanuit deze kennis is het vrij eenvoudig in te zien dat als de twee operanden hetzelfde zijn (ax en ax bijvoorbeeld), het resultaat 0 zal zijn.


Antwoord 4, autoriteit 11%

xor register, registerwordt vaak gebruikt om een ​​register te ‘nul’, omdat alle bits met elkaar worden vergeleken:

0-bits verblijf nul.
1-bits worden nul, omdat 1 XOR 1 ook 0 is 0.


Antwoord 5, Autoriteit 7%

xor = exclusief of. Zie de definitie van Wikipedia voor exclusief of .

Als u XOR een register met zichzelf wilt registreren, zal deze nul dat registreren.

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

Laten we de waarde 41 innemen zoals voorbeeld (in binair):

   101001
xor 101001
  = 000000

Antwoord 6, Autoriteit 5%

A B | XOR
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0

De XOR-instructie doet de bovenstaande bediening op elk paar bits in de twee operanden. Dus 0xFF xor 0xFFZOU ZIJN 0x00EN 0x55 xor 0xAAZOU ZIJN 0xFF. En ja, xor ax axWist ax.


Antwoord 7, Autoriteit 4%

In dit geval zal het het register wissen … XOR is een “exclusieve of” … dus als bijl 1010 bevat en u exclusief of dat met 1010 0000 (gewist)


Antwoord 8, Autoriteit 4%

Toen ik lang geleden begon te programmeren, was er geen exclusief of op de processor of in de compiler. Toen ik erop aankwam, bleef ik aan de beschrijvingen:

  • of: true als a = 1 of b = 1 of beide = 1
  • XOR: TRUE als A = 1 of B = 1 maar niet beide = 1

Dus:

0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1

en

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

Antwoord 9, Autoriteit 2%

Het bepaalt de logische exclusieve of

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

Dus, alleen WAAR als een van de uitdrukkingen waar is, niet beide.


Antwoord 10, autoriteit 2%

Als ik het me goed herinner, is xor ax, axeen montage-instructie van één byte, terwijl mov ax, 0minstens 3 zou zijn en waarschijnlijk iets langer zou duren om uit te voeren . Het zal zeker langer duren om te decoderen dan de xor-instructie.


Antwoord 11, autoriteit 2%

xor ax,ax wordt gebruikt om ax op 0 te zetten.

Reden: typisch xor-instructies op een processor nemen minder bytes in beslag dan bij het gebruik van movl 0,%ax

Other episodes