A separação de instruções e dados é uma coisa fácil de subestimar. No entanto, seu comportamento é bem diferente.
As instruções fluirão principalmente em um caminho linear e terão tamanhos muito semelhantes.
Os dados, por outro lado, serão de localizações semi-aleatórias, rajadas e de tamanhos variados.
Tentar ter a mesma lógica e tamanho de barramento para otimizar para ambos é um pouco mais difícil do que ter manipuladores separados.
Seu exemplo no valor nominal parece uma questão razoável, mas com um processador Von Newmann a carga de memória para completar a primeira instrução irá atrasar a carga e decodificar a segunda instrução. Considerando que no processador de Harvard a segunda instrução pode ser carregada decodificada e parcialmente processada quando a primeira instrução for concluída.
Fluxo do processador Von Neumann
- carregar uma instrução
- decodificar uma instrução
- carrega dados da memória externa
- colocar dados no registro
- carregar instrução dois
- instrução de decodificação dois
- copie o registro para registrar
Fluxo do processador de Harvard
- carregar uma instrução
-
decodificar uma instrução
3a. carregar dados da memória externa para registrar 3b. carregar instrução dois 4a. colocar dados no cadastro 4b. decodificar instrução dois- copie o registro para registrar