PR05 - Sobre pseudo-instruções e o macsim

PR05 - Sobre pseudo-instruções e o macsim

por Nathalia Orlandi Borin -
Número de respostas: 3

Olá novamente, eu e meu grupo tivemos algumas dúvidas com relação ao projeto:

1)  Pseudo-operações como CALL ou PUSH geram mais de uma instrução de máquina.

Na apostila do MACAL podemos obter informações sobre como montar as instruções CALL, PUSH e RET, porém não há nada a respeito sobre as instruções STR e TETRA (que por sinal não fazemos ideia do que ela deveria fazer, heh).

No caso da STR, sabemos que temos que colocar a string fornecida como argumento em algum lugar da memória. Mas como transformar isso em instruções de máquina? Devemos usar STB em todos os caracteres da string? Mas onde armazenar esses bytes, de forma que o programador não acabe usando essas posições de memória por engano?

 

2)  Você deve gerar um arquivo com o código-objeto do programa. O formato desse arquivo não está especificado: você deve inventar um formato próprio que facilite sua vida na hora de escrever o vinculador.

Se o código objeto que geramos pode ter o formato que acharmos melhor, o macsim que nos foi fornecido deveria ser capaz de rodar o código de maquina criado a partir dele? Surgiu essa dúvida pois percebemos que instruções como INT são montadas pelo maclk fornecido desta forma:

fe000080 (onde fe é o opcode da instrução INT)

Enquanto estávamos montando nossos programas desta forma:

fe800000

Pois pareceu conveniente seguir o esquema de operandos que está em optable.c, isto é, fazer com que o primeiro operando seja o BYTE3 recebido por INT, e não o último:

{ .name = "INT",  .opcode = INT,  .opd_types = { BYTE3,    OP_NONE,  OP_NONE   } },

Essa seria uma implementação válida? Ou devemos nos adequar ao que o macsim deve receber?

Muito obrigada!

Em resposta à Nathalia Orlandi Borin

Re: PR05 - Sobre pseudo-instruções e o macsim

por Fernando Oliveira -

Olás,

 

(1) Eu acho que vocês estão complicando um pouco. Na página 19 da apostila há um exemplo de como a instrução STR deve ser montada: os bytes da string devem ser colocados um por um no texto do programa e, eventualmente, bytes 0 devem preencher até um múltiplo de 4 (veja como a string "Hello World!\n" ocupa as quatro primeiras linhas).

O texto da string fica no mesmo lugar do texto do programa e, portanto (assim como qualquer outra parte da memória), pode ser executado se seu programa por algum motivo desviar para lá. Isso pode, é claro, causar todo tipo de comportamento esquisito.

(2) O código objeto não é o código de máquina que o simulador roda, então por isso ele pode ter o formato que você quiser. Mas o linker deve gerar um arquivo com o código de máquina, que deve poder ser lido pelo simulador. Então a saída do linker deve ser exatamente a esperada pelo simulador.

Fernando

Em resposta à Nathalia Orlandi Borin

Re: PR05 - Sobre pseudo-instruções e o macsim

por José Coelho de Pina -

Olás,

A resposta do Fernando Mario resolveu as dúvidas?
Tópicos em um fórum são mais ou menos como um projeto usando git.
Mais ou menos temos open, branch, pull resquest e closed.
Podemos cosiderar esse tópico closed?

E por falar em git,

Reprodutor de vídeo está carregando.
Tempo 0:00
Duração 0:00
Carregado: 0%
Tipo de Stream AO VIVO
Tempo Restante 0:00
 
1x
  • Capítulos
  • sem descrições, selecionada
  • Sem Legendas, selecionada