




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
從C程序到RISC-V示例:判斷數(shù)組中是否包含5假設(shè)整數(shù)數(shù)組x,有10個元素,i和result都是int類型變量result=0;for(i=0;i<10;i++){ if(x[i]==5){ result=1; break; }}RISC-V計(jì)算機(jī)基本類型變量寄存器數(shù)組內(nèi)存的一段連續(xù)存儲單元 .data .align 2 numbers: .word ...... #數(shù)組中的10個整數(shù) # .text .align 2 .globl main main: la x5,numbers #x5,數(shù)組起始地址 addi x9,x0,0 #x9,result
addi x8,x0,0 #x8,計(jì)數(shù)器i addi x6,x0,5 #x6,整數(shù)5 addi x28,x0,10 #x28,整數(shù)10 again: bge x8,x28,exit #i<10? lw x7,0(x5) #x[i] bne x7,x6,next #x[i]==5? addi x9,x0,1 #result=1; j exit #break; next: addi x8,x8,1 #i++; addi x5,x5,4 #x5,跟蹤下一個整數(shù)地址 j again exit: ...... #下一個任務(wù)假設(shè):計(jì)數(shù)器i:寄存器x8;result:寄存器x9數(shù)組:存儲單元0x10000000~0x10000027高級語言的一條語句可以表示為ISA上的幾條指令if(x[i]==5) ...... main: la x5,numbers #x5,數(shù)組起始地址 ...... addi x6,x0,5 #x6,整數(shù)5 ...... lw x7,0(x5) #x[i] bne x7,x6,next #x[i]==5? ......如果對數(shù)組中的元素進(jìn)行運(yùn)算,必須先將其加載到寄存器中RISC-V計(jì)算機(jī)的整數(shù)運(yùn)算指令,只能對寄存器和立即數(shù)進(jìn)行運(yùn)算 ...... main: la x5,numbers #x5,數(shù)組起始地址 ......
lw x7,0(x5)
#x[i] ...... addi x5,x5,4 #x5,跟蹤下一個整數(shù)地址for語句、if語句和break語句,都是通過條件分支和無條件跳轉(zhuǎn)實(shí)現(xiàn)的again: bge x8,x28,exit
#for(i=0;i<10;i++) ......
bne x7,x6,next
#if(x[i]==5) ......
j exit #break; ......
j again
#for(i=0;i<10;i++)示例:找一個整數(shù)的位組合中的第一個“1”假設(shè)整數(shù)是xresult=31;if(x==0){ result=-1;}else{ while(x>=0){ x=x<<1; result--; }}假設(shè)x被分配給寄存器x8,result被分配給寄存器x9while語句和if-else語句,通過條件分支和無條件跳轉(zhuǎn)實(shí)現(xiàn) addi x9,x0,31 #x9,result
beqz x8,zeroL
#if(x==0) again: bltz x8,exit
#while(x>=0) slli x8,x8,1 #x=x<<1; addi x9,x9,-1 #result--;
j again
zeroL:
addi x9,x0,-1 #result=-1; exit: ...... #下一個任務(wù)switch語句的底層實(shí)現(xiàn)switch語句,是否和級聯(lián)的if-else語句等價?intresult=0;switch(x){case1: result+=1; break;case2: result+=2;case3: result+=3; break;case4:case5: result+=5; break;default: result=0;}假設(shè)x和result分別被分配給寄存器x8和x901 .data02 .align 203 Addr: .word Default,L1,L2,L3,L4,L5 #6個起始地址04 #05 .text06 .align 207 .globl main08 main: ...... #省略代碼09 addi x9,x0,0 #result=0;0A addi x5,x0,60B bge x8,x5,Default #x>50C blt x8,x0,Default #x<00D la x5,Addr0E slli x6,x8,2 #x*40F add x5,x5,x6 10 lw x5,0(x5) #起始地址11 jr x512 L1: addi x9,x9,1 #result+=1;13 j exit #break;14 L2: addi x9,x9,2 #result+=2;15 L3: addi x9,x9,3 #result+=3;16 j exit #break;17 L4:18 L5: addi x9,x9,5 #result+=5;19 j exit #break;1A Default: addi x9,x0,0 #result=0;1B exit: ......對于switch語句,并不需要進(jìn)行多次條件判斷首先,將每個case和default的起始地址,存儲到數(shù)據(jù)區(qū)(03行)如果x的值大于5或小于0,直接跳轉(zhuǎn)到Default執(zhí)行(0A到0C行)Addr: .word Default,L1,L2,L3,L4,L5
#6個起始地址addi x5,x0,6bge x8,x5,Default
#x>5,即x>=6blt x8,x0,Default
#x<0否則,就通過switch表達(dá)式的值,在數(shù)據(jù)區(qū)查找到相應(yīng)的起始地址(0D到10行)然后,跳轉(zhuǎn)到這個地址執(zhí)行(11行) la x5,Addr slli x6,x8,2
#x*4 add x5,x5,x6 lw x5,0(x5) #起始地址 jr x5問題1、為什么switch表達(dá)式的值必須是整型,并且case后的值必須是常量?因?yàn)榫幾g器無法通過變量或非整型數(shù)實(shí)現(xiàn)以上過程問題2、break語句的含義跳出switch語句如果省略break語句,則直接進(jìn)入下一個case執(zhí)行,為什么?省略無條件跳轉(zhuǎn)指令(例:13、16和19行的偽指令jexit),則直接執(zhí)行下一條指令12 L1: addi x9,x9,1 #result+=1;13 j exit
#break;14 L2: addi x9,x9,2 #resul
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京深元科技有限公司介紹企業(yè)發(fā)展分析報(bào)告
- 2025年非接觸溫度計(jì)項(xiàng)目發(fā)展計(jì)劃
- 繪畫合同范本
- 基于互動理念的裝置藝術(shù)在商業(yè)空間中的應(yīng)用研究
- 馬鈴薯內(nèi)源激素檢測體系優(yōu)化及其在植株分枝、塊莖解除休眠過程中的含量分析
- 火鍋培訓(xùn)合同范本
- Al2O3-鉍系復(fù)合異質(zhì)結(jié)的制備及可見光降解性能研究
- 中秋節(jié)鮮果緣長沙青山店促銷方案設(shè)計(jì)
- 青少年適應(yīng)不良人格特質(zhì)現(xiàn)狀及父母教養(yǎng)一致性的影響
- 基于碳點(diǎn)介導(dǎo)的免疫分析檢測黃曲霉毒素B1的方法研究
- 診斷學(xué)-緒論-課件
- 心肺復(fù)蘇簡易呼吸器使用除顫儀使用
- g4l操作指南教程硬盤克隆linux系統(tǒng)備份恢復(fù)帶截圖
- 油缸裝配作業(yè)指導(dǎo)書
- 消化道大出血的鑒別診斷和處理原則課件
- 教師課堂教學(xué)技能課件
- 員工調(diào)整薪酬面談表
- 輔警報(bào)名登記表
- 外研版英語五年級下冊第一單元全部試題
- 培養(yǎng)小學(xué)生課外閱讀興趣課題研究方案
- 部編版四年級語文下冊課程綱要
評論
0/150
提交評論