首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于lc3的虚拟机

用于lc3的虚拟机
EN

Stack Overflow用户
提问于 2021-12-22 14:41:39
回答 1查看 63关注 0票数 1

你好,我不知道为什么我需要添加指令,到7,这是添加指令的cpp代码

代码语言:javascript
运行
复制
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)

  • bits 11-9目标寄存器
  • 位15-12
  • 位8-6 source1
  • 位5 0或1(即时模式)
  • 位4-3 nothing

H 112位2H 213f 214

这个0b111 (小数为7)是如何发挥作用的?为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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 >> 900000000 00000efg中,也就是我们希望提取的三个位。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70450785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档