Assembly 64个寄存器使用15位长度的MIPS体系结构
我有一个任务要做,它要求做以下事情: 我们有64个寄存器,它们的所有命令都有15位长度。 它还指出,我们在编译它们(将它们转换为机器语言)后得到了以下结果。引用2个寄存器的7个命令和引用1个寄存器的60个命令。它询问我们可以有多少没有寄存器引用的命令 这是我所想的,但似乎我有点不对劲Assembly 64个寄存器使用15位长度的MIPS体系结构,assembly,32bit-64bit,cpu-architecture,opcode,Assembly,32bit 64bit,Cpu Architecture,Opcode,我有一个任务要做,它要求做以下事情: 我们有64个寄存器,它们的所有命令都有15位长度。 它还指出,我们在编译它们(将它们转换为机器语言)后得到了以下结果。引用2个寄存器的7个命令和引用1个寄存器的60个命令。它询问我们可以有多少没有寄存器引用的命令 这是我所想的,但似乎我有点不对劲 Since this is mips architecture each of the commands we use (add,all etc) will be using 32bits where for th
Since this is mips architecture each of the commands we use (add,all etc) will be using 32bits where for the r instructor we have:
opcode(6bits),rs(6bits),rt(6bits),rd(6bit),shamt(5bit),func(3bit)
because it says that we have 64 registers so we need 6 bits for each and the func is 3 due to the fact that we have max 7 functions.So in the case for example of all we have the following
000000->opcode
000000->rs
6bit-> rt
6bit-> rd
5bit-> shame
3bit-> the function.
这是正确的还是我遗漏了什么?也许我们不应该使用r指令,而是i?当我们有60个命令和1个寄存器引用时,第二个操作会发生什么?哪位讲师实际上只能以一个语域作为论点?非常感谢您的帮助我怀疑这是在谈论mips,这是在谈论您将要设计的虚拟架构:) 带有2个寄存器的7个命令需要3+6+6=15位,因此使用所有可用位。幸运的是,它确实让1个操作码可以自由地对其他指令进行编码:)让我们假设
000b
用于这些指令
这意味着,对于其余指令,我们只剩下12位(因为前3位是000
)。要对60条指令进行编码,我们需要6位,寄存器需要另外6位,这样同样会占用所有空间
但是,我们仍然有4个操作码可用,我们可以将它们全部用于不带操作数的指令,当然,在中,我们仍然有以前用于寄存器的6位,因此我们可以对不带操作数的4*64=256指令进行编码
000 000000 xxxxxx = no operand block #1 with 64 instructions
000 000001 xxxxxx = no operand block #2 with 64 instructions
000 000010 xxxxxx = no operand block #3 with 64 instructions
000 000011 xxxxxx = no operand block #4 with 64 instructions
000 000100 rrrrrr = first instruction with 1 operand
000 111111 rrrrrr = last instructon with 1 operand (60 total)
001 ssssss tttttt = first instruction with 2 operands
111 ssssss tttttt = last instruction with 2 operands (7 total)
“我们有64个寄存器,它们的所有命令都有15位长度。”哈?什么是15位长度?一些只有一个寄存器操作数的MIPS指令示例:
jr
,bltz
,lui
。这就是我自己看到的。也许寄存器最多只能占用15位?这就是我被困的地方。分配正好说明了这些:假设我们有一个cpu,其中有64个寄存器,其命令长度为15位。也许是说,嘿,我每个寄存器只能存储15位?但是这有点不清楚…@Michael,我可以问你,因为我是一个noobie,如果0注册为j教练吗?这是我的第一个想法,但后来我想,嘿,如果第一个例子中,我们有15位,所以寄存器是6+6,函数是3。那么你说我们只是从r教练那里避开函数?我也可以问一下吗你为什么要写000b?b应该是什么?很抱歉问了你一些愚蠢的问题,我只是想更好地理解计算机体系结构。一开始我的错误是,对于7个命令,我认为它们不是剩下的3位作为操作码,而是func(r讲师),让操作码为空,我想,嘿,你可以让操作码为空……好吧,我把一切都弄明白了。如果你能最后解释000b,我将不胜感激b
只是不清楚时表示二进制的后缀:)我明白了。非常感谢。我非常感谢你的帮助!