日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2025/4/5 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LEGv8指令集中分支和跳转的地址范围 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

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

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

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

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

下面是正文。

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

B 10000 // go to location 10000(Decimal)

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

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

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

和跳轉(zhuǎn)指令不同,條件分支指令除了分支地址之外還可以指定一個(gè)操作數(shù)。
因此:

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

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

181Exit19
8位19位5位

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

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

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

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

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

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

像近期大多數(shù)計(jì)算機(jī)一樣,LEGv8對所有條件分支使用PC相對尋址,因?yàn)檫@些指令的跳轉(zhuǎn)目標(biāo)一般都比較接近分支指令本身。 另一方面,分支和鏈接(branch-and-link)指令引發(fā)的過程則并不一定總是靠近調(diào)用者,所以通常使用其他尋址方式。 因此,LEGv8 體系結(jié)構(gòu)通過對分支指令以及分支和鏈接指令采用B型指令格式,為過程調(diào)用提供長地址。

因?yàn)長EGv8的所有指令都是4字節(jié)長,所以將PC相對尋址的地址設(shè)計(jì)成字地址(1個(gè)字=32位)而不是字節(jié)地址,從而可以擴(kuò)展分支轉(zhuǎn)移的范圍。 通過將字段解釋成相對字地址而不是相對字節(jié)地址,19位的地址字段所指示的轉(zhuǎn)移范圍擴(kuò)大了4倍:當(dāng)前PC±1MB。同樣,分支指令的26位字段 也是字地址,即表示28位字節(jié)地址。

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

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

這里的128MB是怎么算出來的呢? 26位地址提供2252^{25}225種尋址方式,又因?yàn)槭亲值刂?#xff0c;還需要乘以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

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

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。