Exemplos de código em Assembly

Reuno aqui alguns exemplos de códigos em Assembly, úteis para a compreensão de trechos de binários quando fazemos engenharia reversa.

Zerar variáveis

Assembly
C
Assembly
xor eax, eax
C
int eax=0;

Contagem de 1 a 10

Assembly v1
Assembly v2
C
Assembly v1
xor ecx, ecx
loop:
inc ecx
cmp ecx, 0xa
jl loop
Assembly v2
mov ecx, 0
loop:
add ecx, 1
cmp ecx, 0x9
jle loop
C
int ecx;
for (ecx=0; ecx<10; ecx++) {}

Testar se é zero

Assembly v1
Assembly v2
C
Assembly v1
cmp eax, 0
je destino
Assembly v2
test eax, eax
je destino
C
if (eax == 0)
// destino

Não fazer nada

Parece bobo, mas "fazer nada" corretamente significa não alterar nenhuma flag, nem nenhum registrador. Seguem as instruções que conheço:

Assembly v1
Assembly v2
C
Assembly v1
xchg eax, eax
Assembly v2
nop
C
;

Instruções que não fazem nada também podem ser utilizadas como padding necessário para o correto alinhamento das seções do binário em memória. Já vi o GCC utilizar XCHG AX, AX neste caso.