




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
子例程子程序現(xiàn)代程序設(shè)計語言的靈魂提供了抽象的能力將一個組件的功能與其實現(xiàn)的細(xì)節(jié)分隔開來程序員只需理解組件的結(jié)構(gòu),不需要考慮其實現(xiàn)的細(xì)節(jié),就能夠把該組件作為一個程序塊使用子程序使程序員能夠以模塊化的方式寫程序,提高了構(gòu)建復(fù)雜系統(tǒng)的能力子例程在一個程序中,多次執(zhí)行某個程序片段在程序內(nèi),不必每次給出這個程序片段通過多次調(diào)用該程序片段實現(xiàn)子例程(Subroutine)/函數(shù)(Function,C語言)子例程機制調(diào)用/返回機制程序片段A示例程序片段A:做乘法運算的指令序列x9=x10*x11 andi x9,x9,0 #x9,積 loop: ...... #省略x9=x10*x11的實現(xiàn)細(xì)節(jié) j loop exit: ...... #下一個任務(wù)調(diào)用/返回機制調(diào)用機制計算子例程的起始地址,加載到PC,并保存返回地址返回機制將返回地址加載到PC中JAL和JALR指令使用無條件跳轉(zhuǎn)指令,實現(xiàn)了調(diào)用/返回機制JAL:JumpandLink“PC-相對”尋址模式,計算子例程的起始地址JALR:JumpandLinkRegister“基址+偏移量”尋址模式,計算子例程的起始地址通常設(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)識JAL指令的目標(biāo)例如,jalx1,Multiply下一條被執(zhí)行的指令被Multiply標(biāo)識的指令并且,在x1中保存返回地址Multiply子例程Multiply: andi x9,x9,0 #x9,積loop: ...... #省略x9=x10*x11的實現(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指令無法提供的重要特點?jal指令計算出的地址被限制于內(nèi)存的一定范圍之內(nèi)偏移范圍為-220到220-1jalr指令對于下一條被執(zhí)行的指令位于何處沒有限制偽指令call使用JALR指令,調(diào)用子例程:如何計算子例程的起始地址,將其賦值給rs1?對于匯編程序員來說,可以使用偽指令,簡化編程工作callLabel匯編器將其翻譯為jalr指令callLabel匯編器按照內(nèi)存分配的規(guī)則1、計算出標(biāo)記相對于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)示例:乘法運算計算兩個二進(jìn)制補碼整數(shù)的乘法,采用與十進(jìn)制乘法相同的算法以3
(-2)為例,采用4位二進(jìn)制補碼表示
0011(3)×
1110(-2)
0000
(0)011
(00)11
+(001)1
1010(-6)從右向左依次計算,將被乘數(shù)與0或1相乘,結(jié)果是0或保持不變Multiply子例程02行:如果乘數(shù)為0,計算任務(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存儲了一個數(shù)值x在執(zhí)行callMultiply指令返回后,再次使用x8做運算,會發(fā)生什么情況?x8:在子例程中已被改為0或101 addi x10,x0,3 #x10
3,被乘數(shù)02 addi x11,x0,-2 #x11
-2,乘數(shù)03 call Multiply04 ...... #使用x8做計算05 ...... #下一個任務(wù)callee-save(被調(diào)用者保存)在子例程中完成寄存器的保存/恢復(fù)工作03行:使用數(shù)據(jù)區(qū)的4個存儲單元作為保存寄存器的空間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做計算0C ...... #下一個任務(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《2025年勞動合同終止協(xié)議書》
- 遵守條約合同范本
- 2025年老建筑拆除合同協(xié)議
- 維修商業(yè)廚具合同范本
- 食堂食品交易合同范本
- 2025企業(yè)定期存單質(zhì)押借款合同模板
- 裝卸搬運合同范本
- 木材砍伐勞務(wù)合同范本
- 電纜施工合同范本
- 與工人簽合同范本
- 制氧廠安全知識培訓(xùn)課件
- 2025年空軍專業(yè)技能類文職人員招聘考試(檔案)歷年參考題庫含答案詳解(5套)
- 農(nóng)村建祠堂征地合同范本
- T-CECC 37-2025 公共數(shù)據(jù)資源授權(quán)運營合規(guī)要求
- 2025擔(dān)保借款還款協(xié)議書(醫(yī)療器械融資)
- 醫(yī)院信息科筆試題庫及答案
- 專題特訓(xùn)五等腰三角形的“三線合一”
- 2025年高考真題-化學(xué)(湖南卷) 含答案
- 電廠消防培訓(xùn)教學(xué)課件
- 消防安全突發(fā)事件應(yīng)急預(yù)案和處理流程
- 壓力容器安全員崗位職責(zé)
評論
0/150
提交評論