IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Caster
Člen
Avatar
Caster:15.5.2018 17:51

V ASM potřebuji zjistit, zda je číslo X Signed Integer (double word) mezi dvěma hodnotami A, B, kde A<B viz část zjednodušeného kódu:

cmp X, B
jg Dale ; X > B
cmp X, A
jl Dale ; X < A
nop ; A<=X<=B
Dale:

Nejsem si jistý, že to bude fungovat na záporná i kladná čísla. Například:

X = -20500 (0FFFFAFECh)
A = -20000 (0FFFFB1E0h)
B = -21000 (0FFFFADF8h)

a

X = 7
A = 4
B = 9

 
Odpovědět
15.5.2018 17:51
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Caster
Martin Dráb:16.5.2018 0:17

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.

Nahoru Odpovědět
16.5.2018 0:17
2 + 2 = 5 for extremely large values of 2
Avatar
Caster
Člen
Avatar
Odpovídá na Martin Dráb
Caster:16.5.2018 0:53

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.

 
Nahoru Odpovědět
16.5.2018 0:53
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Caster
Martin Dráb:16.5.2018 1:10

Na jakých číslech ti tvůj kód nepracuje správně? Dej konkrétní příklad.

Nahoru Odpovědět
16.5.2018 1:10
2 + 2 = 5 for extremely large values of 2
Avatar
Caster
Člen
Avatar
Odpovídá na Martin Dráb
Caster:16.5.2018 1:30

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).

 
Nahoru Odpovědět
16.5.2018 1:30
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Caster
Martin Dráb:16.5.2018 1:35

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).

Nahoru Odpovědět
16.5.2018 1:35
2 + 2 = 5 for extremely large values of 2
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.