CMP и JA вопрос - PullRequest
       43

CMP и JA вопрос

2 голосов
/ 04 апреля 2011

У меня проблемы с пониманием этого. Это в синтаксисе Intel

cmp eax, 0x19
ja greater

eax содержит значение -40. http://en.wikibooks.org/wiki/X86_Assembly/Control_Flow говорит мне, что ja - это сравнение без знака из предыдущего cmp.

Насколько я знаю, это должно произойти, если arg1 (0x19) ВЫШЕ arg2 (0xffffffd8)

0x19 мне кажется меньше, чем 0xffffffd8. Прыжок выполняется. Любая помощь в понимании моей ошибочной логики высоко ценится!

Ответы [ 2 ]

7 голосов
/ 04 апреля 2011

Это немного сложно ответить, потому что разные ассемблеры меняют порядок операндов. Судя по всему, вы, похоже, используете синтаксическую сборку Intel, и в этом случае то, что у вас есть, примерно эквивалентно if (unsigned)eax > 0x19 goto greater. В таком случае разумно, что прыжок сделан.

0 голосов
/ 15 февраля 2012

Возможно, 0xffffffd8 - отрицательное число в 32-битном дополнении к двум. 0x19 положительно.

...