2012-12-09 27 views
0

昨天晚上我和一位朋友談論了嵌入式處理器等問題,並且談到了ASM和特定指令集的主題 - 儘管我認爲這個問題也可以應用於x86處理器。註冊符合性 - 是否100%必要?

在瞭解ASM中的寄存器時,很明顯所有寄存器都具有100%獨特和特定的用途(至少在x86架構中)。然而,當他討論他的一些處理器時,他告訴我他正在使用的一些芯片有幾個通用寄存器,可以用於任何東西,並且很少有(如果有的話)專用指令使用的寄存器。

當它歸結爲它時,不能任何註冊在技術上被用來執行指令?它們的大小都一樣,它會有什麼不同(堆棧指針等)?

+0

而作爲一個免責聲明,只是想扔掉那裏,我不想寫黑客或不合格的代碼。只是一個無辜的問題。 – Qix

+1

我想這個問題最好由具有數字設計知識的人回答。有一條專用路徑通往單個寄存器比選擇寄存器更有效率,但我真的不知道。你還必須記住,今天的x86指令集是從最早的微處理器發展而來的。 –

回答

3

指令集,其中的任何寄存器可以用作用於指令的操作數稱爲正交。 8086絕對不是一個正交設計。在8086年後發佈的競爭對手是摩托羅拉68000,這是一款高度正交的設計,因其品質而受到衆多程序員的青睞。

8086的設計是不但是隨機挑選兩個非常重要的原則,發揮了作用:

  • 與前代產品,8080的兼容性,是一個強大的目標。允許將舊彙編代碼機械轉換爲新處理器。 8080反過來受到8008的嚴重影響。在市場中獲得新架構總是很困難,英特爾很早就認識到,對工具和程序的投資對他們的客戶來說是一項重要資產。長久以來,這一目標已經很好地發揮了作用,當然這也是設計持續的原因。

  • 工藝技術確定了可用於實現處理器的晶體管數量的上限。 8086只需要29,000個有源晶體管,這對於16位處理器來說是相當可觀的工程技術。使用非正交設計允許刪除大量的膠合邏輯,它也更快。 68000爲其預算,正交指令集選擇了一種不同的用途,但卻是一個相當糟糕的總線接口,例如,當數據在非對齊地址上尋址時,會產生臭名昭着的總線錯誤處理器故障。

1

它變得清楚,所有的寄存器有100%獨特和 具體使用

假。 EAX的唯一用途是什麼?

不能任何寄存器在技術上被用來進行說明

你可以使用任何寄存器你喜歡的方式。你只需要知道一些指令需要操作數/返回結果在特定的寄存器中。例如loop遞減ECX,直到它變爲0,從movsb ESI移動到EDI等

+1

我懷疑他說的是在x86中寄存器不可互換。在像idiv這樣的指令中,結果*必須使用EAX和EDX寄存器。其他指令必須使用ECX寄存器等。 –

+0

DS表示數據段,IP表示指令指針,SP堆棧指針等。這些正在被x86架構使用。你可以混淆他們,但你真的不應該知道該怎麼辦 – SomeWittyUsername

+0

@icepack我認爲這是它的要義,是的:-) – cnicutar