(Ricarte, 2008) Um dos projetistas do processador hipotético sugeriu que, em vez das instruções LOAD
e STORE
, uma única instrução MOVE
deveria ser utilizada; nesse caso, a ordem dos operandos serviria para diferenciar a direção da transferência. Por exemplo, MOVE 1, R0
indicaria a transferência do conteúdo da posição 1 de memória para o registrador R0. Já a instrução MOVE R0, 4
indicaria a transferência do conteúdo do registrador R0 para a posição de memória 4. Por que os projetistas teriam mantido duas instruções separadas?
Porque a linguagem de máquina produzida não seria capaz de identificar a operação desejada pelo usuário. Por exemplo, a instrução MOVE 1, R0
e a instrução MOVE R0, 4
, apresentadas no enunciado do exercício, produzem a mesma linguagem de máquina, a saber, 00000100
(considerando que 00 seja o código da instrução MOVE
).
Para que a linguagem de máquina produzida seja capaz de identificar a operação desejada pelo usuário em linguagem simbólica, o tradutor deve produzir instruções diferentes em linguagem de máquina, uma correspondente ao LOAD
e outra ao STORE
, como empregado atualmente pelo processador hipotético.
Um dos critérios mais importantes para julgar uma linguagem de programação é a facilidade com que os programas podem ser lidos e entendidos. Antes de 1970, o desenvolvimento de software era muito imaginado em termos da escrita do código. Na década de 70, entretanto, o conceito de ciclo de vida do software foi desenvolvido; a codificação foi relegada a um papel muito menos importante, e a manutenção foi reconhecida como uma parte importante do ciclo, especialmente em termos de custo. Uma vez que a facilidade de manutenção é determinada, em grande parte, pela legibilidade dos programas, ela tornou-se uma medida importante da qualidade dos programas e das linguagens de programação (Sebesta, 2000).
A utilização da instrução MOVE
não reduziria a quantidade de instruções em linguagem de máquina, além de prejudicar a legibilidade do programa escrito em linguagem simbólica, pois as instruções LOAD
e STORE
apresentam claramente o significado de suas operações, enquanto que na instrução MOVE
, o programador teria um pouco mais de dificuldade para compreender o fluxo da informação (memória → processador ou processador → memória).
Ricarte, Ivan. (2008). Introdução à Compilação. Rio de Janeiro: Elsevier. 264 páginas.