




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
子例程子程序現(xiàn)代程序設(shè)計(jì)語(yǔ)言的靈魂提供了抽象的能力將一個(gè)組件的功能與其實(shí)現(xiàn)的細(xì)節(jié)分隔開來(lái)程序員只需理解組件的結(jié)構(gòu),不需要考慮其實(shí)現(xiàn)的細(xì)節(jié),就能夠把該組件作為一個(gè)程序塊使用子程序使程序員能夠以模塊化的方式寫程序,提高了構(gòu)建復(fù)雜系統(tǒng)的能力子例程在一個(gè)程序中,多次執(zhí)行某個(gè)程序片段在程序內(nèi),不必每次給出這個(gè)程序片段通過多次調(diào)用該程序片段實(shí)現(xiàn)子例程(Subroutine)/函數(shù)(Function,C語(yǔ)言)子例程機(jī)制調(diào)用/返回機(jī)制程序片段A示例程序片段A:做乘法運(yùn)算的指令序列x9=x10*x11 andi x9,x9,0 #x9,積 loop: ...... #省略x9=x10*x11的實(shí)現(xiàn)細(xì)節(jié) j loop exit: ...... #下一個(gè)任務(wù)調(diào)用/返回機(jī)制調(diào)用機(jī)制計(jì)算子例程的起始地址,加載到PC,并保存返回地址返回機(jī)制將返回地址加載到PC中JAL和JALR指令使用無(wú)條件跳轉(zhuǎn)指令,實(shí)現(xiàn)了調(diào)用/返回機(jī)制JAL:JumpandLink“PC-相對(duì)”尋址模式,計(jì)算子例程的起始地址JALR:JumpandLinkRegister“基址+偏移量”尋址模式,計(jì)算子例程的起始地址通常設(shè)置目標(biāo)寄存器為x1,保存返回地址/鏈接JALPC
PC+SEXT(imm[20:0])x1PC+4地址311211760x0040000000000000110000000000000011101111
imm[20|10:1|11|19:12]x1jalJAL指令匯編格式JAL x1,LABELLABEL,標(biāo)識(shí)JAL指令的目標(biāo)例如,jalx1,Multiply下一條被執(zhí)行的指令被Multiply標(biāo)識(shí)的指令并且,在x1中保存返回地址Multiply子例程Multiply: andi x9,x9,0 #x9,積loop: ...... #省略x9=x10*x11的實(shí)現(xiàn)細(xì)節(jié) j loopexit: jalr x0,0(x1)
#返回使用jalrx0,0(x1)結(jié)束子例程JALRPC
(rs1)+SEXT(imm[11:0])x1
PC+4jalr指令的匯編指令格式為jalr x1,imm12(rs1)或jalr x1,rs1,imm12地址31201915141211760x0040000011111111110000101000000011100111
imm[11:0]x5jalrx1I-類型跳轉(zhuǎn)問題:什么是JALR指令能夠提供的而JAL指令無(wú)法提供的重要特點(diǎn)?jal指令計(jì)算出的地址被限制于內(nèi)存的一定范圍之內(nèi)偏移范圍為-220到220-1jalr指令對(duì)于下一條被執(zhí)行的指令位于何處沒有限制偽指令call使用JALR指令,調(diào)用子例程:如何計(jì)算子例程的起始地址,將其賦值給rs1?對(duì)于匯編程序員來(lái)說,可以使用偽指令,簡(jiǎn)化編程工作callLabel匯編器將其翻譯為jalr指令callLabel匯編器按照內(nèi)存分配的規(guī)則1、計(jì)算出標(biāo)記相對(duì)于PC的偏移量offset(32位)2、將32位的offset拆分成高20位和低12位3、將偽指令call翻譯為:auipc rd,offsetHi
#offsetHi是offset的高20位jalr x1,offsetLo(rd) #offsetLo是offset的低12位子例程相關(guān)的偽指令偽指令基本指令含義callLabelauipc rd,offsetHijalr x1,offsetLo(rd)調(diào)用子例程retjalrx0,0(x1)從子例程返回(Return,ret)示例:乘法運(yùn)算計(jì)算兩個(gè)二進(jìn)制補(bǔ)碼整數(shù)的乘法,采用與十進(jìn)制乘法相同的算法以3
(-2)為例,采用4位二進(jìn)制補(bǔ)碼表示
0011(3)×
1110(-2)
0000
(0)011
(00)11
+(001)1
1010(-6)從右向左依次計(jì)算,將被乘數(shù)與0或1相乘,結(jié)果是0或保持不變Multiply子例程02行:如果乘數(shù)為0,計(jì)算任務(wù)結(jié)束03行和04行:判斷乘數(shù)最右邊一位是否為1如果是1,05行指令將被乘數(shù)加到積上06行:乘數(shù)邏輯右移1位07行:被乘數(shù)左移1位01 Multiply: andi x9,x9,0 #x9,積02 Mloop: beqz x11,Mexit #x11,乘數(shù)03 andi x8,x11,104 beqz x8,Mnext05 add x9,x9,x10 #x10,被乘數(shù)06 Mnext: srli x11,x11,107 slli x10,x10,108 j Mloop09 Mexit: ret #jalrx0,0(x1)問題:調(diào)用Multiply子例程的程序,如果使用寄存器x8存儲(chǔ)了一個(gè)數(shù)值x在執(zhí)行callMultiply指令返回后,再次使用x8做運(yùn)算,會(huì)發(fā)生什么情況?x8:在子例程中已被改為0或101 addi x10,x0,3 #x10
3,被乘數(shù)02 addi x11,x0,-2 #x11
-2,乘數(shù)03 call Multiply04 ...... #使用x8做計(jì)算05 ...... #下一個(gè)任務(wù)callee-save(被調(diào)用者保存)在子例程中完成寄存器的保存/恢復(fù)工作03行:使用數(shù)據(jù)區(qū)的4個(gè)存儲(chǔ)單元作為保存寄存器的空間01 .data02 .align 203 SaveReg1: .word 0
#保存寄存器的空間04#05 .text06 .align 207 #省略代碼,x8
x 08 addi x10,x0,3 #x10
3,被乘數(shù)09 addi x11,x0,-2 #x11
-2,乘數(shù)0A call Multiply0B ...... #使用x8做計(jì)算0C ...... #下一個(gè)任務(wù)0E和0F行:將x8的值x保存到預(yù)留的空間中18行:將x8的值恢復(fù)0D #
0E Multiply: la x5,SaveReg10F sw x8,0(x5)
#callee-save10 andi x9,x9,0 #x9,積11 Mloop: beqz x11,Mexit #x11,乘數(shù)12 andi x8,x11,113 beqz x8,Mnext14 add x9,x9,x10 #x10,被乘數(shù)15 Mnext: srli x11,x11,116 slli x10
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)技術(shù)對(duì)供應(yīng)鏈管理的影響試題及答案
- 計(jì)算機(jī)三級(jí)數(shù)據(jù)庫(kù)考試中的困難試題及答案
- 公路工程社會(huì)經(jīng)濟(jì)影響試題及答案
- 藝術(shù)品市場(chǎng)藝術(shù)市場(chǎng)誠(chéng)信考核試卷
- 皮革制品行業(yè)的技術(shù)創(chuàng)新與未來(lái)展望考核試卷
- 數(shù)據(jù)庫(kù)認(rèn)證評(píng)分試題及答案指導(dǎo)
- 網(wǎng)絡(luò)安全在技術(shù)考試中的重要性與試題及答案
- 嵌入式系統(tǒng)模擬仿真試題及答案
- 金融知識(shí)納入的2025年信息系統(tǒng)監(jiān)理師考試試題及答案
- 信息系統(tǒng)監(jiān)理師深度剖析試題及答案
- 第七單元 第2課時(shí) 觀察運(yùn)動(dòng)中的物體(大單元教學(xué)設(shè)計(jì)) 一年級(jí)數(shù)學(xué)下冊(cè) (蘇教版2025)
- 北京市煙草專賣局(公司)筆試試題2024
- 創(chuàng)傷急救知識(shí)的試題及答案詳解
- 壓力容器行業(yè)未來(lái)發(fā)展趨勢(shì)與市場(chǎng)前景分析
- 游泳館安全運(yùn)營(yíng)管理措施
- 2025年度6深圳中考數(shù)學(xué)考點(diǎn)、知識(shí)點(diǎn)的總結(jié)模版
- 2025年全國(guó)國(guó)家版圖知識(shí)競(jìng)賽題庫(kù)及答案題(中小學(xué)組)
- 2025年廣東省深圳市福田區(qū)中考二模歷史試題(含答案)
- 2025-2030中國(guó)細(xì)胞培養(yǎng)設(shè)備行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 廣州順德區(qū)2025年高考生物四模試卷含解析
- 合肥市2025屆高三年級(jí)5月教學(xué)質(zhì)量檢測(cè)(合肥三模)化學(xué)試題+答案
評(píng)論
0/150
提交評(píng)論