日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LEGv8指令集中分支和跳转的地址范围

發布時間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LEGv8指令集中分支和跳转的地址范围 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小測驗:
1.LEGv8中條件分支的地址范圍多大(K=1024)?

答案: 分支前后大約1024K(即1M)的地址范圍

2.LEGv8中跳轉和跳轉鏈接指令的地址范圍(M=1024K)是多大?

答案:分支前后大約128M的地址范圍

請讀者自行計算一下以上兩道題目,并且請帶著這兩個問題閱讀下面的文字。

下面是正文。

LEGv8跳轉指令(無條件分支指令)采用最簡單的尋址方式,使用B型LEGv8指令格式,操作碼為6位,其余為都是地址段。

B 10000 // go to location 10000(Decimal)

可以匯編成下面的格式(實際中更為復雜):

510000ten10000_{ten}10000ten?
6位26位

其中,跳轉指令的操作碼值為5,分支地址為10000ten10000_{ten}10000ten?

和跳轉指令不同,條件分支指令除了分支地址之外還可以指定一個操作數。
因此:

CBNZ X19,Exit //go to Exit if X19≠0

被匯編成下面的指令,其中只有19位用于指定分支地址:

181Exit19
8位19位5位

對于條件分支指令,這種格式叫作CB型。

如果程序的地址只能放在19位的字段中,這意味著沒有程序能大于2192^{19}219,這在今天來說實在太小,因此是一種很不現實的選擇。

另一種方法是指定一個寄存器,該寄存器的值用于和分支地址的偏移量相加以得到最終地址,這樣分支指令的地址可按下面的方式計算:
程序計數器=寄存器內容+分支地址偏移量程序計數器=寄存器內容+分支地址偏移量=+

這個求和結果允許程序的大小得到2642^{64}264,并且仍能使用條件分支,從而解決了分支地址大小的問題。但隨之而來的問題是,使用哪個寄存器?

答案取決于條件分支是如何使用的。 條件分支在循環和if語句中都可以找到,它們傾向于轉向附近的指令。例如,在SPEC基準測試程序中,大概一半的條件分支轉移范圍都在16條指令以內。因為程序計數器(PC)包含當前指令的地址,所以如果我們使用PC作為計算地址的寄存器,就可轉移到距當前指令±218±2^{18}±218個字(1個字=32位)的地方。 幾乎所有的循環和if語句都遠遠小于±218±2^{18}±218個字,因此PC是一個理想的選擇。這種分支地址的尋址方式稱為PC相對尋址(PC-relative addressing).

PC相對尋址:一種尋址方式,將PC和指令中的常數相加作為地址。

像近期大多數計算機一樣,LEGv8對所有條件分支使用PC相對尋址,因為這些指令的跳轉目標一般都比較接近分支指令本身。 另一方面,分支和鏈接(branch-and-link)指令引發的過程則并不一定總是靠近調用者,所以通常使用其他尋址方式。 因此,LEGv8 體系結構通過對分支指令以及分支和鏈接指令采用B型指令格式,為過程調用提供長地址。

因為LEGv8的所有指令都是4字節長,所以將PC相對尋址的地址設計成字地址(1個字=32位)而不是字節地址,從而可以擴展分支轉移的范圍。 通過將字段解釋成相對字地址而不是相對字節地址,19位的地址字段所指示的轉移范圍擴大了4倍:當前PC±1MB。同樣,分支指令的26位字段 也是字地址,即表示28位字節地址。

這里的1MB是怎么算出來的呢? 19位地址提供2182^{18}218種尋址方式,又因為是字地址,還需要乘以4倍(即222^222)所以 尋址大小為218×22=220=1MB2^{18}\times 2^2=2^{20} =1MB218×22=220=1MB

無條件分支(即跳轉指令)也采用PC相對尋址,這意味著轉移范圍是當前PC值±128MB。

這里的128MB是怎么算出來的呢? 26位地址提供2252^{25}225種尋址方式,又因為是字地址,還需要乘以4倍(即222^222)所以 尋址大小為225×22=227=220×27=128MB2^{25}\times 2^2=2^{27}=2^{20} \times 2^7 =128MB225×22=227=220×27=128MB

閱讀《計算機組成與設計(ARM版)》的讀書筆記。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的LEGv8指令集中分支和跳转的地址范围的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。