Вниз
Скачать: CL | DM;

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

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.032 c
15-1178012802
@!!ex
2007-05-01 13:46
2007.05.27
Midlet Pascal


15-1177426273
GeLLeR
2007-04-24 18:51
2007.05.27
Нужно сжать музыку...


1-1175497383
Ricks
2007-04-02 11:03
2007.05.27
Математика наложения


2-1178535791
DelphiLexx
2007-05-07 15:03
2007.05.27
ShowModal и Enabled


15-1177443486
vasIZmax
2007-04-24 23:38
2007.05.27
Кража сайта




   Наверх