Форум: "Основная";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Вниздельфи и ASM Найти похожие ветки
← →
r@bbit (2006-08-03 19:53) [0]Доброго времени суток!
Подскажите в чём проблема:
asm
...
mov ax,k; k = 8, тип WORD
cmp ax,65500;
jge @m2; - а вот тут происходит переход, хотя не должен! отчего так? вроде выполнение должно было дальше идти, ведь k<65500...
...
@m2:
...
← →
begin...end © (2006-08-03 20:17) [1]Команда JGE может использоваться для анализа результата сравнения чисел с учётом знака (т.е. 65500 = $FFDC здесь рассматривается как -36). Чтобы сравнивать без учёта знака, используйте JAE.
← →
KilkennyCat © (2006-08-03 20:17) [2]условие выполняется, потому что 65500 больше либо равно k
← →
begin...end © (2006-08-03 20:29) [3]> KilkennyCat © (03.08.06 20:17) [2]
?
← →
r@bbit (2006-08-03 20:50) [4]>begin...end
спасибо! а то я в асме не силён к сожалению...
← →
Anatoly Podgoretsky © (2006-08-03 21:32) [5]begin...end © (03.08.06 20:29) [3]
Он прав 8 > -36
← →
begin...end © (2006-08-03 21:41) [6]> Anatoly Podgoretsky © (03.08.06 21:32) [5]
Буду рад, если Вы поясните, как из утверждения 65500 >= 8 следует утверждение -36 < 8.
← →
Anatoly Podgoretsky © (2006-08-03 22:48) [7]begin...end © (03.08.06 21:41) [6]
Потому что команда jge @m2 оперирует числами со знаком, 65500 и есть это самое -36
$FFDC - вот он старший бит знака установлен, далее согласно математике с дополнением до двух.
FFDC = 1111 1111 1101 1100
not x000 0000 0010 0033 = 35
0035 + 1 = 36 cо знаком минус
← →
Anatoly Podgoretsky © (2006-08-03 22:53) [8]Дополнение
1111 1111 1101 1100 это 65500 если без знака и -36 если со знаком, или два символа ASCII с кодами FF и DC или один символ Юникод с кодом DCFF или просто битовый набор. Все зависит от интерпритации, команда jge интерпритирует, как целое со знаком.
← →
Германн © (2006-08-04 00:22) [9]
> begin...end © (03.08.06 20:17) [1]
>
> Команда JGE может использоваться для анализа результата
> сравнения чисел с учётом знака (т.е. 65500 = $FFDC здесь
> рассматривается как -36).
> Anatoly Podgoretsky © (03.08.06 22:48) [7]
>
> begin...end © (03.08.06 21:41) [6]
> Потому что команда jge @m2 оперирует числами со знаком,
> 65500 и есть это самое -36
Чего-то я не понял. Что, кто, кому объясняет? :-)
← →
begin...end © (2006-08-04 09:16) [10]> Anatoly Podgoretsky © (03.08.06 22:48) [7]
> Anatoly Podgoretsky © (03.08.06 22:53) [8]
Спасибо, но это мне известно. А вот каким образом из утверждения [2] "65500 больше либо равно 8" следует утверждение [5] "-36 меньше 8" (даже если принять 65500 = -36), я так и не понял.
← →
Пусик © (2006-08-04 17:26) [11]Удалено модератором
← →
begin...end © (2006-08-04 19:25) [12]Удалено модератором
← →
Пусик © (2006-08-04 20:06) [13]Удалено модератором
← →
begin...end © (2006-08-04 20:31) [14]Удалено модератором
← →
KilkennyCat © (2006-08-05 18:14) [15]Я не оговорился. Я ошибся с процессором.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c