Je dispose d'un fichier txt que je prends nombres comme 02324020 qui est le code de la machine de l'instruction MIPS: add $t0, $s1, $s2
Comment est-ce que je masque les bits que je ne veux pas de mon machinecode?
Quand il est en binaire et les couper en tronçons de 6,5,5,5,5 , 6 les nombres pris sont: 0,17,18,8,0,20
Cela donne l'idée de l'instruction comme R [rd] = R [rs] + R [rt] et le nombre de 26- J'appelle opcode 0 signifiant format R, rd = 8, rs = 17, rt = 18
J'essaie de masquer les bits afin que je voie seulement les bits entre 21-25 et que je reçois le numéro qu'ils sont: 0,17,18,8,0,20 parce que le décalage vers la droite: printf("\n%x\n", code >>26);
me donne t il opcode 0 et me dit que c'est le format R.
Alors maintenant, je suis en train de trouver le 17 mais je ne sais pas quoi placer après & 0b
dans:
printf("\n%x\n", code >>21 & 0b____);
je pourrais vraiment utiliser un exemple pour trouver les numéros restants de mon numéro 02324020
Ceci est mon code à ce jour:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
unsigned int code = 0;
FILE *fp;
fp = fopen(argv[1], "r+");
int result = fscanf(fp, "%x", &code);
printf("\n hex-1: %08X, decimal-1: %d \n", code, code);
printf("\n%x\n", code >>26);
printf("\n%x\n", code >>21 & 0x0b00000011111); //what can i do to change this
while (result != EOF)
{
result = fscanf(fp, "%x", &code);
printf("\n read hex: %08X, decimal: %d \n", code, code);
if(feof(fp))
{
puts("EOF");
break;
}//if
}//while
}
Faire code '>> 21 & 0b11111' devrait vous donner 17 que vous recherchez. Est-ce que ça ne marche pas? – frslm
!!! cela fonctionne, mais pourquoi ob11111? et comment cela changerait-il quand j'essayerais d'obtenir le prochain 18? – KunaiBunsen
Modifier: attendre je l'ai essayé avec les autres sections et ils travaillent oh mon dieu qui était si simple je ne peux pas le croire, merci! – KunaiBunsen