x86 karşılaştırma talimatının: cmp x, y
bir çıkarma işlemini gerçekleştirdiğini ve sonuca göre çeşitli bayrakları ayarladığını duydum.x86 XOR'u Çıkarma Yerine Kullanan Karşılaştırma Talimatı
Şimdi, eğer iki işlenenin eşit olup olmadığını sınamak istiyorsam ne olur? Bir çıkarma yerine XOR yapmak çok daha hızlı mı? Benim sorum şu, iki işlenenin eşit olup olmadığını anlamak için bir XOR ile bir karşılaştırma yapan bir talimat var mı? Belki de şu şekilde görünürdü: cmpeq x, y
veya cmpxor x, y
.
Sadece eşitlik için test etmek istersem, cmpxor
kullanmak cmp
'dan daha hızlı olurdu, bu bir çıkarma işlemi yapar. Bana bir hızlanma verecek cmpxor
gibi bir talimat var mı?
Ayrıca, xor
'un zero flag
'u ayarlayacağını bildiğimi de söylemek isterim. Ancak xor x, y
yaparsam, x
değiştirir. Bunu istemiyorum. Hem işlenenleri yalnız bırakacak bir karşılaştırma talimatı istiyorum.
Neden XOR'un "çok daha hızlı" olacağını varsayalım? – jalf
“cmp” zaten başka herhangi bir komut (xor dahil) kadar hızlı olduğu için “daha hızlı” olmazdı. Bazı µarchlerde, 'cmp' komutu, bağımlı bir branşman talimatıyla, ön uç tarafından tek bir opop'a bağlanabilir ve bu da daha hızlı bir şekilde daha hızlı hale getirilebilir. Bu, Intel’in elverişli ve okunmaya değer olan Optimizasyon El Kitabında belgelenmiştir. –
Ira Baxter bunu çok iyi söyledi: * Teknik olarak bir SUB XOR'den daha uzun sürmeli çünkü XOR bit-by-bit paralel iken, bu da benim mantığımdı. – Aaron