: gerçi EAX notasyonu: Ben EDX anlamıyorum benzer question here o imul ebx ; result in EDX:EAX
fark EAX * EDX
burada hem EAX
ve EDX
, 32 bit kayıtlardır.
İki 32 bit değerindeki ürün mutlaka 32 bit'e sığmaz: tam çoğaltma sonucu 64 bit alabilir. Cevabın yüksek 32 biti EDX
kayıt defterine ve düşük 32 bit EAX
kaydına yazılacaktır; Bu EDX:EAX
gösterimi ile temsil edilir.
sadece imul
2-işlenen formu kullanarak, sonucun düşük 32 bit istiyorsanız
; Daha hızlı çalışır ve herhangi bir örtük işlenene sahip değildir (böylece her hangi bir yazmaç en uygun olanını kullanabilirsiniz). Beklediğiniz gibi
imul ecx, esi
EAX
veya EDX
dokunmadan, ecx *= esi
yapar. unsigned x=...;
x *= y;
'un girdi olarak sonuç için aynı genişliğe sahip olduğu C gibi.
imul
ayrıca bir anlık forma sahiptir: imul ecx, ebx, 1234
ecx = ebx * 1234
yapar. Birçok montajcı, imul ecx, ecx, 1234
için imul ecx, 1234
'u kısa el olarak kabul edecektir. doğru işaretli veya işaretsiz için imul
çalışma
Bu 32x32 => 32 bit formları; Tek işlemcili mul
ve imul
sonuçları, yalnızca alt yarıda (EDX
), alt yarı EAX
çıkışında farklılık gösterir.
Bkz. Intel's instruction reference manual entry for imul
.
'imul' için verilen kayıt 'eax' olduğunda ne olur? Hala aynı şeyi yapıyor mu? Eğer örneğin 'eax' gibi 'eax' veya 'edx' dışında bir şey verirseniz? –
imul komutunun birçok şekli vardır. Tek bir 32bit argümanı (bellek veya kayıt) alan form daima sonucu EDX: EAX çiftinde döndürür. –