Jestem nowym językiem asemblera x86, mam zapisaną liczbę całkowitą zapisaną w rejestrze eax
i chcę sprawdzić, czy liczba jest ujemna czy dodatnia. Aby to zrobić, użyłem instrukcji bt
, aby sprawdzić pierwszy bit.Jak sprawdzić, czy liczba całkowita ze znakiem jest neg lub pos?
Oto co zrobiłem:
bt eax,0
jnc isNegative
bt
niesie pierwszy bit nosić flagę, a ja jnc
aby sprawdzić, czy wskaźnik przeniesienia jest 0 lub 1. Jeśli jest to 1, powinna ona być ujemna numer, i robi instrukcje ujemne ... jednak wynik jest nieprzewidywalny, czasami mam wartość dodatnią i rozpoznaje ją jako liczbę ujemną. czy robię coś źle?
EDYCJA: Właśnie zdałem sobie sprawę, że to może mieć coś wspólnego z endiansem. W rzeczywistości sprawdza on ostatni bit zamiast pierwszego. Pozwól mi spróbować użyć bt
, 7
Świetnie, rozwiązuje problem i proste! chociaż powinien to być cmp eax, 0 – Yonk
Zależy od używanego asemblera, ale od Intela, tak. Domyślam się, że właśnie stąd doszło. – nmichaels
cmp jest dłuższy niż test, dlatego często preferowany jest test http://stackoverflow.com/a/147183/995714 –