2010-09-29 64 views
4

爲什麼通用寄存器按照它們的順序排列(eax,ecx,edx,ebx)? 例如,對於「公司」指令操作碼是:通用寄存器 - 訂購

inc eax - 40 
inc ecx - 41 
inc edx - 42 
inc ebx - 43 

有他們爲什麼要下令方式的原因嗎?

+0

不知道爲什麼你覺得他們必須要在任何特定的順序,除非它們被推入堆棧。此外,它取決於你做什麼樣的增量,「字」,「字節」等...目標存儲可以是內存位置或寄存器。 – EKet 2010-09-29 17:12:59

+0

因爲它是EAX,EBX等,這些都是32位寄存器......而且,除了ebx,它們似乎是字母,不是? – 0x90 2010-09-29 17:14:40

回答

0

有8個寄存器,所以它們中的每一個接收到的順序從0到7

我不理解的問題。是「他們爲什麼不按字典順序排列?」 這是因爲字母a,b,c,d代表累加器,基數,計數器和數據,不僅僅是字母表的前四個字母。

+0

他們爲什麼收到這樣的數字?你只是告訴他們爲什麼被命名。 – 0x90 2010-09-29 17:20:31

+0

多寄存器操作,如mul和div使用edx:eax,所以我期望這些至少是相鄰的數字。 IIRC在16位版本中可以使用bx進行尋址,但不能使用ax,cx,dx,這可能是其與其他索引寄存器位於頂端的原因。 – Rup 2010-09-29 17:28:02

+0

@NOP它爲什麼重要?你有8個寄存器,所以你必須給它們分配不同的數字。就這樣。也許它取決於一些內部的x86實現細節,但它並不重要。 – ruslik 2010-09-29 17:35:16

4

(E)BX的奇數放置可能是由於該8086從8080

8080演進具有通用寄存器B,C,d的蓄能器(A)和圖6的方式, E,H和L,其中B/C,D/E和H/L可以成對使用,特別是H/L可以用作存儲器訪問的地址。 8086的設計使現有的8080代碼可以很容易地轉換成它;我想這似乎合乎邏輯的寄存器按以下順序映射:

8080 register A -> 8086 internal register 0 
       B,C ->      1 
       D,E ->      2 
       H,L ->      3 
       SP ->      4 

正如另一個答案指出,AX,BX,CX和DX在8086是不是4個通用寄存器,只是隨意的名字 - 他們對這些寄存器具有的特殊功能具有助記符意義:「累加器」,「基址」,「計數」和「數據」。給定上述映射,將「累加器」功能分配給內部寄存器0以及將「基本」功能分配給內部寄存器3是有意義的(並且8086內部寄存器5,6和7是BP,SI和DI,其中是新功能)

當然,這是真正意義稍稍通知(見here例如)猜測 - 只有8086名設計師肯定知道...