簡體   English   中英

不同類型的分支機構

[英]Different types of branches

所以我對分支的承諾有兩種類型:

雙向分支,基於存儲在寄存器中的一些計算的結果來獲取分支。 昂貴並導致管道沖洗。

單向分支,這就像一個函數指針或一個goto,它將轉到常量地址。 糾正我,如果我錯了,但我認為這比兩個分支便宜得多,因為現代處理器將在管道的早期解決這些指令。

我想如果存在第三種類型的分支,循環展開會更快。 通常,循環展開會增加指令大小,但會避免雙向分支。 如果你有一個支持指令大小和兩個分支的分支怎么辦? 就像一個分支一樣,在一段代碼上執行類似循環的事情。

存在什么類型的分支?

跳轉(或呼叫)可以是:

- 直接或間接的
- 相對的或絕對的
- 有條件的或無條件的

條件/無條件描述分支是否是謂詞。

相對/絕對是對分支目標進行編碼的問題,可以是當前指令指針的偏移量,也可以是分支目標絕對地址

如果分支是絕對的 ,則目標地址可以存儲為變量,因為它可以在代碼中的任何位置使用(理想情況下)。 這意味着您可以加載此變量並對其執行間接分支

分支的這些屬性幾乎是正交的。 常見的組合是:

- 直接相對條件。 你的標准if
- 直接相對無條件。 您的標准goto和函數調用。
- 直接絕對無條件。 一些函數調用。
- 直接絕對條件。 很少見,沒有多少硬件架構可以編碼這樣的指令。
- 間接絕對無條件。 函數指針。 這通常是最昂貴的分支類型。

其他組合往往難以編碼。

可能會有一些進一步的復雜情況,例如far branches ,但這應該是一個良好的開端。

暫無
暫無

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

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