爲什麼直接值不能直接移入段註冊表(即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指令集中明顯缺乏正交性的影響。請添加合適的標籤。 –
請重申您的問題,也許增加一些真實的例子。 –