Académique Documents
Professionnel Documents
Culture Documents
e Instruções de Desvio
1
Fluxo de Execução em Assembly
• Normalmente, comandos em C e instruções de máquina
são executados sequencialmente
• Algumas construções em C (mecanismos de decisão e
repetição) requerem a quebra da execução sequencial
de instruções
– a sequência de operações executada depende do resultado de
testes aplicados aos dados execução condicional
• A linguagem de máquina provê mecanismos básicos
para isso, permitindo
– testar valores de dados (resultado de operações aritméticas e
lógicas)
– alterar o fluxo de controle do programa conforme o resultado
desses testes
2
Testes sobre Dados
• A CPU mantém um conjunto de bits (EFLAGS) que
descreve o resultado da última operação
aritmética/lógica realizada
– INC/DEC, NEG, ADD/SUB/IMUL, NOT/AND/OR/XOR
– SAL, SHL, SAR, SHR
– TEST, CMP (teste e comparação)
3
Alteração do fluxo de controle
• A ordem de execução de instruções pode ser alterada
com instruções de desvio (jumps)
– existem instruções de desvio condicional e incondicional
4
Flags de Condição
CF Carry Flag SF Sign Flag
ZF Zero Flag OF Overflow Flag
5
Teste e Comparação
• Instruções que não alteram seus operandos, só os flags
– comparações <, <=, ==, >, >= e testes com máscaras
– condições para testar as combinações dos flags
• testl $0x01,%eax
– para testar se bit está setado jnz
• cmp %ebx,%eax
– para testar se %eax == %ebx je, jne
L1:
testl %ebx, %ebx
jz L2 // condicional
...
jmp L1 // incondicional
L2:
xorl %eax, %eax
8
Desvios Condicionais
Instrução Sinônimo Descrição
je Label jz equal/zero
jne Label jnz not equal/ not zero
js Label negative
jns Label non negative
jg Label jnle signed > (greater)
jge Label jnl signed >= (greater or equal)
jl Label jnge signed < (less)
jle Label jng signed <= (less or equal)
ja Label jnbe unsigned > (above)
jae Label jnb unsigned >= (above or equal)
jb Label jnae unsigned < (below)
jbe Label jna unsigned <= (below or equal)
9
Combinações de flags em
comparações
cmp s2,s1 é baseada em s1 - s2
11