2010-09-29 26 views
10

Çalışma zamanı hata ayıklayıcısını kullanıyorum.imul assembly komutu - bir işlenen?

EAX: 0000 0023 EDX: 5555 5556

imul edx 

EAX: aaaa aac2 EDX: 0000 000 Mr

Ben tamamen karıştı ve bu çarpma nasıl çalıştığını anlamaya olamaz. Burada neler oluyor? etkin demektir imul tek işlenen formu (EDX ile olduğu gibi) bir 32 bitlik argüman geçirilir/

cevap

21

: 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, esiEAX 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, 1234ecx = 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.

+0

'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? –

+2

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. –