Ir para conteúdo

Simulador de processador


Rubem

Posts Recomendados

Como eu disse no texto que coloquei como resposta ao colega sobre um bom livro de arquitetura de computadores, eu não sou expert no assunto, mas apenas estudante. Como estudante, eu tenho também algumas dúvidas. Teria alguém aqui disposto a me ajudar?

Eu tenho o projeto de um processador de 32bits. Os registradores são dos tipos UFS (o Professor resolveu usar a sigla da Universidade). Cada processador tem um conjunto de instruções. 

Bem, a tarefa inicial é a seguinte: criar um script em C o qual, quando o Professor executar (colocando no executável criado por ele, como argumento o nome do script criado, mais o nome do arquivo de saída, ou seja, a função main deverá está completa com int argc e char *argv[]) , este deverá retornar as instruções assembly deste script, mas no padrão de saída o qual o Professor já especificou.

O registrador U, possui a seguinte arquitetura: O primeiro campo OP com 6 bits(estes 6 bits começam com 0-zero e os 5 demais serão preenchidos), mais 3 campos (x,y,z) cada um com 5 bits e um campo L com 11 bits.

O registrador F, possui a seguinte arquitetura: O primeiro campo OP com 6 bits(este 6 bits começam com 1-hum e o 5  restantes serão preenchidos), mais 3 campos (x,y,z) com 5 bits cada um, mas somente z preenchido com 0-zeros e um campo L com 11 bits.

O registrador S, possui a seguinte arquitetura: O primeiro campo OP com 6 bits(estes 6 bits começam com 11 e os 4 restantes serão preenchidos), mais 3 campos (x,yz) cada um com 5 bits, mas y e z são preenchidos com 0-zeros e um campo L com 11 bits.

Eu já vi que terei de trabalhar com binários no meu script em C.  Eu consigo fazer o script, mas a minha única dúvida é: Como eu preencho determinado campo (o qual será representado por uma variável, logicamente!) com 0-zeros ou com 1-hum  usando C?  ficando assim: " 000000-11111-00000-11100-11001100101".

Estes valores deverão está em "char" para depois fazer um "cast" para binários? ou posso usar "0bXXXXXX" e trabalhar diretamente com binários?

Pelo que percebo, deverei ter vários "if", inclusive aninhados( ou "case") para as condições dadas acima. O que acham? Confesso que estou meio confuso no desenvolvimento.  

 

Eu tentei buscar alguma "luz"com o Fernando Mendes, mas ele nem respondeu. Deve está sufocado de tantos e-mails de postagens. Eu entendo.

 

Link para o comentário
Compartilhar em outros sites

Oi @Rubem!

Desculpe não responder antes. De fato já não lembro por onde me contactou. São realmente muitas mensagens e trabalhos aqui...

De qualquer forma, minha sugestão seria realmente abrir um tópico aqui. Então tomei a liberdade de transformar sua resposta em um novo tópico (fica à vontade para mudar o título se quiser), na área de programação em C. Assim o pessoal consegue ajudar mais. No entanto, é importante você colocar um código inicial e falar sobre suas dúvidas, sabe? Fica mais fácil para a galera ajudar.

Grande abraço!

Link para o comentário
Compartilhar em outros sites

Ok. Fernando. Quando eu falei lá no tópico, não foi uma cobrança. Eu sei e compreendo bem as demandas as quais você a equipe tem. Mesmo com a pandemia, as coisas não estão paradas, mas cada vez mais avançando, principalmente na área tecnológica.

Quanto ao código, eu realmente não sei por onde começar, visto que, está me travando em como escrever nos campos do registrador, como eu coloquei la no tópico sobre arquitetura de computadores. Mas eu sinto que falta muito pouco. Como eu me conheço, eu sei que se eu conseguir começar e entender bem o que devo fazer, eu vou muito mais além do que até eu mesmo possa imaginar, por que eu busco ser autodidata e eu gosto muito dos assuntos relacionados a Arquitetura de Computadores, Engenharia Reversa, Análise de Binários, Análise de Malware, etc, assuntos relacionados. Por isto é que resolvi contribuir com o MB. aqui tem conteúdo e assunto para eu aprender muito. 

Editado por Rubem
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Você terá que criar um método de decodificação de instruções, que recebe a instrução de 32 bits. Para isolar o opcode é necessário usar uma máscara de bits com deslocamento para a direita, é recomendável trabalhar com instruções hexadecimais. No exemplo abaixo, pode-se analisar que a extração do opcode é de um campo de 8 bits(0xFF) com deslocamento de 24 bits para a direita(32 bits - 8 bits = 24 bits) com o bitwise &(AND):

Citar

uint32_t opcode = (instruction >> 24) & 0xFF;

Isso é um exemplo de manipulação de instruções de 32 bits. Espero que tenha ajudado! 😃

Link para o comentário
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...