Resumo sobre Linguagem de Máquina
Trabalho pronto escolar de Informática sobre Linguagem de Máquina.
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