J'ai fait cela trop vite :aie:
Quand j'ai regardé la page:
https://www.d.umn.edu/~gshute/mips/i...n-coding.xhtml
J'ai vu le nombre de bits pour chaque partie:
opcode: 6 bits
rs: 5 bits
rt: 5 bits
rd: 5 bits
shamt: 5 bits
funct: 6 bits
- Pour 6 bits, ce sera donc 0x3F et 0x1F pour 5 bits (donc oui pour shamt c'est 0x1F :)).
- Ensuite c'est une question de décalage. Prenons le cas de shamt qui commence en fait au 6ème bit et va jusqu'au 10ème.
Du coup, pour arriver au 6ème bit, si tu voulais mettre juste un 1 au bit de poids faible. Tu vas vouloir avoir:
1 000000 et donc ce serait 1 << 6 (et non le 5 que j'avais mis).
Donc, tu as raison, la bonne opération serait:
Code:
1 2
|
int instruction = ((opcode & 0x3F) << 26) | ((rs & 0x1F) << 21) | ((rt &0x1F) << 16) | ((rd & 0x1F) <<< 11) | ((shamt & 0x1F) << 6) | (funct & 0x3F); |