Ez igaz: "a "minden bitje" vs. "megfeleő bitje" azt jelenti, hogy az első változó(V1->eax) minden bitjét(32 bit), össze kell hasonlítani a második változó(V2->ebx) minden, azonos helyiértékű bitjével."
Itt tévedsz: "DE, elöbbi esetben teljesen felesleges a 31-től 1. bitek összehasonlítása hiszen az utolsó 0. helyiértékü bit összehasonlításakor veszi vel a végleges értékét AL. Az utóbbiban meg teljesen felesleges a 0-tól 30. bitek összehasonlítása hiszen az utolsó 31. helyiértékü bit összehasonlításakor veszi vel a végleges értékét AL. Nem is beszélve arról, hogy a két módszer két különböző eredményt ad ill. adhat."
Ahogy írtad, 32 db összehasonlításról van szó, amelyek között AND kapcsolat van, tehát egy 32-es számolt ciklusban bitenként haladva (akármelyik irányba):
- EAX és EBX aktuális bitjét ki kell tenni egy-egy registerbe
- össze kell hasonlítani őket
- az első olyan esetnél, ahol EAX bitje kisebb, mint EBX-é, ki kell lépni AL=0-val
- ha nincs ilyen helyzet, akkor AL=1 az eredmény.
mov eax,[V1]
mov ebx,[V2]
mov cl,32
@ciklus:
mov dl,0
shr eax,1
adc dl,0
mov dh,0
shr ebx,1
adc dh,0
cmp dl,dh
jb @hamis
sub cl,1
jg @ciklus
mov al,1
jmp @kilep
@hamis:
mov al,0
@kilep:
Vagy pedig (mivel felírtad az igazságtáblázatot):
xor ebx,eax
// EBX-ben 0 lesz azokon a bitpozíciókon, amelyek azonosak, 1,
// ahol eltérőek
and eax,ebx
// nullázzuk EAX-ben azokat az 1 biteket, ahol a bemeneti EBX
// is 1 volt
sub ebx,eax
// ezek után amelyik bitpozíción EBX 1 (nem azonosak), ott EAX-ben
// is 1-nek kell lennie, azaz meg kell egyezzen a két register
setz al
// vagy setz helyett bármilyen hosszabb kód, aminek jelentése
// (EBX == 0) ? AL=1 : AL=0
[ Szerkesztve ]
Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙