2013-01-22 56 views
1

爲了好玩,我正在佈局一個8位處理器體系結構,並且遇到了4位指令的一些限制。JFE和JNE是否需要組裝,還是可以將它們移除?

我想包括SHR(右移)和SHL(左移)說明,但我似乎沒有空間給他們。我目前有JGE(如果大於或等於,跳轉),JLE(如果小於或等於,跳轉),JFE(跳轉如果相等)和JNE(跳轉,如果不相等),我想知道是否所有這四個都是必需的。

是所有四個所必需的乾淨的代碼,這些跳躍的條件,或者我可以安全的將JFEJNESHRSHL

編輯:我確實有JMP,它不是絕對的。

+0

不是作爲一個硬件的人,而只是一個低級別的程序員,我不知道:我喜歡t設計指令集採取「條件寄存器」 - 跳轉如果「FLAGS ||」 CCREG';是的,這意味着有條件的跳轉可能是兩條指令 - 'MOV IMM,CCREG; JC CCREG,TGT' - 但它會使指令集更加靈活。對於班次來說也是一樣的 - 通過signed-const-in-reg作爲一個操作碼進行移位。實際上,如果操作碼插槽非常緊密,我可能會嘗試將所有算術/邏輯編碼爲「ALUOP OPREG,SRC,TGT」。 –

回答

4

除了Carl Norum的回答,如果您支持無條件跳轉指令(JMP),那麼一旦擁有JFE,您就不需要它的補充JNE,因爲您可以將它作爲JFE編碼爲JMP 。同樣,如果您有JG,JFE和JMP,則不需要JLE。

對於移位,如果您的指令接受一個參數,並且該參數允許值大於您的字大小,則可以使用相同的指令左移和右移,並讓參數值確定它是一個還是其他。

+0

你也可以擺脫無條件的跳躍並保持JEQ和JNE。雙方一起作出無條件的,或正常使用一個或另一個。根據邏輯/ alu操作,你可能可以擺脫無條件的並且只保留一個條件,例如mov reg,0後跟sub reg,reg後跟jeq是無條件跳轉。基於其他可能的邏輯運算來處理其他條件。像四條指令的指令集做這種事情 –

3

如果通過「乾淨」,你的意思是「易於閱讀」,你有更多的指示,越好。好吧,無論如何,一點。

實際中,你只需要需要一個條件跳轉指令。例如,

Brainfuck只有8個'指令'。它有兩個跳轉 - 一個前進和一個後退,但如果你的處理器使用絕對跳轉,那麼可能是相同的。

您是否在爲您的處理器編寫彙編程序?如果是這樣,您可以添加宏指令來管理不同的跳轉表單,並將它們轉換爲芯片實際支持的任何低級操作。

+1

另請參見[具有單個指令的體系結構](http://en.wikipedia.org/wiki/One_instruction_set_computer);) – Jester

+0

是的,這是限制。他們採取可讀性,然後把它扔出窗外。 –

+0

@Jester Pffffft。 – Zyerah

3

以下是放棄JFE和JNE的一種方法。

此代碼將根據測試是否相等(分支到絕對等效)或不分支(分支到絕對等效)分支到不同的位置。

JGE maybe_equal 
    JLE definitely_not_equal 
maybe_equal: 
    JLE definitely_equal 
    JGE definitely_not_equal 

我將留給你來決定,這是否算作乾淨的代碼或不...

相關問題