Fórum [Assembler no Delphi] Uso de quot;jzquot; e quot;jequot; #231189
10/05/2004
0
dec ECX jnz @Loop
Mas eu aprendi que os jumps funcionam após a instrução CMP. Então pergunto: Os jumps operam sobre a operação anterior, seja ela qual for, ou é um caso especial para o registrador ECX (contador) :?:
Segunda questão:
em outro código tenho o seguinte:
cmp Al, [EDI] jz @Found
trocando-se jz (jump if zero) por je (jump if equal) que pra mim seria o certo (uma vez que o objetivo é ver se os dois são iguais), o resultado é o mesmo. Então qual a diferença? É questão de performance?
Akelle Kara
Curtir tópico
+ 0Posts
10/05/2004
Paulo_amorim
Sobre a primeira questão eu não estou muito certo, mas creio que opera sobre a linha anterior...
Mas d qualquer maneira tenta fazer um teste ue...se funcionar, sinal que ele opera na anterior :D
---------------------------------------
Sobre a segunda, eu aprendi que JZ e JE significa a mesma coisa:
JZ - Jump se a subtração for zero
JE - Jump se os termos forem iguais
Como subtração de termos iguais resulta em 0, da na mesma!
Assim como JBZ (ou JBE nao lembro) = JNA - Jump se for menor ou igual eh a mesma coisa que Jump se nao for maior...
Até+
Gostei + 0
10/05/2004
Beppe
- As instruções de jump não operam sobre a instrução anterior. Operam sobre um conjunto de variáveis do processador, chamados FLAGS, que são modificados quase que exclusivamente pelas instruções aritméticas. Isto é, nem todas as instruções modificam estes FLAGS, e nem todos os FLAGS são modificados pela mesma instrução.
Algumas instruções, com os flags alterados:
INC: N, Z
DEC: N, Z
ADD: N, Z, C, O
SUB: N, Z, C, O
CMP: N, Z, C, O
TEST: N, Z
-JZ e JE são simples mnemômicos diferentes para a mesma instrução. Use um ou outro, conforme a lógica do problema. Existem vários casos assim, por questão de ortogonalidade.
Gostei + 0
11/05/2004
Akelle Kara
Agora vou pesquisar mais um pouco sobre as flags...
Gostei + 0
11/05/2004
Beppe
O volume 1 tem a arquitetura do Pentium(parte exposta somente), os volumes 2A e 2B tem a listagem das instruções do processador.
Gostei + 0
14/05/2004
Akelle Kara
Gostei + 0
14/05/2004
Kroki
JZ - pula se o flag de ZERO está setado ;
JE - pula se AX for IGUAL a BX;
Gostei + 0
14/05/2004
Paulo_amorim
Olá
Mas dá na mesma colocar
CMP AX, BX JE ...
ou
CMP AX, BX JZ ...
Então eles só fazem a mesma coisa após um [b:ce3f78f5a8]CMP[/b:ce3f78f5a8]?
Se meu pensamento está correto, isso é porque CMP altera o flag de zero?
Até+
Gostei + 0
14/05/2004
Kroki
Uma delas é mais rapida do que a outra em termos de clock.
Gostei + 0
15/05/2004
Cebikyn
JE/JZ - Jump Equal / Jump Zero Usage: JE label JZ label Modifies flags: None Causes execution to branch to "label" if the Zero Flag is set.Uses unsigned comparision. Clocks Size Operands 808x 286 386 486 Bytes label: jump 16 7+m 7+m 3 2-4 no jump 4 3 3 1
Gostei + 0
15/05/2004
Cebikyn
CMP - Compare Usage: CMP dest,src Modifies flags: AF CF OF PF SF ZF Subtracts source from destination and updates the flags but does not save result. Flags can subsequently be checked for conditions. Clocks Size Operands 808x 286 386 486 Bytes reg,reg 3 2 2 1 2 mem,reg 9+EA 7 5 2 2-4 reg,mem 9+EA 6 6 2 2-4 reg,immed 4 3 2 1 3-4 mem,immed 10+EA 6 5 2 3-6 accum,immed 4 3 2 1 2-3
Gostei + 0
16/05/2004
Akelle Kara
Valeu!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)