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!