J'ai une instruction de 32 bits que je souhaite diviser en quatre octets. Disons que l'instruction ressemble à ceci:divisez l'instruction de 32 bits en octets et déplacez le résultat vers une autre adresse en utilisant c
yyyyyzzzzzzxxxxxx?????????
L'instruction est un mot qui se compose de quatre ints non signés. y
représente le code d'opération, et ???
sont pour l'espace inutilisé. Je travaille sur une machine big-endian. Ce que je voudrais arriver est de déplacer les valeurs de z
+ w
à a
.
Je n'ai jamais travaillé dans C avant, mais je l'ai essayé de le faire comme ça.
Voici comment je lis le mot, juste pour que je ca imprimer sur chaque octet:
unsigned int a, b, c, o;
w = instruction << 24;
z = instruction << 16;
x = instruction << 8;
y = instruction;
Ici imprimer des valeurs non signées, juste pour vérifier ce que le résultat sont.
printf("%u\n", w);
printf("%u\n", z);
printf("%u\n", x);
printf("%u\n", y);
printf("\n");
regs[x] = instruction + instruction << 8;
si j'imprimer les valeurs de regs[x]
après cela, je peux voir que j'a une valeur maintenant, mais est-ce la bonne façon de le faire? Quand je fais ceci, dois-je régler le registre = z
+ w
?
EDIT Mabye je devrais obtenir les bits comme celui-ci?
y = (inst >> 24) & 077;
x = (inst >> 16) & 0xffff;
z = (inst >> 8) & 0xffff;
w = (inst) & 0xffff;
puis faites comme ceci:
regs[y] = z + w;
S'il vous plaît noter qu'un « octet » est généralement considéré comme 8 bits, 32 bits divisant alors en quatre octets et encore obtenir trois bits inutilisés est un peu difficile. Aussi, lors de l'illustration d'un mot comme celui-ci, chaque lettre devrait typiquement représenter un bit. Mais vous ne montrez que 23 lettres (y compris les '?' S à la fin), ce qui rend difficile à interpréter. – unwind
@unwind désolé, oui je devrais l'avoir écrit comme ça yyyyyzzzzzzxxxxxx ????????? peut-être que j'ai mal compris ce que je devais faire, j'ai fait un montage à la question – user123