因此,在本课程中,我们使用LC-3汇编语言进行了大量处理。对于我们的一项家庭作业的问题,我们得到了这个:
“假设我们有16个通用寄存器,60个操作码,20位指令大小和64K字节可用内存空间。 a)如果我们想要一个LD DR,偏移指令,有多少位可用于偏移?“
我怎么去发现这个?在课堂上,我们使用LC-3,我已经知道它具有16位的指令大小,其中操作码是4位,存储器位置是3位(R0-R7),并且可以计算出偏移量。我们从未学过如何自己计算这些......所以我不知道如何弄清楚指令的操作码在这种语言中有多长,指令大小为20位,甚至多少位记忆位置是。有人可以帮忙吗?
答案 0 :(得分:2)
“假设我们有16个通用寄存器,60个操作码,20位指令大小和64K字节可用内存空间.a)如果我们想要一个LD DR,偏移指令,有多少位可用于偏移?“
我该如何找到这个?
让我们分解一下:
LDR DR, offset
^ ^
| general-purpose register
opcode
问题是有60种可能的操作码,因此您需要ceil(log2(60))
== 6位才能编码所有可能的操作码。
然后它说有16个GPR,你需要ceil(log2(16))
== 4位才能编码使用其中任何一个。
在使用了6 + 4 == 10位的操作码和GPR后,剩下的10位用于编码其他任何内容。在这种特殊情况下,“其他任何东西”似乎只是偏移量,所以你有10位可用于偏移。