Conjunto de instruções do processador¶
A referência do assembly SAPHO, útil para ler o .asm gerado e a trilha de instruções na forma de onda.
Convenções de nome: prefixo P_ empilha o acumulador antes; F_ opera em ponto flutuante; S_ toma o segundo operando da pilha em vez da memória; sufixo _M aplica a operação na memória; sufixo _V é pseudo-instrução com deslocamento constante para acesso a vetores.
Memória e pilha¶
Instrução |
Faz |
|---|---|
|
carrega da memória no acumulador |
|
carrega indireto (endereço = operando + índice); |
|
grava o acumulador na memória |
|
grava indireto; |
|
empilha e desempilha o acumulador |
|
carrega e grava com endereço vindo do acumulador ou da pilha |
|
carrega o endereço de uma variável como constante |
Entrada e saída¶
Instrução |
Faz |
|---|---|
|
lê a porta de entrada indicada |
|
lê convertendo para float |
|
escreve o acumulador na porta de saída |
Controle de fluxo¶
Instrução |
Faz |
|---|---|
|
salto incondicional |
|
salta se o acumulador é zero (palavra inteira) |
|
chamada e retorno de sub-rotina |
|
nada |
Aritmética¶
Grupo |
Instruções |
|---|---|
soma e subtração |
|
multiplicação |
|
divisão e resto |
|
negação e absoluto |
|
saturação e escala |
|
conversão |
|
sinal |
|
Lógica, bits e comparações¶
Grupo |
Instruções |
|---|---|
bit a bit |
|
lógicos |
|
deslocamentos |
|
comparações |
|
Cirurgia de expoente¶
Usadas pelas rotinas matemáticas para operar direto no campo de expoente do float:
Instrução |
Faz |
|---|---|
|
aproxima a raiz quadrada pela potência de dois mais próxima (semente de Newton) |
|
multiplica por \(2^k\) somando no expoente |
|
extrai \(\lfloor \log_2 \lvert x \rvert \rfloor\) como inteiro |
São 108 opcodes ao todo. O mecanismo que sintetiza apenas os usados está descrito em Os módulos HDL do SAPHO por dentro.