Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Вниз

ассемблер   Найти похожие ветки 

 
umbra ©   (2007-04-24 15:12) [0]

помогите, кому не лень! :0
правильно ли я понимаю, что на ассемблере

cmp eax, ebx
jnz SomeProc


эквивалентно
if eax <> ebx then
 SomeProc


 
Игорь Шевченко ©   (2007-04-24 15:13) [1]

правильно


 
umbra ©   (2007-04-24 15:14) [2]

спасибо!


 
начинающий ©   (2007-04-24 15:15) [3]

Одно "но": в паскалевском коде после выполнения SomeProc выполение перейдет на следующую строчку после приведенного фрагмента.

jnz SomeProc же делает переход...


 
umbra ©   (2007-04-24 15:25) [4]

спасибо, но это мне как раз понятно. мне неясно было, при каком условии этот переход будет.


 
Сергей М. ©   (2007-04-24 15:31) [5]


> umbra ©   (24.04.07 15:25) [4]


Флаг ZF устанавливается при равенстве операндов.

JNZ = Jump if flag is Non-Zero

p.s.

Гораздо удобней в этом (и не только в этом) случае пользовать синоним - JNE ( =  Jump if Not Equivalent = перейти, если сравнение показало неравенство операндов)


 
Сергей М. ©   (2007-04-24 15:33) [6]


> JNZ = Jump if flag is Non-Zero
>


Точнее, Jump if Non-Zero flag is set


 
oxffff ©   (2007-04-24 15:36) [7]

Opcode Instruction Description
77 cb JA rel8 Jump short if above (CF=0 and ZF=0)
73 cb JAE rel8 Jump short if above or equal (CF=0)
72 cb JB rel8 Jump short if below (CF=1)
76 cb JBE rel8 Jump short if below or equal (CF=1 or ZF=1)
72 cb JC rel8 Jump short if carry (CF=1)
E3 cb JCXZ rel8 Jump short if CX register is 0
E3 cb JECXZ rel8 Jump short if ECX register is 0
74 cb JE rel8 Jump short if equal (ZF=1)
7F cb JG rel8 Jump short if greater (ZF=0 and SF=OF)
7D cb JGE rel8 Jump short if greater or equal (SF=OF)
7C cb JL rel8 Jump short if less (SF<>OF)
7E cb JLE rel8 Jump short if less or equal (ZF=1 or SF<>OF)
76 cb JNA rel8 Jump short if not above (CF=1 or ZF=1)
72 cb JNAE rel8 Jump short if not above or equal (CF=1)
73 cb JNB rel8 Jump short if not below (CF=0)
77 cb JNBE rel8 Jump short if not below or equal (CF=0 and
73 cb JNC rel8 Jump short if not carry (CF=0)
75 cb JNE rel8 Jump short if not equal (ZF=0)
7E cb JNG rel8 Jump short if not greater (ZF=1 or SF<>OF)
7C cb JNGE rel8 Jump short if not greater or equal (SF<>OF)
7D cb JNL rel8 Jump short if not less (SF=OF)
7F cb JNLE rel8 Jump short if not less or equal (ZF=0 and SF=
71 cb JNO rel8 Jump short if not overflow (OF=0)
7B cb JNP rel8 Jump short if not parity (PF=0)
79 cb JNS rel8 Jump short if not sign (SF=0)
75 cb JNZ rel8 Jump short if not zero (ZF=0)
70 cb JO rel8 Jump short if overflow (OF=1)
7A cb JP rel8 Jump short if parity (PF=1)
7A cb JPE rel8 Jump short if parity even (PF=1)
7B cb JPO rel8 Jump short if parity odd (PF=0)
78 cb JS rel8 Jump short if sign (SF=1)
74 cb JZ rel8 Jump short if zero (ZF = 1)
0F 87 cw/cd JA rel16/32 Jump near if above (CF=0 and ZF=0)
0F 83 cw/cd JAE rel16/32 Jump near if above or equal (CF=0)
0F 82 cw/cd JB rel16/32 Jump near if below (CF=1)
0F 86 cw/cd JBE rel16/32 Jump near if below or equal (CF=1 or ZF=1)
0F 82 cw/cd JC rel16/32 Jump near if carry (CF=1)
0F 84 cw/cd JE rel16/32 Jump near if equal (ZF=1)
0F 84 cw/cd JZ rel16/32 Jump near if 0 (ZF=1)
0F 8F cw/cd JG rel16/32 Jump near if greater (ZF=0 and SF=OF)
0F 8D cw/cd JGE rel16/32 Jump near if greater or equal
0F 8C cw/cd JL rel16/32 Jump near if less (SF<>OF)
0F 8E cw/cd JLE rel16/32 Jump near if less or equal (ZF=
0F 86 cw/cd JNA rel16/32 Jump near if not above (CF=
0F 82 cw/cd JNAE rel16/32 Jump near if not above or equal
0F 83 cw/cd JNB rel16/32 Jump near if not below (CF=
0F 87 cw/cd JNBE rel16/32 Jump near if not below or equal
0F 83 cw/cd JNC rel16/32 Jump near if not carry (CF=
0F 85 cw/cd JNE rel16/32 Jump near if not equal (ZF=
0F 8E cw/cd JNG rel16/32 Jump near if not greater (ZF=
0F 8C cw/cd JNGE rel16/32 Jump near if not greater or equal
0F 8D cw/cd JNL rel16/32 Jump near if not less (SF=OF)
0F 8F cw/cd JNLE rel16/32 Jump near if not less or equal
0F 81 cw/cd JNO rel16/32 Jump near if not overflow (OF=
0F 8B cw/cd JNP rel16/32 Jump near if not parity (PF=
0F 89 cw/cd JNS rel16/32 Jump near if not sign (SF=0)
0F 85 cw/cd JNZ rel16/32 Jump near if not zero (ZF=0)
0F 80 cw/cd JO rel16/32 Jump near if overflow (OF=1)
0F 8A cw/cd JP rel16/32 Jump near if parity (PF=1)
0F 8A cw/cd JPE rel16/32 Jump near if parity even (PF=
0F 8B cw/cd JPO rel16/32 Jump near if parity odd (PF=
0F 88 cw/cd JS rel16/32 Jump near if sign (SF=1)
0F 84 cw/cd JZ rel16/32 Jump near if 0 (ZF=1)


 
oxffff ©   (2007-04-24 15:38) [8]

Sorry
Opcode Instruction Description
77 cb JA rel8 Jump short if above (CF=0 and ZF=0)
73 cb JAE rel8 Jump short if above or equal (CF=0)
72 cb JB rel8 Jump short if below (CF=1)
76 cb JBE rel8 Jump short if below or equal (CF=1 or ZF=1)
72 cb JC rel8 Jump short if carry (CF=1)
E3 cb JCXZ rel8 Jump short if CX register is 0
E3 cb JECXZ rel8 Jump short if ECX register is 0
74 cb JE rel8 Jump short if equal (ZF=1)
7F cb JG rel8 Jump short if greater (ZF=0 and SF=OF)
7D cb JGE rel8 Jump short if greater or equal (SF=OF)
7C cb JL rel8 Jump short if less (SF<>OF)
7E cb JLE rel8 Jump short if less or equal (ZF=1 or SF<>OF)
76 cb JNA rel8 Jump short if not above (CF=1 or ZF=1)
72 cb JNAE rel8 Jump short if not above or equal (CF=1)
73 cb JNB rel8 Jump short if not below (CF=0)
77 cb JNBE rel8 Jump short if not below or equal (CF=0 and ZF=0)
73 cb JNC rel8 Jump short if not carry (CF=0)
75 cb JNE rel8 Jump short if not equal (ZF=0)
7E cb JNG rel8 Jump short if not greater (ZF=1 or SF<>OF)
7C cb JNGE rel8 Jump short if not greater or equal (SF<>OF)
7D cb JNL rel8 Jump short if not less (SF=OF)
7F cb JNLE rel8 Jump short if not less or equal (ZF=0 and SF=OF)
71 cb JNO rel8 Jump short if not overflow (OF=0)
7B cb JNP rel8 Jump short if not parity (PF=0)
79 cb JNS rel8 Jump short if not sign (SF=0)
75 cb JNZ rel8 Jump short if not zero (ZF=0)
70 cb JO rel8 Jump short if overflow (OF=1)
7A cb JP rel8 Jump short if parity (PF=1)
7A cb JPE rel8 Jump short if parity even (PF=1)
7B cb JPO rel8 Jump short if parity odd (PF=0)
78 cb JS rel8 Jump short if sign (SF=1)
74 cb JZ rel8 Jump short if zero (ZF = 1)
0F 87 cw/cd JA rel16/32 Jump near if above (CF=0 and ZF=0)
0F 83 cw/cd JAE rel16/32 Jump near if above or equal (CF=0)
0F 82 cw/cd JB rel16/32 Jump near if below (CF=1)
0F 86 cw/cd JBE rel16/32 Jump near if below or equal (CF=1 or ZF=1)
0F 82 cw/cd JC rel16/32 Jump near if carry (CF=1)
0F 84 cw/cd JE rel16/32 Jump near if equal (ZF=1)
0F 84 cw/cd JZ rel16/32 Jump near if 0 (ZF=1)
0F 8F cw/cd JG rel16/32 Jump near if greater (ZF=0 and SF=OF)
0F 8D cw/cd JGE rel16/32 Jump near if greater or equal (SF=OF)
0F 8C cw/cd JL rel16/32 Jump near if less (SF<>OF)
0F 8E cw/cd JLE rel16/32 Jump near if less or equal (ZF=1 or SF<>OF)
0F 86 cw/cd JNA rel16/32 Jump near if not above (CF=1 or ZF=1)
0F 82 cw/cd JNAE rel16/32 Jump near if not above or equal (CF=1)
0F 83 cw/cd JNB rel16/32 Jump near if not below (CF=0)
0F 87 cw/cd JNBE rel16/32 Jump near if not below or equal (CF=0 and ZF=0)
0F 83 cw/cd JNC rel16/32 Jump near if not carry (CF=0)
0F 85 cw/cd JNE rel16/32 Jump near if not equal (ZF=0)
0F 8E cw/cd JNG rel16/32 Jump near if not greater (ZF=1 or SF<>OF)
0F 8C cw/cd JNGE rel16/32 Jump near if not greater or equal (SF<>OF)
0F 8D cw/cd JNL rel16/32 Jump near if not less (SF=OF)
0F 8F cw/cd JNLE rel16/32 Jump near if not less or equal (ZF=0 and SF=OF)
0F 81 cw/cd JNO rel16/32 Jump near if not overflow (OF=0)
0F 8B cw/cd JNP rel16/32 Jump near if not parity (PF=0)
0F 89 cw/cd JNS rel16/32 Jump near if not sign (SF=0)
0F 85 cw/cd JNZ rel16/32 Jump near if not zero (ZF=0)
0F 80 cw/cd JO rel16/32 Jump near if overflow (OF=1)
0F 8A cw/cd JP rel16/32 Jump near if parity (PF=1)
0F 8A cw/cd JPE rel16/32 Jump near if parity even (PF=1)
0F 8B cw/cd JPO rel16/32 Jump near if parity odd (PF=0)
0F 88 cw/cd JS rel16/32 Jump near if sign (SF=1)
0F 84 cw/cd JZ rel16/32 Jump near if 0 (ZF=1)


 
oxffff ©   (2007-04-24 15:39) [9]

Теперь будешь все знать.
:)


 
начинающий ©   (2007-04-24 15:40) [10]

еще немного, и пришлось бы выкладывать на рапидшару! ;)


 
oxffff ©   (2007-04-24 15:41) [11]

Проще скачать

Intel Architecture Software Developer’s Manual Volume 2:
          Instruction Set Reference


 
Kerk ©   (2007-04-24 15:43) [12]

Проще понять, что cmp - это вычитание
Соответственно jnz - переход, если результат вычитания не ноль


 
Игорь Шевченко ©   (2007-04-24 15:45) [13]


> Проще понять, что cmp - это вычитание


ну да. а команду с мнемоникой sub оставили по недоразумению.


 
oxffff ©   (2007-04-24 15:47) [14]


> Проще понять, что cmp - это вычитание
> Соответственно jnz - переход, если результат вычитания не
> ноль


Ты хотел сказать псевдовычитание.


 
oxffff ©   (2007-04-24 15:48) [15]


> Игорь Шевченко ©   (24.04.07 15:45) [13]
>
> > Проще понять, что cmp - это вычитание
>
>
> ну да. а команду с мнемоникой sub оставили по недоразумению.
>


Вступлюсь за kerk

The comparison is performed by subtracting the
second operand from the first operand and then setting the status flags in the same manner as the SUB instruction.


 
umbra ©   (2007-04-24 16:07) [16]


> JNZ = Jump if flag is Non-Zero

вот с этим флагом я и путаюсь. Когда этот самый ZF равен 0 - когда разность равна 0 или когда она не равна 0?

Из [1] я понял, что

JNZ = Jump if ZF=0

т.е. если разность не равна нулю.


 
Игорь Шевченко ©   (2007-04-24 16:12) [17]


> Когда этот самый ZF равен 0 - когда разность равна 0 или
> когда она не равна 0?


ZF не может быть равен или не равен нулю. Это признак того, что что-то равно нулю, а признак может быть или истинным или ложным.


 
umbra ©   (2007-04-24 16:22) [18]

2 Игорь Шевченко ©   (24.04.07 16:12) [17]

но ZF - это какой-то там по счету бит 32-х разрядного регистра EF. И в интеловском мануале написано что-то вроде "ZF is set when result is zero". Меня смутило то, что неясно в какое значение он устанавливается - 0 или 1.


 
Сергей М. ©   (2007-04-24 16:36) [19]


> umbra ©   (24.04.07 16:22) [18]


Ты не по мою ли душу (см. мой вопрос в "Базы") этим занялся ?)

Уверяю - не стОит)

Я и сам это проделаю с неменьшим успехом. Там я просто интересовался, не проходил ли кто моей тропкой и не имеет ли готового решения "проблемы")


 
umbra ©   (2007-04-24 16:38) [20]

так интересно ж, и время вроде есть :)


 
Сергей М. ©   (2007-04-24 16:39) [21]


> umbra ©   (24.04.07 16:38) [20]


А вот ЭТО уже приветствуется !

Готов поддержать результатами своих "экспериментов".

С уважением !


 
Игорь Шевченко ©   (2007-04-24 16:40) [22]


>  "ZF is set when result is zero". Меня смутило то, что неясно
> в какое значение он устанавливается - 0 или 1.


в истину :)


 
oxffff ©   (2007-04-24 16:46) [23]

>но ZF - это какой-то там по счету бит 32-х разрядного регистра EF.

21 ID ID Flag R/W
20 VIP Virtual Interrupt Pending R/W
19 VIF Virtual Interrupt Flag R/W
18 AC Alignment Check R/W
17 VM Virtual-8086 Mode R/W
16 RF Resume Flag R/W
15 Reserved Reserved, Read as Zero
14 NT Nested Task R/W
13-12 IOPL I/O Privilege Level R/W
11 OF Overflow Flag R/W
10 DF Direction Flag R/W
9 IF Interrupt Flag R/W
8 TF Trap Flag R/W
7 SF Sign Flag R/W
6 ZF Zero Flag R/W                                                  <----------------
5 Reserved Reserved, Read as Zero
4 AF Auxiliary Flag R/W
3 Reserved Reserved, Read as Zero
2 PF Parity Flag R/W
1 Reserved Reserved, Read as One
0 CF Carry Flag R/W



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.04 c
15-1177485819
TCrash
2007-04-25 11:23
2007.05.27
документация по MS VisualStudio 7


2-1178480212
vofk
2007-05-06 23:36
2007.05.27
Picture


2-1178790029
zero
2007-05-10 13:40
2007.05.27
Запретить добовление новой строки в DBGridEh


15-1177442335
Ломброзо
2007-04-24 23:18
2007.05.27
Расскажите про ERP/SAP


15-1178009480
Nic
2007-05-01 12:51
2007.05.27
Глючит Canvas в Win Vista





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский