你好,我不知道为什么我需要添加指令,到7,这是添加指令的cpp代码
uint16_t dr = (instr >> 9) & 0b111;
uint16_t sr1 = (instr >> 6) & 0b111;
uint16_t sr2 = instr & 0b111;
uint16_t second = registers[sr2];
uint16_t immediateFlag = (instr >> 5) & 0b1;
if (immediateFlag) {
uint16_t imm5 = instr & 0b11111;
second = signExtend(imm5, 5);
}
registers[dr] = registers[sr1] + second;
所有的线条和7是我不明白的部分。这个指令是这样的:
opcode(0001)
H 112位2H 213f 214
这个0b111 (小数为7)是如何发挥作用的?为什么?
发布于 2021-12-22 14:59:57
看一看第一行代码:它试图解码目标寄存器,它以输入号的9-11位为单位。
假设instr
有16位abcdefgh ijklmnop
,那么我们要提取位9-11,即efg
。
instr >> 9
向右移动了9位,但答案仍然是16位:00000000 0abcdefg
。
& 0b111
是& 0b00000000 00000111
的缩写,所以把它应用到instr >> 9
的00000000 00000efg
中,也就是我们希望提取的三个位。
https://stackoverflow.com/questions/70450785
复制相似问题