为什么直接值不能直接移入段注册表(即mov ds 10)?MOV指令限制
此外,为什么不能直接复制段寄存器(即mov es,ds)?
.code
mov AX,@data
mov DS,AX
为什么不能这样直接被完成:
mov DS, @data
任何解释它为什么这样设计?
为什么直接值不能直接移入段注册表(即mov ds 10)?MOV指令限制
此外,为什么不能直接复制段寄存器(即mov es,ds)?
.code
mov AX,@data
mov DS,AX
为什么不能这样直接被完成:
mov DS, @data
任何解释它为什么这样设计?
这里的主要问题是指令烯/解码
X86具有可变的长度的操作码。它们的范围可以从单个字节(如nop)到几个字节,如12字节,类似movl $ 0xdeadbeef,0x12345678(%ebx,%edx,1) 英特尔决定不包含没有提供真正优势的指令。 mov segmentregister,就是其中之一。最有可能的原因是,细分市场注册人不必经常更换。因此,这节省了指令编码的空间,因此可以节省芯片上的几个晶体管(与晶体管转储相比,可能不是那么多)。
其他类似于ARM或MIPS的ISA,它们的指令具有固定的编码大小,通常允许所有寄存器执行相同的操作。在ARM的情况下,即使PC是一个正常的寄存器,也可以读取一个写入。
谢谢你的解释! –
因为不需要编辑这些注册表(除非在极少数情况下),因为它们是由操作系统设置的。那么为什么浪费硅来做一些无用的事情?
虽然您可以通过另一个临时编辑这些注册表。
这只适用于32位代码,而不是16位代码。 –
*推测*你在说x86,x64架构?还有其他的,你知道的,其中一些*不会受到x86指令集中明显缺乏正交性的影响。请添加合适的标签。 –
请重申您的问题,也许增加一些真实的例子。 –