Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 确定一条指令需要多少位_Assembly_Computer Science_Cpu Architecture - Fatal编程技术网

Assembly 确定一条指令需要多少位

Assembly 确定一条指令需要多少位,assembly,computer-science,cpu-architecture,Assembly,Computer Science,Cpu Architecture,问题是 您正在为一种新型计算机设计指令集。计算机有60条指令,16个通用寄存器。它支持高达27MB的字节可寻址内存。回答以下问题。 (a) 对于仅使用寄存器寻址模式的3操作数指令,该指令应为多长(位数)? (b) 对于4操作数指令,其中一个操作数是具有直接寻址模式的内存位置,该指令应该有多长(位数) 我想对于a部分,你只需要做2^x>=60,然后从那里做一个log_2来确定指令的x。同样,对于通用寄存器,2^x>=16。不过,我不确定3操作数指令和4操作数指令之间的区别是什么,以及这是如何影响总

问题是

您正在为一种新型计算机设计指令集。计算机有60条指令,16个通用寄存器。它支持高达27MB的字节可寻址内存。回答以下问题。
(a) 对于仅使用寄存器寻址模式的3操作数指令,该指令应为多长(位数)?
(b) 对于4操作数指令,其中一个操作数是具有直接寻址模式的内存位置,该指令应该有多长(位数)


我想对于a部分,你只需要做2^x>=60,然后从那里做一个log_2来确定指令的x。同样,对于通用寄存器,2^x>=16。不过,我不确定3操作数指令和4操作数指令之间的区别是什么,以及这是如何影响总位的。此外,我不确定如何导出表示内存位置所需的位。(a)的答案是否仅为6(来自第一个日志)+4(来自第二个日志)=表示所需的10位?

对于第一个,指令由一个操作码和3个作为寄存器的操作数组成。因此,所需的位将是6(操作码)+3(指令中的3个寄存器)x4(因为有16个寄存器,我们需要4位来表示它们。)=>18位+1或更多位(用于操作数或操作码信息)

对于第二个,正如问题所述,它是一个4操作数指令,一个是内存操作数,我们需要找到寻址内存操作数所需的位。 由于我们可以寻址高达27MB的地址,我们可以将内存操作数本身的位拆分为2^5(27位)、2^20(1M位)和2^3(字节)=>28位。其余位的计算也保持类似 因此,我们将这些位相加为28+6+4+4+4=>46位+1位或更多位(用于操作数或操作码信息)


希望它能解决您的问题

此(先前)作业中的解决方案和我们出错的问题均未发布,因此我将放弃我所知道的内容,并希望在测试之前确保我是正确的。您需要多少位来唯一标识每个寄存器?如果指令有3个操作数(寄存器),那么最小位数是多少?3*N该指令必须大于该数字,对于4操作数,至少有一个不是寄存器,那么您必须至少有3*N+地址总线大小+一个或多个位来指示操作数/指令。提示0b0000=0d和0b1111=15D您在正确的轨道上。我建议您计算出存储某些内容所需的位数,您只需执行
天花(log2(N))
,而不是试图找到2的幂大于它,然后执行log2。也就是说,
log2(60)
将是~5.9,
上限(5.9)
是6,所以您知道需要6位。比计算出64是2大于60的下一次幂,然后做
log2
更容易。虽然最终你可以把这些数字从你的头顶上拉下来,但是编程
天花(log2(N))
是更好的方法。