A fő különbség a teszt és cmp

A fő különbség a teszt és cmp

Ennek eredményeként a cmp és vizsgálati szerelési útmutatót megváltoztatja az állam a nulla zászló (ZF). Ez minden közös bennük! Veszélyes dolog feltételezni, hogy ezek az utasítások hasonlóak, és még inkább azt, hogy mindketten végre az összehasonlítást. Cut alatt - az alap egy ilyen merész állítás :)

Egy fontos pont: a logikai nulla zászló (ZF). Ez emelkedik (egyenlő egy), amikor a művelet eredmény nulla, azaz a minden bit az eredmény - nulla.

cmp utasítás (rövid összehasonlításról -. hasonlítsa) összehasonlítja a két érték - a nyilvántartás memória, közvetlen értéket, - és készlet / visszaállítja a ZF zászlót. Ebben a processzor fogadására cmp utasítás kiszámítja a különbséget az említett értékeket. Ez most meg kell érteni, hogy ha a értéke egyenlő, a kivonás eredmény 0, így fekve nulla jelzőbit (ZF = 1). például:

Megjegyzés. cmp utasítás eltér a megfelelő al (kivonás - kivonás), amely azonban csak a zászlók regisztráljon.

teszt utasításokat. Miután megkapta ezt a parancsot, a processzor teljesítményét az ÉS művelettel (logikai ÉS) két operandus. Ie Végrehajt egy bitenkénti logikai szorzás. Ha a logikai ÉS visszatér csak nullát, majd felemelte a zászlót ZF. teszt utasítások is érinti csak a zászlók regisztrálni, amelyben eltér a és utasításokat. például:

Következtetések. Először is, a CMP és vizsgálati befolyásolja a nulla zászló az ellenkező módon. Másodszor, nem tudja használni a teszt parancsot, hogy ellenőrizze az értékeket az egyenlőség! például:

Összehasonlítjuk az azonos / különböző számok, és az átmenet végezzük minden esetben! Ha ehelyett a vizsgálati tegye cmp, az első átmeneti nem kerül végrehajtásra. Miért ilyen furcsa teszt? Élvezi rekordszámok bináris SI:
5 (10) = 0101 (2)
4 (10) = 0100 (2)

A vizsgálat eredménye utasítások:
teszt 5,5: 0101 és 0101 = 0101
teszt 5,4: 0100 = 0101 és 0100

Az eredmények mindkét műveletek bit egyenlő egy, így a nulla jelzőbitet nem ismert. Ezért nem lehet támaszkodni összehasonlítása értékeket.

Tehát teszt parancs, hogy ellenőrizze az állapotát bit zászlók, stb Van egy másik alkalmazás - ellenőrizze regisztrációhoz értéke nulla:

teszt eax, eax
JZ someLabel; az átmenet végrehajtása csak, ha EAX = 0

Magyarázni meddig lehet :) maga sem érti a logikát, különösen ha figyelembe vesszük, hogy a vizsgálati és a CMP - hasonló célú parancsokat. Remélhetőleg, a különbség egyértelműen.