2012-09-02 12 views
5

Używam MASM32.Prowadź flagę w odejmowaniu

Z tym kodem:

mov eax,5 
sub eax,10 

CF flagi stanu zostanie ustawiony. Ale używając ołówka i papieru widzę, że nie ma żadnego przenoszenia z MSB. Tak, wiem, że od odejmowania od mniejszej liczby wielkich liczb ustalamy CF. Ale chcę wiedzieć dlaczego?

Ponieważ przy użyciu tego kodu:

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

CF flaga nie zostanie kiedykolwiek ustawiony.

+0

Czy to programowanie 8086 czy co? – nKandel

Odpowiedz

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

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

I to trwa 16 lub 32 lub 64 bitów 0 + 1 + 0 = 1, przeprowadzić 0

Masz rację w tym sensie, że nie robi przeprowadzenia. Odejmowanie to dodanie z drugim operandem odwróconym i przeniesieniem odwróconym. Niektóre rodziny procesorów odwracają przeprowadzanie niektórych dont. Wygląda na to, że patrzysz na coś, co odwraca przeprowadzanie odejmowania.

Tak więc, jeśli 5 - 10 daje przeprowadzić (wypożyczyć), a następnie spróbuj 10 - 5 na tym samym procesorze, nie powinieneś zobaczyć zestaw bitów carry (nie pożyczać).

Twój drugi przykład to operacja dodawania, wykonanie nie jest odwrócone na żadnym procesorze, który znam, dodatkowo wspierającym bit przenoszący będący logiką dodatnią wskazującą pożyczkę.

+1

Z pewnością wszystkie x86 działają tak samo w odniesieniu do odwracania przeprowadzania podczas odejmowania? – harold

+0

Dobrze, dlatego edytowałem to, by powiedzieć rodzinie procesorów. Mam na myśli to, że jeśli porównasz flagę carry pomiędzy x86, arm, avr, msp430, 6502, z80, etc, itp., Niektóre odwrotnie przeprowadzają, niektóre nie. W rodzinie, a nawet firmie, oczekuję od nich tego samego rozwiązania. –

+1

oh ok, brakowało że – harold

1

W pierwszej flagi Etui jest ustawiony bo odjęta od większej liczby mniejszych one.In drugim przypadku Pozwala przypuszczać eax jest 8 bitowy rejestr następnie

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

Nie jest przepełnienie występuje tj no wskaźnik przeniesienia jest ustawiony.

+2

sprzęt produkuje ta sama odpowiedź dodawać lub odejmować jak sama logika jest używana, różnica polega na tym, w jaki sposób przeprowadzać jest obsługiwana dla tego procesora. brzmi to tak, jak ta rodzina procesorów (x86) wykonuje odwrotność (a także przenosi i drugi operand) dla odejmowania, ale nie ma odwrócenia dla dodania. –

Powiązane problemy