next up previous
Next: Ciclo de interpretação de Up: Estado do processador Previous: Cálculo do endereço efetivo

Interpretação da instrução

Temos alocado 3 bits para o código de operação. Podemos ter 8 instruções, conforme o valor de Op.

Código de operação 0:


    If Op Eql 0 => Acc <- Acc And Mp[Z()];

Aqui Z() é usado para indicar uma chamada do algoritmo de cálculo de endereço efetivo Z.

Código de operação 1:


    If Op Eql 1 => Acc <- Acc + Mp[Z()];

Código de operação 2:


    If Op Eql 2 => 
        Begin
        Mp[Z] <- Mp[Z()] + 1 Next
        If Mp[Z] Eql 0 => PC <- PC+1
        End

A operação 2 corresponde a duas linhas, executadas em sequência, indicadas pela palavra Next. O comando que precede Next deve ser completado antes da execução do comando seguinte. Na linha


        Mp[Z] <- Mp[Z()] + 1 Next
notem que o cálculo de endereço é feito por Z(), apenas uma vez. Mp[Z], onde Z é usado sem parêntesis, significa apenas usar o endereço calculado, sem ativar o algoritmo de cálculo de novo. Isso é particularmente importante quando o algoritmo Z introduz efeitos colaterais, como no exemplo


    Z\Effective.Address<0:7>:=
        Begin
        Decode Ibit =>
            Begin
            0:= Z <- Adr,
            1:= Z <- Mp[Adr] <- Mp[Adr]+1
            End
        End

Com esse algoritmo Z, teríamos um resultado diferente se tivéssemos escrito


        Mp[Z()] <- Mp[Z()] + 1 Next

A instrução correspondente ao código 2 acrescenta 1 a uma palavra da memória e testa o resultado da adição, pulando a próxima instrução se a adição der resultado zero.

Código de operação 3:


    If Op Eql 3 => Mp[Z()]@Acc <- Acc@#0000;

O operador @ é usado para indicar a concatenação de registradores ou cadeia de bits. #0000 indica uma cadeia de 4 dígitos octais. Alternativamente podemos escrever '0000000000000000 (12 dígitos binários) ou ''000 (3 dígitos hexadecimais). Resumindo:

O resultado dessa instrução é armazenar 24 bits (12 do acumulador mais 12 bits 0) no lado esquerdo - 12 bits da memória mais o acumulador. Poderíamos ter usado duas linhas:


    Begin
    Mp[Z()] <- Acc Next
    Acc <- 0
    End

Código de operação 4:


    If Op Eql 4 => Stop()

Stop é uma instrução predeclarada do ISPS para congelar o estado da máquina permanentemente.

Código de operação 5:


    If Op Eql 5 => PC <- Z();

Essa instrução altera a sequência normal de execução de instruções, alterando o valor do PC.

Códigos de operação 6 e 7:

Vamos por enquanto definir


    If Op Eql 6 => Stop();
    If Op Eql 7 => Stop()


next up previous
Next: Ciclo de interpretação de Up: Estado do processador Previous: Cálculo do endereço efetivo
Siang Wun Song
2001-09-19