Exercícios de programação assembly e número de endereços (operandos)

O número de endereços se refere à quantidade de operandos explicitados nas intruções. Para praticar um pouco de programação de baixo nível, com um assembly didático, considere máquinas de zero, um, dois e três endereços, lembrando que a máquina de 0 endereço utiliza pilha e não tem como ser puramente de 0 endereço.

Escreva, para cada uma dessas máquinas, um programa que implemente a função:

X = (A + B x C) 

As instruções disponíveis para cada uma das máquinas são:


Resposta (0, 1, 2 e 3 endereços na sequência):

PUSH   A          ; coloca A no topo da pilha
PUSH   B          ; coloca B no topo da pilha
PUSH   C          ; coloca C no topo da pilha
MUL               ; B x C no topo da pilha
ADD               ; (B x C) + A no topo da pilha
POP    X          ; retira o resultado do topo da pilha e guarda em X


LOAD   B          ; AC <- B                AC = B
MUL    C          ; AC <- AC x C      AC = B x C
ADD    A          ; AC <- AC + A      AC = A + B x C
STORE  X          ; X  <- AC              X  = A + B x C


MOVE   X,B        ; X <- B                 X = B
MUL        X,C        ; X <- X x C         X = B x C
ADD        X,A        ; X <- X + A         X = A + B x C


MUL      X,B,C             ; X <- B x C      X = B x C
ADD      X,X,A             ; X <- X + A      X = A + B x C


Agora, que tal praticar com a expressão a seguir?

X = (A + B2)
          C