簡體   English   中英

中間語言的最小匯編指令集?

[英]Minimal set of Assembly Instructions for an Intermediate Language?

我想知道以下幾點:

是否可以創建一小組組裝指令,一起完成所有可能的操作? 或者可能會問不同的問題,關於任何架構的必備匯編指令是什么?

(例如,執行任何操作都需要 Jump 和 Add)

我希望你們能幫助我!

提供一些背景信息:我正在嘗試為我的編譯器設計一種中間語言,並且我想使用盡可能少的指令(然后可以用一組這些指令代替特定架構的一個復雜指令)。 但當然,IL 本身應該是可移植的。

我想你想要相反的。 與其制作盡可能簡單的 IL,不如制作一個非常具有表現力的 IL。 IL 的表現力越強,就越容易針對特定架構進行優化。

將復雜的 IL 操作擴展為許多單獨的指令比將許多簡單的 IL 操作合並為一條復雜的指令更容易。 您可能不需要乘法,因為它可以通過跳轉和加法指令來完成。 但是,當您為具有硬件乘法的芯片進行編譯時,您必須分析 IL 以確定這是一個“加法循環”並將其轉換回乘法。 這比遇到乘法並說“嗯,這個架構不能這樣做,我想我們必須讓它成為一個加法循環”要多得多。

另一個例子,你可能認為你的 IL 不需要浮點運算,因為一些 ARM 芯片無論如何必須在軟件中進行浮點運算。 但是一些 ARM 芯片不必這樣做,如果您的 IL 不支持 FP 操作,那么您需要將復雜的軟件 FP IL 轉換回單個硬件指令。

最好將您的 IL 與最先進和最復雜的硬件功能相匹配,然后在沒有這些功能的處理器上“退回”到這些功能的“軟件仿真”。

最少一條指令,甚至在碳納米管計算機MAXQ芯片中實際實現

雖然只有一個就夠了,但實際上它比你想象的要復雜得多,而且通常需要更多的指導才能完成同樣的工作。 如果您需要芯片的速度“可用”,那么 IMO 至少應該有一些通用說明:

  • 1條條件跳轉指令:等於(或不等於)跳轉
  • 1 個用於算術的 SUB 指令。 這樣您就可以輕松地進行加法和減法,而無需求反指令
  • 1 條按位指令:NAND(或 NOR),使用其中之一,您可以執行任何所需的邏輯運算
  • 1 MOV 指令
  • 1 條加載/存儲指令

使用 sub 或 bitwise 指令,您可以移動數據,因此取決於您的架構和操作碼大小,您可以刪除 MOV 或加載/存儲以進一步簡化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM