Diskuze: ASM Porovnání Signed Integer
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V druhém případě je A < X < B.
V prvním případě je B < X < A.
Takže je správně, že kód dává jiné výsledky. Jinak myslím, že pokud na nop mají skončit případy A <= X <= B, tak ten kód je dobře.
Přišel jsem na to, že instrukce pro porovnání dvou čísel neumí pracovat s různými znaménky. Vyřešil jsem převedením záporných hodnot zeměpisné šířky na kladnou hodnotu a přičtením 90. Např. LAT -34,528 bude 124,528. Po vynásobení 1 000 pak 124 528 v celočíselném tvaru.
Na jakých číslech ti tvůj kód nepracuje správně? Dej konkrétní příklad.
Třeba hned ten úvodní příklad, kdy by mělo X projít. Instrukce výše fungují správně pouze pro všechna čísla kladná. Snažit se porovnat kombinace čísel s různými znaménky by byla šílenost (i když mě zprvu nenapadlo, že signed integer lze použít pouze pro standardní aritmetické operace).
Tak, ty instrukce provádějí standardní aritmetické operace, nic víc a nic méně. Je třeba ale nezapomínat na to, že i když 2 < 4, tak -2 > -4.
Reprezentace čísel v doplňkovém kódu je navržena právě tak, aby základní operace (sčítání, odčítání – a CMP vlastně provádí odčítání) fungovaly tak, jak by člověk čekal (tzn. že například -1 + 1 = 0).
Zobrazeno 6 zpráv z 6.