O documento discute o fluxo de controle em programas, que determina a ordem de execução das instruções, incluindo desvios causados por procedimentos, funções e interrupções. Gráficos ilustram a execução sequencial versus com desvios. Procedimentos alteram o fluxo ao chamarem outros procedimentos e retornarem da chamada.
1. Fluxo de Controle
Saindo um pouco da
visão de instruções
separadas, vamos passar
a olhar um programa
como um todo, incluindo
a ordem e a maneira
como são executadas
Fluxo de controle é justamente a ordem em que
as instruções de um programa, armazenadas
sequencialmente na memória, são executadas 1
2. A essa altura, já estamos cansados de saber que
as instruções de um programa, mesmo
armazenadas sequencialmente na memória, não
são necessariamente executadas na mesma
sequência, por causa dos desvios que podem
ocorrer ao longo da execução
Excetuando os desvios, também já vimos e
revimos que a execução da próxima instrução se
dá através da incrementação do contador de
programa (PC), o qual indica o endereço da
instrução na memória
Assim, temos os seguintes gráficos:
2
3. O gráfico à esquerda representa os valores de PC
ao longo do tempo em uma execução totalmente
sequencial (ideal), enquanto o gráfico à direita
exibe esses valores com a ocorrências de desvios
3
4. Assim como em um programa escrito em
linguagem de alto nível, é melhor organizar as
instruções em métodos/funções em vez de deixar
a “main” com um amontoado de instruções
diferentes, o um macroprograma é melhor
estruturado em procedimentos
O fluxo de controle também é alterado com a
chamada de um procedimento, mas com a
vantagem de que a execução retorna à linha da
chamada após o seu término
Quando falamos sobre pilhas pela primeira vez,
vimos que a chamada de um procedimento
adiciona na pilha o endereço da chamada,
justamente para que esse retorno aconteça 4
5. Imagine os dois retângulos abaixo como
sequências de instruções sendo executadas
O procedimento à esquerda é chamado do
programa principal, e chama vários outros
procedimentos em pontos distintos
5
6. Em alguns casos, são necessárias as chamadas
co-rotinas, isto é, quando um procedimento A
chama um procedimento B, e o mesmo após
executar algumas instruções, volta a chamar o
procedimento A. Este, por sua vez, retoma a
execução a partir da linha onde o procedimento B
havia sido invocado
6
7. Outro modificador do fluxo de controle de um
programa são as traps (armadilhas) que param a
execução do programa por motivos de força
maior. Ocorrências de overflow e outros tipos de
exceções são alguns dos motivos
Finalmente, existem as interrupções, que, assim
como as traps, interrompem a execução de um
programa. Porém, desta vez, trata-se de uma
parada temporária, geralmente para dar vez a
operações de E/S que, como vimos, tem
prioridade sobre as demais
7