控制信号常见答疑
About Extop
https://stackoverflow.com/questions/55290060/what-does-extend-immediate-to-32-bits-mean-in-mips
I-type instructions with 16-bit immediates are different.
addi/addiuimmediates are sign-extended (by duplicating the top/sign bit of the immediate to all higher bits). https://en.wikipedia.org/wiki/Two%27s_complement#Sign_extension This allows 2’s complement numbers from-2^15..+2^15-1to be encoded. (0xFFFF8000 to 0x00007FFF)ori/andi/xoriboolean immediates are zero-extended (by setting all higher bits to zero) This allows unsigned / 2’s complement numbers from0 .. 2^16-1to be encoded. (0x00000000 to 0x0000FFFF)
For other instructions see this [instruction-set reference](https://web.cse.ohio-state.edu/~crawfis.3/cse675-02/Slides/MIPS Instruction Set.pdf) which breaks down each instruction showing 016 || [I15..0] for zero-extension or [I15]16 || [I15..0] for sign-extension.
And usually you don’t want to raise an exception on signed overflow, so normally compilers use addu / addiu even on signed integers. addiu is badly named: it’s not “for unsigned integers”, it’s just a wrapping-allowed / never-faulting version of add/addi. It sort of makes sense if you think of C, where signed overflow is undefined behaviour (and thus could use add and raise an exception in that case if the compiler wanted to implement it that way), but unsigned integers have well-defined overflow behaviour: base 2 wraparound.
可以为X的控制信号
- 控制数据来源的信号(
RegDst,MemtoReg)等,不需要用到时可以为X。 - 控制是否执行某操作(
RegWrite)等,必须为0/1。