Форум: "Прочее";
Текущий архив: 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