Um Conjunto de Softwares Básicos Integrados para
Arquitetura SIC/XE
Argemiro Soares de Aliança Neto, Sílvio Roberto Fernandes de Araújo
Departamento de Ciências Exatas e Naturais - DCEN
Universidade Federal Rural do Semi-Árido -UFERSA
Av. Francisco Mota, 572 Bairro Pres. Costa e Silva
CEP 59.625-900 - Mossoró - RN
argemiront@gmail.com, silvio@ufersa.edu.br
Abstract. The study of basic softwares include the study of compilers,
assemblers, linkers and loaders, as well as their target architecture. SIC
architecture is approached in this paper for its importance in basic software
courses. However, testing SIC architecture based softwares is complicated
because there is not a real machine model. This paper suggests an SIC and an
SIC/XE simulator able to read an object program of this “instructional
machine” and to show the step-by-step execution of each instruction; along
with this simulator, an assembler, a memory controller and a linking and
loader are presented, thus eliminating the problem of the absence of a real
machine model
Resumo. O estudo dos softwares básicos inclui o estudo de compiladores,
assemblers, linkers e loaders, além da arquitetura alvo de tais softwares
básicos. Utilizamos a arquitetura SIC no desenvolvimento deste trabalho pela
sua importância em cursos de software básico. Entretanto, os testes de
softwares em arquitetura SIC apresentam a dificuldade de não possuirem um
modelo real da máquina. O presente artigo propõe um simulador da arquitetura
SIC e SIC/XE capaz de ler um programa em formato objeto dessa “máquina
didática” e mostrar passo-a-passo a execução de cada instrução; juntamente
com este simulador, são apresentados um montador de arquivos objeto, um
controlador de memória e um link/loader, eliminando o problema da ausência
de um modelo real.
1. Introdução
Softwares básicos se diferenciam dos softwares aplicativos devido a sua dependência
com relação à máquina em que será executado. Softwares básicos têm como objetivo
possibilitar a operação e o uso da máquina seja qual for a aplicação utilizada. Eles
possuem uma relação muito próxima com o equipamento no qual devem ser executados.
Dentre os principais softwares básicos conhecidos estão os compiladores, montadores
(do inglês assemblers), ligadores (linkers), carregadores (loaders), sistemas
operacionais etc [Aho 2008].
[Beck 1993] propôs o computador didático simplificado (SIC - Simplified
Instructional Computer), que apesar de ser uma máquina hipotética, possui a maioria
das características das reais e oi proposta para fins didáticos no estudo de softwares
básicos. Além da arquitetura, [Beck 1993] apresenta o assembly da máquina e discute a
implementação de um assembler e um linking loader, em suas versões standard e
extended.
Apesar de todos os detalhes para implementação dos softwares básicos da
arquitetura proposta, há ainda uma grande dificuldade para testar a funcionalidade dos
softwares desenvolvidos, uma vez que não existe um modelo real da arquitetura. Desse
modo, este artigo propõe um simulador da arquitetura SIC e SIC/XE obedecendo ao
conjunto de instruções, ao banco de registradores e aos modos de endereçamento da
memória para visualizar o estado da arquitetura durante a execução de programas.
Tal simulador é uma ferramenta para auxílio dos desenvolvedores de softwares
básicos para a arquitetura SIC e SIC/XE. A primeira versão interpretava o código em
assembly [Aliança Neto 2010]. A nova versão simula a execução de um programa em
formato binário do SIC e SIC/XE permitindo visualizar o estado de cada registrador, da
memória e dados importantes da instrução a ser executada. A ferramenta também inclui
um montador capaz de gerar um programa objeto equivalente ao programa escrito em
assembly.
O artigo está organizado da seguinte forma: a seção 2 faz a descrição do
montador, a seção 3 apresenta o link/loader, a seção 4 o controlador de memória, a
seção 5 o simulador e a seção 6 apresenta as considerações finais.
2. O Montador
O montador recebe como entrada um código assembly compatível com a plataforma e
tem como saída um código objeto executável com as mesmas funcionalidades do
programa original. O arquivo objeto contém todas as informações necessárias para a
correta identificação, carga na memória, endereçamento, carga de bibliotecas externas e
execução do programa.
O arquivo objeto é dividido em, no máximo, seis seções. Cada seção tem uma
funcionalidade específica, como segue:






Header: contém o nome do programa, o tamanho do código objeto, e o endereço
de carga na memória. Esse último também indica se o programa deve ser
alocado em uma posição específica ou em qualquer posição disponível
(relocável);
Definitions: tem a proposta de publicar variáveis internas para serem acessadas
por outros programas. Essa seção é opcional;
References: indica bibliotecas e/ou variáveis externas usadas no programa. Essa
seção é opcional;
Text: contém as instruções, variáveis e ponteiros para os dispositivos de entrada
e saída. De fato, somente os dados desta seção são carregados na memória;
Modifiers: armazena informações para ajuste do endereçamento de memória em
programas relocáveis e link com bibliotecas externas. Essa seção é opcional;
End: marca o fim do código executável e indica em que posição de memória está
o primeiro código executável do programa.
O montador cria arquivos executáveis em formato binário. Para facilitar o
entendimento do processo, são criados adicionalmente um arquivo assembly e um
ASCII. O primeiro contém o código original e o resultado da montagem. O segundo o
código objeto em formato ASCII para cada seção do programa original. A Figura 1(a)
mostra um exemplo de arquivo binário e a Figura 1(b) mostra o equivalente em padrão
ASCII.
Figura 1. Exemplo de programa objeto em binário e em ASCII
A montagem de programas SIC Standard têm características diferentes do
padrão SIC/XE. O simulador provê opção de montagem e execução nos dois padrões.
Foi adicionado ao código objeto um byte que indica o fim de cada linha
representada no código objeto em ASCII para eliminar a ambiguidade existente entre os
cabeçalhos e os dados da seção, no entanto, o mesmo não é carregado na memória no
momento da execução.
3. O Link/Loader
O link/loader é o software básico responsável, basicamente, pela carga do programa na
memória, suas dependências (outros programas ou bibliotecas) e resolução dos
endereços de memória.
O link/loader armazena informações importantes sobre os programas que estão
sendo carregados na memória, tais como: nome, tamanho, posição de alocação e uma
tabela de variáveis externas com seus respectivos endereços. Tais informações são
necessárias para evitar que um mesmo programa seja alocado duas vezes, como realizar
a desalocação de memória e para que as variáveis públicas do programa sejam
acessíveis por outros programas.
Ao realizar a carga de um programa, se uma biblioteca ou variável externa é
referenciada no programa então o link/loader a procura primeiramente na lista de
programas carregados, se não a encontra procura no mesmo diretório do programa que
está sendo carregado, caso ainda não encontre o usuário é questionado para informar o
endereço do arquivo.
Na alocação do programa é feita uma solicitação de memória ao controlador de
memória de acordo com o tamanho do programa informado na seção Header do arquivo
objeto. Caso não haja memória disponível para a carga do programa ou as posições de
memória necessárias para a carga de programas não-relocáveis se encontram ocupadas o
programa não é carregado e uma mensagem de erro é mostrada.
4. O Controlador de Memória
O controlador de memória gerencia todo acesso à memória, seja para leitura ou para
escrita. O controlador fornece acesso à memória e trabalha de forma semelhante à E/S
programada [Stallings 2000], onde uma solicitação é feita fornecendo o endereço inicial
e a quantidade de bytes a serem lidos ou escritos, no último caso também é fornecido o
valor a ser lido. O controlador mantém também as chaves de acesso à memória,
disponíveis na arquitetura SIC/XE.
Um gerenciador de alocação de memória baseado em mapa de bits [Tanenbaum
2007] foi implementado para alocação contínua. Ao receber uma solicitação de alocação
o controlador verifica no mapa se há memória disponível e então retorna a posição da
alocação. Na desalocação somente o mapa de bits é alterado, os dados continuam na
memória.
5. O Simulador
O simulador une todas as ferramentas desenvolvidas em um ambiente com interface
gráfica completa, onde o usuário poderá montar programas objeto e executá-los no
mesmo ambiente. Verificando o passo-a-passo da execução.
O software simulador foi desenvolvido em C#, baseado nas tecnologias mais
avançadas do .NET Framework 4, sendo compatível apenas com o Sistema Operacional
Windows, nas versões Windows Vista e posteriores.
5.1 Funcionamento Básico
5.1.1 Modos de Operação
O sistema tem dois modos de operação, “Passo-a-passo” ou “Contínuo”, disponíveis no
menu Executar. No modo contínuo deverá ser informado o tempo de passo em
milissegundos na barra de tarefas de controle de execução. Esse tempo indica quanto
tempo o sistema fica em espera entre a execução de duas instruções. No modo passo-apasso o botão “play”deverá ser acionado para cada execução de instrução.
5.1.2 Fluxo Normal de Trabalho
O usuário seleciona o arquivo do programa através do menu ArquivoExecutar
Programa Objeto, o modo de operação e executa o programa com o “Play”. Caso queira
pausar, clica em “Pause” e “Play” para retornar. Caso queira abortar, clica em “Stop”.
Ao executar uma instrução os valores alterados nos flags, registradores e na
memória são indicados através de uma animação onde o campo alterado fica com o
segundo plano verde por alguns instantes, como na Figura 2.
Figura 2. Tela do simulador em execução
No campo Offset da memória o usuário pode definir um valor em hexadecimal a
partir do qual o campo de memória irá mostrar os valores.
5.1.3 Programas que usam E/S
Se o programa a ser executado utiliza dispositivos de E/S então o arquivo contendo os
dados que serão lidos dos dispositivos de entrada deve ser carregado. A carga pode ser
logo após a carga do programa através do menu Arquivo  Carregar arquivo de dados.
Nesse caso, um arquivo contendo o registro dos dispositivos de E/S também deve ser
carregado no menu Configurar  Carregar E/S.
5.1.4 O Montador de Arquivos Objeto
O arquivo a ser montado pode ser carregado no menu Arquivo  Montar arquivo
objeto. O usuário pode escolher entre montagem para objeto SIC padrão ou SIC/XE no
menu Configurar  Montador  SIC Compatível, selecionando para a primeira opção.
O arquivo a ser montado deverá estar no formato “*.asm” e ser compatível com
o assembly do SIC ou SIC/XE.
Os arquivos montados serão salvos com o nome do programa constante no
assembly e não com o nome do arquivo lido. Caso haja seções no programa cada seção
é salva em um arquivo diferente com o nome respectivo da seção.
Temos também a opção de salvar o arquivo original com os códigos de
montagem produzidos pelo montador. Nesse caso, o nome do arquivo será
“NOME_DO_PROGRAMA MONTADO.asm”.
6. Considerações Finais
O simulador da arquitetura SIC/XE foi implementado em C# usando .NET Framework,
permitindo a visualização do estado de cada registrador, dos flags da ULA e da
memória durante a execução de cada instrução de um programa objeto em formato
binário compatível com a arquitetura. São disponibilizados dois modos de execução:
passo-a-passo ou contínuo. A ferramenta ainda permite a geração do código objeto no
formato especificado por [Beck 1993].
Trabalhos futuros incluem a animação das linhas indicadoras de fluxo de acordo
com sequencia dos eventos, a utilização de um desmontador de código objeto para
exibir todas as instruções do programa sendo executado em formato assembly com
animação de transição entre as instruções e a disponibilização do aplicativo com manual
de operação na WEB.
Referências
Aho, Alfred V. et al (2008), Compiladores: princípios, técnicas e ferramentas, Addison
Wesley, 2ª. edição.
Aliança Neto, Argemiro S. de; Araújo, Silvio R. F. (2010) “Um Simulador Didático
para a Arquitetura SIC/XE”, In: I Workshop Técnico Científico de Computação.
Beck, Leland L (1993), Desenvolvimento de Software Básico, Campus, 2ª edição .
Microsoft (2010). URL: www.microsoft.com/windows/. Acessado: set. 2010.
Tanenbaum, Andrew S. (2007). Sistemas Operacionais Modernos, Prentice Hall, 2ª
edição.
Stallings, William (2000). Computer Organization and Architecture, Prentice Hall, 5ª
edição.
Download

Um Conjunto de Softwares Básicos Integrados para - DI