Você está na página 1de 3

Linguagem de Máquina (Nível 1)

Apresentação
O AS/400 foi projetado para ser uma máquina de alto nível, de fácil uso e programação. Foi projetado
também para ser independente de tecnologia, permitindo o porte de seu sistema operacional e aplicativos
existentes para qualquer máquina da família, independentemente do processador e de mudanças na
arquitetura de hardware.
Este objetivo foi alcançado através de uma interface de máquina de alto nível. Esta interface esconde
todo o hardware que há por trás dela e disponibiliza pros usuários e programadores uma “máquina
virtual” com instruções de máquina de alto nível. Estas instruções são o nível mais baixo que se consegue
atingir em programação no AS/400, caracterizando-se como sua “linguagem de máquina”.
Não há, portanto, uma linguagem de máquina no AS/400 como a que encontramos em outras
plataformas. As instruções da máquina de alto nível são de nível elevadíssimo, orientadas a objeto, com
instruções poderosas que somente podem ser aplicadas aos objetos corretos (fortemente tipada).
Outra consequência do projeto peculiar do AS/400 é a dificuldade de se obter documentação sobre sua
“linguagem de máquina”, já que dificilmente se programa em nível tão baixo nesta plataforma. Nosso
grupo conseguiu um guia de referência com todas as instruções da máquina de alto nível, e o principal da
informação obtida é exposto nos próximos tópicos, mas a informação não era detalhada e alguns tópicos
ficaram obscuros.

Tipos de Operandos
Cada instrução precisa de zero a quatro operandos. Cada operando pode consistir de um ou mais campos
que contém um operando nulo, um valor imediato de dado ou uma referência a um objeto ODT. O
tamanho do operando depende da versão do gabarito de programa. Se o número da versão é 0, o tamanho
do cammpo de operando é 2 bytes. Se o número de versão é 1, o tamanho do campo de operando é 3
bytes.

Operandos Nulos
Certas instruções permitem que certos operandos sejam nulos. Em geral, um operando nulo significa que
alguma função opcional da instrução não deve ser realizada, ou que uma ação default deve ser executada
pela instrução.

Operandos Imediatos
O valor deste tipo de operando está codificado no operando de instrução. Operando imediatos podem
assumir os seguintes valores:
• binário com sinal – representando um valor binário de -4096 a 4095.
• binário sem sinal – representando um valor binário de 0 a 8191.
• byte – representando um único byte, com valor de 0x00 a 0xFF.
• número de instrução absoluto – representando um número de instrução na faixa de 1 a 8191.
• número de instrução relativo – representando um deslocamento de uma instrução em relação a
instrução em que operando aparece. Este valor de operando pode identificar um deslocamento de
instrução de -4096 a 4095.

Referências a Objetos ODT


Este tipo de operando contem uma referencia (possivelmente qualificada) para um objeto na ODT.
Operandos que sejam referências a objetos ODT podem ser operandos simples ou operandos compostos.
Operando Simples
O valor codificado no operando referência um objeto específico definido na ODT. Operandos simples
consistem em um único operando de 2 bytes.

Operandos Compostos
Um operando composto consiste em um operando primário (2 bytes) e uma série de uma a três operandos
secundários. O operando primário é uma referência ODT para o objeto base, enquanto que os operandos
secundários servem como qualificadores para o objeto base.
Um operando composto pode ter os seguintes usos:
• Referência a subscript
Um elemento individual de um array de objetos de dados, um array de ponteiros, ou uma lista
de definição de instruções podem ser referênciados por um subscript em um operando composto.
O operando consiste em uma referência primária ao array e um operando secundário para
especificar o valor de índice para um elemento do array.
• Referência a substring
Uma porção de um objeto de dados caracter pode ser referenciado como um operando de
instrução através de um operando composto de substring. O operando consiste de um operando
primário para referenciar o objeto string base e referências secundárias para especificar o valor
de um índice (posição) e o valor de um comprimento pra substring.
• Referências de base explícitas
Um operando de instrução pode especificar uma sobrecarga explícita para o ponteiro de base
para um objeto de dados com base ou um objeto de endereçamento com base. O operando
consiste em um operando primário referenciando o objeto com base e um operando secundário
referenciando o ponteiro no qual basear o objeto para este operando. O deslocamento implícito
na definição na ODT do operando primário e a endereçabilidade contida no ponteiro explícito
são combinados para determinar um endereço para o operando.
A base explícita pode ser combinada com o operador composto de subscript ou de substring para
determinar um operando composto de subscript ou de substring com base.

Grupos de Instruções

Funções Básicas
• Instruções de Computação e Desvio
• Instruções de Dia, Hora e Timestamp
• Instruções de Endereçamento de Ponteiros e Resolução de Nomes
• Instruções de Endereçamento de Espaço
• Instruções de Gerenciamento de Espaço
• Instruções de Gerenciamento de Heap
• Instruções de Gerenciamento de Programas
• Instruções de Execução de Programas
• Instruções de Controle de Criação de Programas
• Instruções de Índice Independente
• Instruções de Gerenciamento de Fila
• Instruções de Gerenciamento de Trancamento de Objetos
• Instruções de Gerenciamento de Exceções
• Instruções de Gerenciamento de Espaço de Fila

Funções Estendidas
• Instruções de Gerenciamento de Contexto
• Instruções de Gerenciamento de Autorização
• Instruções de Gerenciamento de Processos
• Instruções de Gerenciamento de Recursos
• Instruções de Gerenciamento de Espaço de Dump
• Instruções de Observação de Máquina
• Instruções de Funções de Suporte de Interface de Máquina

Interface de Suporte à Instruções


• Especificação de Exceções