2011-10-15 30 views
5

Çoğu derleyici, 32 bit ortamlarda 64 bit işlenen (örneğin uzun int) işlemlerini nasıl gerçekleştirir? Diğer bir deyişle, bu işlemleri tek bir adımda uygulamak için bir yol var mı yoksa bu işlemleri gerçekleştirmek için birden fazla bellek konumuna erişmemiz gerekiyor mu?32 bit mimarilerde 64 bit işlenen üzerinde işlemler?

+0

veya çoklu kayıtları doğrusu –

cevap

5

64-bit bir değer tutmak için iki yazmaç kullanırlar. Alt 32-bit ve bir üst 32-bit için bir tane. x86 için

, 64 bit Toplama/çıkarma kullanılarak yapılır ile-carry-ekleme ve çıkarma-ile-ödünç talimatları:

add %eax, (lower 32-bits of operand) 
adc %edx, (upper 32-bits of operand) 

64-bit çarpma çok daha karmaşıktır, ama aynı zamanda bir kullanılarak yapılır 32-bit çarpanları ve 32-bit eklenti-taşıma talimatlarının kombinasyonu. yükler ve mağazalarda

(2 basamak uzun çarpma benzer bir şekilde) evet, iki 32-bit değerleri/yüklü iki katmanda üzerine/içine saklanması gerekir.

Benzer şekilde, 128-bit tamsayı 64 bit donanım üzerinde uygulanabilir. GCC bunu bir uzantı olarak destekler.

+0

Ne 32 bit (x86) donanım üzerinde 128 bitlik tamsayılar hakkında? –

+1

Çirkinleşiyor. Bu noktada çok hassas aritmetikten çok farklı değil. Ek olarak, 3 'adc' talimatlarını zincirlersiniz. (boru hattınızı öldürebilecek taşıma gemisine bağımlı olduğunuzu unutmayın ...) Çarpma için, 16 x 32-bit çarpanları ve bir demet “add” ve “adc” yapmak zorundasınız. .. Bunu destekleyen herhangi bir derleyicinin farkında değilim. – Mysticial

İlgili konular