Pular para o conteúdo principal

Postagens

Mostrando postagens de Junho, 2017

[Linux Assembly] - ZF, JNZ e JNE

No treinamento que estou fazendo atualmente foi lançada uma pergunta que achei interessante e gostaria de compartilhar aqui.

Na seguinte linha de código assembly (intel) linux 64bits:


Estou informando à CPU que quero que caso o resultado de ações anteriores não seja zero (instrução jnz) ele pule para o endereço de memória onde tenho um marcador predefinido.

O ponto interessante é quando fazemos o disassembly no debugger (gdb). Vemos algo assim:


A pergunta em questão foi por que jnz e jne são equivalentes? A resposta está na Tabela 7-4 do Intel® 64 and IA-32 Architectures Software Developer's Manual, Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D and 4:


Na primeira coluna temos a instrução, na segunda temos a condição que a instrução verifica e, na terceira uma descrição basica da instrução. Quando comparamos a primeira e a segunda coluna percebemos que tanto jne quanto jnz comparam a flag ZF (Zero Flag) que basicamente informa se o resultado da instrução anterior resultou em…