




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
子例程子程序現(xiàn)代程序設(shè)計(jì)語言的靈魂提供了抽象的能力將一個(gè)組件的功能與其實(shí)現(xiàn)的細(xì)節(jié)分隔開來程序員只需理解組件的結(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語言)子例程機(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指令使用無條件跳轉(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指令無法提供的重要特點(diǎn)?jal指令計(jì)算出的地址被限制于內(nèi)存的一定范圍之內(nèi)偏移范圍為-220到220-1jalr指令對(duì)于下一條被執(zhí)行的指令位于何處沒有限制偽指令call使用JALR指令,調(diào)用子例程:如何計(jì)算子例程的起始地址,將其賦值給rs1?對(duì)于匯編程序員來說,可以使用偽指令,簡(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 考點(diǎn)攻克人教版八年級(jí)上冊(cè)物理《機(jī)械運(yùn)動(dòng)》定向攻克試題(解析版)
- 2025年下半年國家電投智慧能投(碳資產(chǎn)管理限公司)招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年下半年國家新聞出版廣電總局監(jiān)管中心招聘26人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年下半年四川雅安石棉縣鄉(xiāng)鎮(zhèn)事業(yè)單位從“西部志愿者”中招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年下半年四川阿壩州汶川縣高層次人才引進(jìn)22人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年下半年四川眉山市仁壽縣事業(yè)單位招考工作人員擬聘用人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年下半年四川省資陽市雁江區(qū)考試招聘部分事業(yè)單位工作人員24人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年下半年四川省宜賓珙縣單位第二次招考臨聘人員11人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年下半年四川省南充市經(jīng)濟(jì)和信息化局下屬事業(yè)單位南充無線電監(jiān)測(cè)站考調(diào)1人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年下半年四川瀘州納溪區(qū)事業(yè)單位招聘擬聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 七年級(jí)體育與健康全冊(cè)教案設(shè)計(jì)
- GB/T 23436-2025汽車風(fēng)窗玻璃清洗液
- 員工受傷安全認(rèn)知培訓(xùn)課件
- 經(jīng)銷商保證金管理制度
- 2025年高考物理山東卷試卷評(píng)析及備考策略(課件)
- 護(hù)理人力資源配置
- 2025年“學(xué)憲法、講憲法”競(jìng)賽測(cè)試題庫及答案
- 十年(2016-2025)高考地理真題分類匯編 專題07 自然災(zāi)害與地理信息技術(shù)(全國通.用)(原卷版)
- 2025年大隊(duì)委筆試題目及答案
- 收費(fèi)站復(fù)工復(fù)產(chǎn)安全培訓(xùn)課件
- 2025年重慶市兩江新區(qū)小升初語文試卷
評(píng)論
0/150
提交評(píng)論