Rubem Posted September 2, 2020 at 07:42 PM Share Posted September 2, 2020 at 07:42 PM 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. Quote Link to comment Share on other sites More sharing options...
Fernando Mercês Posted September 2, 2020 at 08:40 PM Share Posted September 2, 2020 at 08:40 PM 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! Quote Link to comment Share on other sites More sharing options...
Rubem Posted September 2, 2020 at 10:22 PM Author Share Posted September 2, 2020 at 10:22 PM (edited) 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. Edited September 2, 2020 at 10:23 PM by Rubem 1 Quote Link to comment Share on other sites More sharing options...
Magg Posted June 17, 2023 at 02:34 PM Share Posted June 17, 2023 at 02:34 PM 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! 😃 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.