Assembly 为什么lw和sw的ALU操作码为00?

Assembly 为什么lw和sw的ALU操作码为00?,assembly,mips,cpu-architecture,alu,Assembly,Mips,Cpu Architecture,Alu,我正试着围绕着数据路径和它在MIPS编程中的工作原理来思考。理解它的一部分是理解ALU操作码,这些操作码基本上告诉ALU要执行哪些操作。例如,如果我们实现基本AND、OR、ADD、SUB、NAND和NOR函数,我们会得到一个基本的ALU操作码分布,即AND是00,OR是01,ADD是10,SUB是10,NAND是10,NOR是01。但我不确定我是否理解为什么sw和lw的ALU操作码是00 在MIPS上,只有一种寻址模式: 在load和store指令中,ALU执行此地址计算,这是使用加法完成的。因

我正试着围绕着数据路径和它在MIPS编程中的工作原理来思考。理解它的一部分是理解ALU操作码,这些操作码基本上告诉ALU要执行哪些操作。例如,如果我们实现基本AND、OR、ADD、SUB、NAND和NOR函数,我们会得到一个基本的ALU操作码分布,即AND是00,OR是01,ADD是10,SUB是10,NAND是10,NOR是01。但我不确定我是否理解为什么sw和lw的ALU操作码是00


在MIPS上,只有一种寻址模式:


在load和store指令中,ALU执行此地址计算,这是使用加法完成的。因此,ALU执行加法:寄存器+符号扩展立即数,它形成发送到数据存储器的地址。

在MIPS上,只有一种寻址模式:


在load和store指令中,ALU执行此地址计算,这是使用加法完成的。因此,ALU执行加法:寄存器+符号扩展立即数,它形成发送到数据存储器的地址。

但是加法ALU的操作码不是2位10吗?因此,如果我们执行加法,lw和sw的运算码不应该是10吗?ALUOp是00 2位,ALU控制是010 3位:加法。它由ALU控件从00转换为010。我相信你混淆了ALUOp和ALUControl,但是一些幻灯片和文本也会这样做。一些文本也将ALU控件描述为4位。顺便说一句,这些是处理器实现的内部细节,因此可以在程序没有注意到的情况下使用不同的值。主控件从addi、lw和sw提供00作为ALUOp,并告诉ALU控件输出添加到ALU的代码。主控件为分支提供01 as ALUOp,使ALU控件将减法代码输出到ALU。对于其他控件,主控件输出1x,它告诉ALU控件从func[5:0]位查找正确的操作。但是加法ALU的操作码不是2位10吗?因此,如果我们执行加法,lw和sw的运算码不应该是10吗?ALUOp是00 2位,ALU控制是010 3位:加法。它由ALU控件从00转换为010。我相信你混淆了ALUOp和ALUControl,但是一些幻灯片和文本也会这样做。一些文本也将ALU控件描述为4位。顺便说一句,这些是处理器实现的内部细节,因此可以在程序没有注意到的情况下使用不同的值。主控件从addi、lw和sw提供00作为ALUOp,并告诉ALU控件输出添加到ALU的代码。主控件为分支提供01 as ALUOp,使ALU控件将减法代码输出到ALU。对于其他控件,主控件输出1x,它告诉ALU控件从func[5:0]位查找正确的操作。您从哪里获得有关lw和sw的ALU操作码的信息?@EOF我从课堂幻灯片中获得了这些信息,但他们没有任何解释,这就是为什么我不确定答案是00。MIPS中reg reg ALU指令R-Type编码的格式是6位操作码、5位rs、5位rt、5位rd、5位SHAMT、6位ALOUP。带通用寄存器基址I型的sw和lw格式为6位操作码、5位rs、5位rt和16位立即数。在加载/存储指令中,您在哪里看到ALUop?您是正确的,但是如果我们有或是R型,那么操作码确实是000000,但是当使用2位信号时,ALU操作码是01。此外,在我们的工作表中,R-Type的最后6位被称为函数,而不是ALOUP。我忍不住觉得,这可能不是跟随你的想法所需要的一切。无论采用哪种方式,您都可能会注意到,R型指令通过指令的最后6位控制ALU,请参见图像底部的指令[5-0],而lw和sw肯定不会以这种方式控制ALU,因为这些位直接作为操作数指令进入ALU[15-0]。相反,来自控制组件的ALUop是一个2位选择器,用于mux决定使用指令中的函数字段,或直接覆盖某些操作码。关于lw和sw的ALU操作码,您从哪里获得这些信息?@EOF我从我的讲座幻灯片中获得,但他们没有任何解释,这就是为什么我不确定答案是00。MIPS中reg reg ALU指令R-Type编码的格式是6位操作码、5位rs、5位rt、5位rd、5位SHAMT、6位ALOUP。带通用寄存器基址I型的sw和lw格式为6位操作码、5位rs、5位rt和16位立即数。在加载/存储指令中,您在哪里看到ALUop?您是正确的,但是如果我们有或是R型,那么操作码确实是000000,但是当使用2位信号时,ALU操作码是01。此外,在我们的工作表中,R-Type的最后6位称为functio
而不是阿鲁普。我忍不住觉得这可能不是跟随你的想法所需要的一切。无论采用哪种方式,您都可能会注意到,R型指令通过指令的最后6位控制ALU,请参见图像底部的指令[5-0],而lw和sw肯定不会以这种方式控制ALU,因为这些位直接作为操作数指令进入ALU[15-0]。相反,来自控制组件的ALOUP是决定使用指令中的函数字段或直接覆盖某些操作码的mux的2位选择器。