Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

дельфи и 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо