2011-08-31 14 views
11

Bir süredir montaj ile oynuyordum ve bazı kodlara bakıyorum. AL'nin ilk olarak 0x84 olarak ayarlandığı , sonra cmp AL, 0x30 kullanılır. Bu komut daha sonra Taşma bayrağını tetikler.Neden cmp 0x84,0x30 taşma bayrağını tetikler?

Okuduğumdan itibaren CMP'nin ilk sayıyı ilk satırdan çıkarması ve ardından bayrakları ayarlamasının, bu durumda 0x84-0x30 olması ve sonuçta 0x54 olması ve taşma olmaması gerekir. Eğer imzasız numaraları olarak bu değerleri yorumlamak iseniz

cevap

18

yalnızca hiçbir taşma var - belki yorumlamak eğer senin 0x84 imzalı olarak, kesinlikle taşma var: imzalı 8 bit değeri olarak yorumlanır

  1. 0x84 -124
  2. olduğunu = -172

-172 imzalanmış bir 8-bitlik bir değer aralığının dışına (+127 -128) olan 48 - imzalanmış 8-bitlik bir değer olarak yorumlanır

  • 0x30 48
  • -124 olduğunu ve t şapka neden OF bayrağı ayarlanır. İmzasız taşmayı işaret eden CF'u kontrol etmelisiniz. CMP için Intel 64 and IA-32 Architectures Software Developer’s Manual itibaren

    , Cilt 2:

    karşılaştırılması Birinci işlenen ikinci işlenen çıkarılarak ve daha sonra ALT talimatı ile aynı şekilde durum bayrakları ayarlayarak gerçekleştirilir.

    ve SUB

    :

    SUB komutu tamsayı çıkarma işlemi gerçekleştirir. Hem imzalı hem de imzasız tamsayı işlenenleri için sonucu değerlendirir ve sırasıyla imzalı veya imzasız sonuçta taşma olduğunu belirtmek için OF ve CF işaretlerini ayarlar. SF bayrağı, imzalı sonucun işaretini gösterir.

  • +0

    Carl doğrudur. X86 taşması bayrağı aslında * taşma * taşması anlamına gelir. – wallyk

    +0

    çok iyi cevap. – phoxis

    +0

    Cevabınız için çok teşekkürler! – Maciek

    İlgili konular