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