2012-09-02 31 views
5

MASM32 kullanıyorum. Bu kod ileÇıkarma bayrağı

:

mov eax,5 
sub eax,10 

CF durum bayrak ayarlanır. Ama benim kalemimi ve kâğıdı kullanarak, MSB'den hiçbir taşınma olmadığını görüyorum. Evet, daha az sayıdaki sayının CF'den çıkarılmasıyla bunu biliyorum. Ama nedenini bilmek istiyorum?

Çünkü bu kodu kullanarak:

mov eax,5 
mov ebx,10 
not ebx 
add ebx,1 
add eax,ebx 

CF bayrağı hiç ayarlanmaz.

+0

8086 programlama veya nedir? – nKandel

cevap

5
5 - 10 = 5 + (-10) = 0x05 + (0xF5 + 1) = 0x05 + 0xF6 = 0xFB 

    00000101 -- 0x05 
    11110101 -- 0xF5 
+ 00000001 -- 0x01 
========== 
    11111011 -- 0xFB 

Ve bu 16 veya 32 veya 64 bit 0 + 1 + 0 = 1 için devam 0

Haklısınız o yürütmek doesnt anlamında olan taşırlar. Bir çıkarma, ikinci işlenenin tersine döndürülmesi ve ters çevrilmiş halde taşınmasıdır. Bazı işlemci aileleri tersine çevirirler. Görünüşe göre, bir çıktının üzerinde gerçekleşen şeyleri tersine çeviren bir şeye bakıyorsunuz.

Yani, eğer 5 - 10, aynı işlemciyi gerçekleştirirse (o zaman) 10 - 5'i aynı işlemci üzerinde deneyin, taşıma biti setini (ödünç alma) görmemelisiniz.

İkinci örneğiniz bir ekleme işlemidir, yürütme işlemi gerçekleştirdiğim herhangi bir işlemci üzerinde ters çevrilmeyecek, ayrıca taşıma bitini bir borçlanmayı gösteren pozitif mantık olarak destekleyecektir. Eğer ikinci durumda one.In küçük gelen büyük bir sayı çıkarılır, çünkü ilk vaka taşıma işarette

+1

Kuşkusuz tüm x86'lar çıkartırken çıkarmayı tersine çevirmek için aynı davranır mı? – harold

+0

doğru, bu yüzden işlemci ailesi demek için düzenledim. Demek istediğim, x86, arm, avr, msp430, 6502, z80, vs, gibi taşıma bayraklarını karşılaştırırsanız, bazı ters çevirme işlemlerini gerçekleştirirsiniz, bazıları yoktur. Bir aile içinde veya bir şirkette, aynı çözümü kullanmasını beklerim. –

+1

oh tamam, kaçırdı – harold

1

varsayalım eax hiçbir taşıma işareti ayarlanır

eax=00000101=05 
    ebx=00010000=10 
not ebx=11101111 
     +  1 
--------------------- 
     11110000 
     + 0101 
--------------------- 
     11110101 

Değil taşma olduğu, yani oluşur, sonra 8 bitlik register olduğu Lets ayarlanır.

+2

'u işaretlediğiniz için kullandığınız donanımın aynı mantığı kullanmasıyla aynı yanıtı veya çıktısını üretmesi için teşekkürler, fark, bu işlemcinin bu işlemci için nasıl ele alınacağıdır. Bu işlemci ailesi (x86) inverts'in bir çıkarma işlemi için (ve aynı zamanda ikinci işlenenin yanı sıra) gerçekleştirilmesini sağlar, ancak bir eklenti için herhangi bir geri dönüşü yoktur. –