我有一个处理器。一些指令集是AND,ADD,ANDI,ADDI。这些看起来一样,但他们不是。我可以分配相同的操作码看起来一样的指令集如下屏幕截图:
还是第六位就足以区分它们?在伊萨的实际例子中,我有13个指令集(AND,ADD,LD,ST,ANDI,ADDI,CMP,JUMP,JE,JA,JB,JBE,JAE)。由于指令集的大小,我认为操作码位的数量应该是4位,并且所有不同的指令集应该有不同的操作码,如ADD 0001,ADDI 0010,AND 0011,和ANDI 0100等。
zmeyuzjn1#
当然。大多数CISC CPU汇编语言实际上都是这样做的。我将使用6502汇编x86汇编来说明,但当然也可以编写自己的MIPS汇编程序来实现这一点。
mov eax,[eax] ;encoded as 8B 00 mov eax,[ecx] ;encoded as 8B 01 mov eax,[edx] ;encoded as 8B 02 mov eax,[ebx] ;encoded as 8B 03
所有这些指令都使用另一个寄存器作为指向内存的指针间接加载eax寄存器。使用哪个寄存器取决于位的模式。虽然不是最好的例子,但这是许多CPU都做的事情。EDIT:现在示例使用x86 Assembly,在本示例中使用不同的操作模式时,不会完全改变字节。
eax
1条答案
按热度按时间zmeyuzjn1#
当然。大多数CISC CPU汇编语言实际上都是这样做的。我将使用6502汇编x86汇编来说明,但当然也可以编写自己的MIPS汇编程序来实现这一点。
所有这些指令都使用另一个寄存器作为指向内存的指针间接加载
eax
寄存器。使用哪个寄存器取决于位的模式。虽然不是最好的例子,但这是许多CPU都做的事情。EDIT:现在示例使用x86 Assembly,在本示例中使用不同的操作模式时,不会完全改变字节。