版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
LoongArch32精簡版指令集介紹20102指令集概述指令集用戶態(tài)部分介紹30102指令集概述指令集用戶態(tài)部分介紹龍芯自主指令系統(tǒng)架構(gòu)LoongArch4“充分考慮兼容需求的自主指令系統(tǒng)”遵循RISC指令設(shè)計(jì)風(fēng)格32位定長指令編碼風(fēng)格load/store架構(gòu)32個(gè)通用寄存器32個(gè)浮點(diǎn)/向量寄存器分為32位和64位兩個(gè)版本,簡稱LA32和LA64架構(gòu)采用基礎(chǔ)部分加擴(kuò)展部分的整體架構(gòu)基礎(chǔ)指令集(~340條)二進(jìn)制翻譯擴(kuò)展、向量擴(kuò)展、虛擬化擴(kuò)展面向高校教學(xué)科研的LoongArch精簡版5基于LoongArch32位版本的精簡子集——LoongArch32
Reduced用戶態(tài):保留典型應(yīng)用中最常用的指令整數(shù)指令~50條,訪存指令僅“基址+偏移”尋址方式且要求地址對(duì)齊浮點(diǎn)數(shù)指令可以不實(shí)現(xiàn),也可以只實(shí)現(xiàn)單精度部分原子同步指令僅LL/SC,軟件維護(hù)指令與數(shù)據(jù)Cache的數(shù)據(jù)一致性核心態(tài):支持主流類Unix操作系統(tǒng)僅包含PLV0和PLV3兩個(gè)特權(quán)等級(jí)支持例外與中斷,但入口為同一個(gè)支持TLBMMU,軟件負(fù)責(zé)TLB重填軟件生態(tài):維護(hù)一個(gè)獨(dú)立的小系統(tǒng)QEMU、GCC、……PMON、Linuxkernel、busybox、buildroot60102指令集概述指令集用戶態(tài)部分介紹指令集用戶態(tài)部分介紹提綱7數(shù)據(jù)類型寄存器指令編碼格式用戶態(tài)指令功能速覽C語言的機(jī)器表示數(shù)據(jù)類型8比特(bit,簡記b)字節(jié)(Byte,簡記B,8bit)半字(Halfword,簡記H,16bit)字
(Word,簡記W,32bit)LAMIPSIRV32Ibitbitbitbit8bitByte,BByte,BByte,B16bitHalfword,HHalfword,HHalfword,H32bitWord,WWord,WWord,W寄存器9通用寄存器(GR)32個(gè)32位寬寄存器,0號(hào)寄存器恒為0程序計(jì)數(shù)器(PC)32位寬獨(dú)立于通用寄存器,僅被轉(zhuǎn)移指令修改浮點(diǎn)指令操作浮點(diǎn)寄存器,其獨(dú)立于通用寄存器LAMIPSIRV32I通用寄存器32個(gè)32位(0號(hào)恒為0)32個(gè)32位(0號(hào)恒為0)32個(gè)32位(0號(hào)恒為0)程序計(jì)數(shù)器獨(dú)立于通用寄存器,僅被轉(zhuǎn)移指令修改獨(dú)立于通用寄存器,僅被轉(zhuǎn)移指令修改獨(dú)立于通用寄存器,僅被轉(zhuǎn)移指令修改浮點(diǎn)寄存器獨(dú)立于通用寄存器獨(dú)立于通用寄存器獨(dú)立于通用寄存器LA精簡版指令格式10指令都是32位長指令均需4字節(jié)邊界對(duì)齊8種指令格式單一操作碼域(opcode)寄存器操作數(shù)域(rd,rj,rk,ra)rd—通常作為目的寄存器rj—通常作為源寄存器1rk—通常作為源寄存器2ra—通常作為源寄存器3立即數(shù)域(imm)(1+)5種不同的長度訪存與整型計(jì)算:12位CSR尋址:14位轉(zhuǎn)移指令:16位、21位、26位所有指令至多一個(gè)目的寄存器“兩源一目的”的3R-type是最常見的指令格式;4R-type僅出現(xiàn)在浮點(diǎn)運(yùn)算中。LA精簡版指令格式舉例11三種RISC指令格式比較12三種RISC指令格式具有共性:定長1、對(duì)齊、指令格式種類少操作碼域、寄存器域和立即數(shù)域“兩源一目的”三寄存器操作數(shù)格式最常用要讀寫的寄存器號(hào)出現(xiàn)的位置(基本)固定不變RV最徹底,MIPS和LA有少量例外注:1.嚴(yán)格來說,RISC-V的指令長度是16位的倍數(shù),是一種具有RISC編碼風(fēng)格的變長指令編碼。不過,教學(xué)中常用的RV32G所包含的指令都是32位定長的。LoongArch32Reduced指令簡明列表13ADD.Wrd,rj,rkADDI.Wrd,rj,si12SUB.Wrd,rj,rkLU12I.Wrd,si20PCADDU12Ird,si20SLTrd,rj,rkSLTUrd,rj,rkSLTIrd,rj,si12SLTUIrd,rj,si12NORrd,rj,rkANDrd,rj,rkORrd,rj,rkXORrd,rj,rkORNrd,rj,rkANDNrd,rj,rkANDIrd,rj,ui12ORIrd,rj,ui12XORIrd,rj,ui12SLL.Wrd,rj,rkSRL.Wrd,rj,rkSRA.Wrd,rj,rkSLLI.Wrd,rj,ui5SRLI.Wrd,rj,ui5SRAI.Wrd,rj,ui5MUL.Wrd,rj,rkMULH.Wrd,rj,rkMULH.WUrd,rj,rkDIV.Wrd,rj,rkMOD.Wrd,rj,rkDIV.WUrd,rj,rkMOD.WUrd,rj,rkLD.Brd,rj,si12LD.Hrd,rj,si12LD.Wrd,rj,si12ST.Brd,rj,si12ST.Hrd,rj,si12ST.Wrd,rj,si12LD.BUrd,rj,si12LD.HUrd,rj,si12LL.Wrd,rj,si14SC.Wrd,rj,si14PRELDhint,rj,si12DBARhintIBARhintJIRLrd,rj,offsBoffsBLoffsBEQrj,rd,offsBNErj,rd,offsBLTrj,rd,offsBGErj,rd,offsBLTUrj,rd,offsBGEUrj,rd,offsRDCNTVL.WrdRDCNTVH.WrdRDCNTIDrjBREAKcodeSYSCALLcodeCSRRDrd,csrCSRWRrd,csrCSRXCHGrd,rj,csrCACOPcode,rj,si12TLBSRCH
TLBRD
TLBWR
TLBFILL
INVTLBop,rj,rkERTN
IDLEhint整數(shù)加減運(yùn)算14add.w(add
word)
add.wrd,rj,rk GR[rd]=GR[rj]
+
GR[rk]sub.w(subtractword)
sub.wrd,rj,rk GR[rd]=GR[rj]-GR[rk]addi.w(add
immediateword)
addi.wrd,rj,si12 GR[rd]=GR[rj]+sext32(si12)LAMIPSIRV32Iadd.wrd,rj,rkaddurd,rs,rtaddrd,rs1,rs2sub.wrd,rj,rksuburd,rs,rtsubrd,rs1,rs2addi.wrd,rj,si12addiurs,rs,si16addird,rs1,si12注:sext32(A)表示將數(shù)值A(chǔ)符號(hào)擴(kuò)展到32位寬。例如sext32(0x01)=0x00000001,sext32(0x80)=0xffffff80。整數(shù)比較運(yùn)算15slt(setlessthan)
sltrd,rj,rk GR[rd]=GR[rj]<signed
GR[rk]sltu(setlessthanunsigned) slturd,rj,rk GR[rd]=GR[rj]<unsigned
GR[rk]slti(setlessthanimmediate)
sltrd,rj,si12 GR[rd]=GR[rj]<signedsext32(si12)sltui(setlessthanunsignedimmediate)
sltrd,rj,si12 GR[rd]=GR[rj]<unsigned
sext32(si12)LAMIPSIRV32Isltrd,rj,rksltrd,rs,rtsltrd,rs1,rs2slturd,rj,rkslturd,rs,rtslturd,rs1,rs2sltird,rj,si12sltird,rs,si16sltird,rs1,si12sltuird,rj,si12sltiurd,rs,si16sltiurd,rs1,si12注:<signed
將兩個(gè)操作數(shù)視作有符號(hào)數(shù)進(jìn)行小于比較;<unsigned
將兩個(gè)操作數(shù)視作無符號(hào)數(shù)進(jìn)行小于比較。邏輯位運(yùn)算16and(and)
andrd,rj,rk GR[rd]=GR[rj]&GR[rk]or(or) orrd,rj,rk GR[rd]=GR[rj]|GR[rk]nor(notor) norrd,rj,rk GR[rd]=~(GR[rj]|GR[rk])xor(exclusiveor) xorrd,rj,rk GR[rd]=GR[rj]^GR[rk]andi(and
immediate) andird,rj,ui12 GR[rd]=GR[rj]&zext32(ui12)ori(or
immediate) orird,rj,ui12 GR[rd]=GR[rj]|zext32(ui12)xori(exclusiveor
immediate) xorird,rj,ui12 GR[rd]=GR[rj]^zext32(ui12)LAMIPSIRV32Iandrd,rj,rkandrd,rs,rtandrd,rs1,rs2orrd,rj,rkorrd,rs,rtorrd,rs1,rs2norrd,rj,rknorrd,rs,rtN.A.xorrd,rj,rkxorrd,rs,rtxorrd,rs1,rs2andird,rj,ui12andird,rs,ui16andird,rs,si12orird,rj,ui12orird,rs,ui16ordird,rs,si12xorird,rj,ui12xorird,rs,ui16xorird,rs,si12注:zext32(A)將數(shù)值A(chǔ)零擴(kuò)展到32位寬。例如zext32(0x01)=0x00000001,zext32(0x80)=0x00000080。移位運(yùn)算17sll.w(shiftleftlogicword)
sll.wrd,rj,rk GR[rd]=GR[rj]<<GR[rk][4:0]srl.w(shiftrightlogicword) srl.wrd,rj,rk GR[rd]=GR[rj]>>logic
GR[rk][4:0]sra.w(shiftrightarithmeticword) sra.wrd,rj,rk GR[rd]=GR[rj]>>arithGR[rk][4:0]slli.w(shiftleftlogicimmediateword) slli.wrd,rj,ui5 GR[rd]=GR[rj]<<ui5srli.w(shiftrightlogicimmediateword) srli.wrd,rj,ui5 GR[rd]=GR[rj]>>logicui5srai.w(shiftrightarithmeticimmediateword) srai.wrd,rj,ui5 GR[rd]=GR[rj]>>arithui5LAMIPSIRV32Isll.wrd,rj,rksllvrd,rt,rssllrd,rs1,rs2srl.wrd,rj,rksrlvrd,rt,rssrlrd,rs1,rs2sra.wrd,rj,rksravrd,rt,rssrard,rs1,rs2slli.wrd,rj,ui5sllrd,rt,sasllird,rs1,shamtsrli.wrd,rj,ui5srlrd,rt,sasrlird,rs1,shamtsrai.wrd,rj,ui5srard,rt,sasraird,rs1,shamt注:>>logic
表示邏輯右移,>>arith
表示算術(shù)右移。立即數(shù)裝載18lu12i(loadupperfrombit12
immediate)
lu12ird,si20 GR[rd]={si20,12’b0}與ori指令配合裝載一個(gè)值落在[-211,212-1]之外的32位立即數(shù)IMMlu12i$t0,IMM[31:12]ori$t0,$t0,IMM[11:0]MIPS采用高、低兩個(gè)16位的拆分風(fēng)格,因其普通立即數(shù)運(yùn)算指令的立即數(shù)是16位寬RV32I采用高20位、低12位的拆分風(fēng)格,因其普通立即數(shù)運(yùn)算指令的立即數(shù)是12位寬RV32I不能只用“l(fā)ui+ori”的指令對(duì),因其ori指令的立即數(shù)采用的是符號(hào)擴(kuò)展LAMIPSIRV32Ilu12ird,si20luird,si16luird,si20PC相對(duì)計(jì)算19pcaddu12i(pc
add
upperfrombit12
immediate)
pcaddu12ird,si20 GR[rd]=PC+{si20,12’b0}與jirl、load/store指令配合完成PC相對(duì)32位偏移地址的跳轉(zhuǎn)、訪存pcaddu12i$t0,IMMH#假設(shè)期望的PC相對(duì)32位偏移值為OFFSET,且為4的倍數(shù)jirl$zero,$t0,IMML#OFFSET={IMMH[19:0],12’b0}+sext32({IMML,2’b0},32}pcaddu12i$t0,IMMH#假設(shè)期望的PC相對(duì)32位偏移值為OFFSETld.b$t1,$t0,IMML#OFFSET={IMMH[19:0],12’b0}+sext32(IMML,32)LAMIPSIRV32Ipcaddu12ird,si20N.A.auipcrd,si20乘除運(yùn)算20mul.w(multiplywordsigned)
mul.wrd,rj,rk GR[rd]=(GR[rj]*signed
GR[rk])[31:0]mulh.w(multiplyhighwordsigned) mulh.wrd,rj,rk GR[rd]=(GR[rj]*signed
GR[rk])[63:32]mulh.wu(multiplyhighwordunsigned) mulh.wurd,rj,rk GR[rd]=(GR[rj]*unsigned
GR[rk])[63:32]div.w(dividewordsigned) div.wrd,rj,rk GR[rd]=GR[rj]/signed
GR[rk]mod.w(modulowordsigned) mod.wrd,rj,rk GR[rd]=GR[rj]%signed
GR[rk]div.wu(dividewordunsigned) div.wurd,rj,rk GR[rd]=GR[rj]/unsigned
GR[rk]mod.wu(modulowordunsigned) mod.wurd,rj,rk GR[rd]=GR[rj]%unsigned
GR[rk]LAMIPSIRV32Mmul.wrd,rj,rkmultrs,rtmulrd,rs1,rs2mulh.wrd,rj,rkmultrs,rtmulhrd,rs1,rs2mulh.wurd,rj,rkmulturs,rtmulhurd,rs1,rs2div.wrd,rj,rkdivrs,rtdivrd,rs1,rs2mod.wrd,rj,rkdivrs,rtremrd,rs1,rs2div.wurd,rj,rkdivurs,rtdivurd,rs1,rs2mod.wurd,rj,rkdivurs,rtremurd,rs1,rs2注:*signed
將兩個(gè)操作數(shù)視作有符號(hào)數(shù)進(jìn)行乘法;*unsigned
將兩個(gè)操作數(shù)視作無符號(hào)數(shù)進(jìn)行乘法。/signed
將兩個(gè)操作數(shù)視作有符號(hào)數(shù)進(jìn)行除法取商,%signed
將兩個(gè)操作數(shù)視作有符號(hào)數(shù)進(jìn)行除法取余;/unsigned
將兩個(gè)操作數(shù)視作無符號(hào)數(shù)進(jìn)行除法取商,%unsigned
將兩個(gè)操作數(shù)視作無符號(hào)數(shù)進(jìn)行除法取余。注:取64位乘積低32位取64位乘積高32位條件分支21beq(branchonequal)
beqrj,rd,off16
if(GR[rj]==GR[rd])PC=TakenTgtbne(branchonnotequal) bnerj,rd,offs16 if(GR[rj]!=GR[rd])PC=TakenTgtblt(branchonlessthansigned) bltrj,rd,offs16 if(GR[rj]<signedGR[rd])PC=TakenTgtbge(branchongreaterthanorequalsigned)
bgerj,rd,offs16
if(GR[rj]>=signedGR[rd])PC=TakenTgtbltu(branchonlessthanunsigned) blturj,rd,offs16 if(GR[rj]<unsignedGR[rd])PC=TakenTgtbgeu(branchongreaterthanorequalunsigned)
bgeurj,rd,offs16
if(GR[rj]>=unsignedGR[rd])PC=TakenTgtLAMIPSIRV32Ibeqrj,rd,offs16beqrs,rt,off16beqrs1,rs2,offs12bnerj,rd,offs16bners,rt,off16bners1,rs2,offs12bltrj,rd,offs16N.A.bltrs1,rs2,offs12bgerj,rd,offs16N.A.bgers1,rs2,offs12blturj,rd,offs16N.A.blturs1,rs2,offs12bgeurj,rd,offs16N.A.bgeurs1,rs2,offs12TakenTgt=PC+sext32({off16,
2’b0})有延遲槽沒有延遲槽沒有延遲槽無條件相對(duì)PC跳轉(zhuǎn)22b(branch)
boffs26
PC=BrTargetbl(branchandlink) bloffs26 GR[1]=PC+4;PC=BrTargetLAMIPSIRV32Iboffs26jtargetjalzero,offs20bloffs26jaltargetjalrd,offs20BrTarget=PC+sext32({off26,2’b0})有延遲槽沒有延遲槽沒有延遲槽無條件間接跳轉(zhuǎn)23jirl(jumpindirectregisterlink)
jirlrd,rj,offs16
GR[rd]=PC+4; PC=GR[rj]+sext32({offs16,2’b0})幾種常用的間接跳轉(zhuǎn)指令是jirl指令的特殊形式1)非link的間接跳轉(zhuǎn):jrrj,其實(shí)是jirlr0,rj,0;其中最常見的函數(shù)返回jrra,是jirlr0,r1,02)常用間接函數(shù)調(diào)用(用jrra指令返回的):jirlrj,其實(shí)是jirlr1,rj,0。LAMIPSIRV32Ijirlrd,rj,offs16jrrsjalrrd,rsjalrrd,rs1,offs12有延遲槽沒有延遲槽沒有延遲槽普通訪存24ld.b(load
bytesigned)
ld.brd,rj,si12 GR[rd]=sext32(MEM[GR[rj]+sext32(si12)][7:0])ld.bu(load
byteunsigned)
ld.burd,rj,si12 GR[rd]=zext32(MEM[GR[rj]+sext32(si12)][7:0])ld.h(load
halfwordsigned)
ld.hrd,rj,si12 GR[rd]=sext32(MEM[GR[rj]+sext32(si12)][15:0])ld.hu(load
halfwordunsigned)
ld.hurd,rj,si12 GR[rd]=zext32(MEM[GR[rj]+sext32(si12)][15:0])ld.w(load
wordsigned)
ld.wrd,rj,si12 GR[rd]=MEM[GR[rj]+sext32(si12)][31:0]st.b(storebyte)
st.brd,rj,si12
MEM[GR[rj]+sext32(si12)][7:0]=GR[rd][7:0]st.h(storehalfword)
st.hrd,rj,si12
MEM[GR[rj]+sext32(si12)][15:0]=GR[rd][15:0]st.w(storeword)
st.wrd,rj,si12
MEM[GR[rj]+sext32(si12)][31:0]=GR[rd][31:0]LAMIPSIRV32Ild.brd,rj,si12lbrt,offs16(rs)lbrd,offs12(rs1)ld.burd,rj,si12lburt,offs16(rs)lburd,offs12(rs1)ld.hrd,rj,si12lhrt,offs16(rs)lhrd,offs12(rs1)ld.hurd,rj,si12lhurt,offs16(rs)lhurd,offs12(rs1)ld.wrd,rj,si12lwrt,offs16(rs)lwrd,offs12(rs1)st.brd,rj,si12sbst,offs16(rs)sbrs2,offs12(rs1)st.hrd,rj,si12shst,offs16(rs)shrs2,offs12(rs1)st.wrd,rj,si12swst,offs16(rs)swrs2,offs12(rs1)原子訪存25ll.w(loadlinkedword)
ll.wrd,rj,si14 GR[rd]=MEM[GR[rj]+sext32({si14,2’b0})][31:0];LLbit=1sc.w(storeconditionalword) sc.wrd,rj,si14 ifatomic_update_is_ok MEM[GR[rj]+sext32({si14,2’b0})][31:0]=GR[rd]; GR[rd]=1 else GR[rd]=0LAMIPSIRV32All.wrd,rj,si14llrt,offs16(rs)lr.wrd,(rs1)sc.wrd,rj,si14scrt,offs16(rs)sc.wrd,rs2,(rs1)//compare_and_swapMEM[a0],GR[a1]--expectedvalue,GR[a2]--newvalue1: ori t0,a2,0 //movet0,a2 ll.w t1,a0,0 bne t1,a1,2f sc.w t0,a0,0 beq t0,r0,1b2:預(yù)取指令26preld(preload)
preld
hint,rj,si12
Prefetch(hint,MEM[GR[rj]+sext(si12)])沒有實(shí)現(xiàn)Cache時(shí),preld的執(zhí)行應(yīng)視同nop;即使實(shí)現(xiàn)Cache,將preld實(shí)現(xiàn)為nop也不會(huì)導(dǎo)致正常程序功能出錯(cuò)。preld不應(yīng)觸發(fā)任何與地址錯(cuò)誤相關(guān)的異常。LAMIPSIRV32Ipreldhint,rj,si12N.A.N.A.柵障指令27dbar(databarrier) dbarhint
Setadatabarrierbetweenload/storeoperationsibar(instructionbarrier) ibarhint
Setamemorybarrierbetweenpreviousload/storeoperations andfollowinginstructionfetchingdbar的hint=0是必須實(shí)現(xiàn)的,其余hint可以按照hint=0實(shí)現(xiàn)。實(shí)現(xiàn)時(shí),dbar前的load/store指令都徹底執(zhí)行完成(執(zhí)行效果全局可見)后,dbar后的load/store指令才能開始執(zhí)行。ibar指令主要應(yīng)用在有自修改代碼的場景中。為降低硬件實(shí)現(xiàn)復(fù)雜度,LA32R相比于LA要求軟件負(fù)責(zé)自修改代碼場景中數(shù)據(jù)Cache和指令Cache間的一致性維護(hù),這就意味著ibar的實(shí)現(xiàn)能簡化為:等到ibar前的訪存類指令(含cacop指令)都執(zhí)行完成退出流水線后,ibar后的指令才能開始取指。LAMIPS32RV32IdbarhintsyncfenceibarhintN.A.fence.i系統(tǒng)調(diào)用及陷入28syscall
syscallcode
CauseaSYSexceptionbreak breakcode
CauseaBRKexceptionLAMIPSIRV32Isyscallcodesyscallecallbreakcodebreakebreak時(shí)間讀取29rdcntvl.w rdcntvl.wrd
readthe64-bitstablecounter,wirtecnt[31:0]toGR[rd]rdcntvh.w rdcntvh.wrd
readthe64-bitstablecounter,wirtecnt[63:32]toGR[rd]rdcntid rdcntidrj
readidofthisstablecounter龍芯架構(gòu)32位精簡版定義了一個(gè)恒定頻率計(jì)時(shí)器,其主體是一個(gè)64位的計(jì)數(shù)器,稱為StableCounter。StableCounter在復(fù)位后置為0,隨后每個(gè)計(jì)數(shù)時(shí)鐘周期自增1,當(dāng)計(jì)數(shù)至全1時(shí)自動(dòng)繞回至0繼續(xù)自增。同時(shí)每個(gè)計(jì)時(shí)器都有一個(gè)軟件可配置的全局唯一編號(hào),稱為CounterID。當(dāng)處理器沒有時(shí)鐘變頻設(shè)計(jì)時(shí),恒定頻率計(jì)時(shí)器可以直接使用處理器核的時(shí)鐘。LAMIPSIRV32Irdcntvl.wrdN.A.rdcylerdrdcntvh.wrdN.A.rdcylehrdrdcntidrjN.A.N.A.C語言的機(jī)器表示30C語言的控制流語句選擇語句:if~else,switch~case循環(huán)語句:for,while,do~while輔助控制語句:break,continue,goto,returnC語言的控制流語句在LoongArch匯編中映射為各種分支指令(B類)或其組合選擇語句和循環(huán)語句映射為條件分支輔助控制語句映射為無條件分支或跳轉(zhuǎn)(return語句)LoongArchABI31應(yīng)用程序二進(jìn)制接口(ApplicationBinaryInterface,簡稱ABI)數(shù)據(jù)表示和對(duì)齊寄存器使用函數(shù)調(diào)用棧布局目標(biāo)文件和可執(zhí)行文件格式……LoongArchABI分為3種LP32:
32位處理器上執(zhí)行的32位程序LPX32: 64位處理器上執(zhí)行的64位程序,但指針和long整型的寬度為32位LP64: 在64位處理器上執(zhí)行的64位程序LoongArchABI寄存器使用約定32LoongArchABI有以下約定a0-a7:函數(shù)參數(shù)v0/v1:函數(shù)返回值,a0/a1別名t*:臨時(shí)變量,子函數(shù)可改s*:子函數(shù)不改的變量ra:返回地址tp:線程指針sp:棧頂指針fp:棧幀指針寄存器號(hào)助記符Saver0zero-1racaller2tp-3spcallee4-11a0-a7v0/v1=a0/a1caller12-20t0-t8caller21reserved-22fpcallee23-31s0-s8callee流程控制語句–示例133當(dāng)條件表達(dá)式t0等于0(BEQZ)時(shí),跳轉(zhuǎn)到標(biāo)號(hào).L1標(biāo)號(hào).L2為公用的程序出口//Cif~elseif(cond_exp)<then_statement>else<else_statement>#ASMif~elsemove $t0,cond_expbeqz $t0,.L1<then_statement>b .L2.L1:<else_statement>.L2:流程控制語句–示例234//Cforinttest_for(inta){intsum=0;inti=0;for(i=0;i<a;i++){sum+=i;}returnsum;}//Cwhileinttest_while(inta){intsum=0;inti=0;while(i<a){sum+=i;i++;}returnsum;}//Cdo-whileinttest_dowhile(inta){intsum=0;inti=0;do{sum+=i;i++;}while(i<a);returnsum;}test_for: or $t0,$r0,$r0 or $t1,$r0,$r0.L2: blt $t0,$a0,.L3 or $a0,$t1,$r0 jr $ra.L3: add.w $t1,$t1,$t0 addi.w $t0,$t0,1 b .L2test_while: or $t0,$r0,$r0 or $t1,$r0,$r0.L2: blt $t0,$a0,.L3 or $a0,$t1,$r0 jr $ra.L3: add.w $t1,$t1,$t0 addi.w $t0,$t0,1 b .L2test_dowhile: or $t0,$r0,$r0 or $t3,$r0,$r0.L2: add.w $t1,$t3,$t0 addi.w $t2,$t0,1 or $t3,$t1,$r0 or $t0,$t2,$r0 blt $t2,$a0,.L2
or $a0,$t1,$r0 jr $ra流程控制語句–示例335switch-case采用跳轉(zhuǎn)表實(shí)現(xiàn)intst(inta,intb,intc){switch(a){case15:c=b&0xf;case10:returnc+50;case12:case17:returnb+50;case14:returnb;default:returna;}} .textst: addi.w $t0,$a0,-10 //a-10 sltiu $t1,$t0,8 beqz $t1,default //(a-10)>=8 la $t2,jr_table slli.w $t1,$t1,2 //(a-10)*4 add.w $t1,$t1,$t2
//(a-10)*4+jr_table ld.w $t0,$t1,0 jr $t0default
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 可再生能源集成與能源互聯(lián)網(wǎng)的協(xié)同效應(yīng)-洞察及研究
- 類星體輻射機(jī)制-洞察及研究
- 跨市場持倉風(fēng)險(xiǎn)比較分析-洞察及研究
- 結(jié)構(gòu)變異與功能調(diào)控的網(wǎng)絡(luò)分析-洞察及研究
- 2025年醫(yī)療影像AI分析五年應(yīng)用報(bào)告
- 耳部整形手術(shù)機(jī)器人研發(fā)-洞察及研究
- 招投標(biāo)風(fēng)險(xiǎn)評(píng)估及控制策略
- 企業(yè)運(yùn)營管理流程優(yōu)化指南
- 企業(yè)環(huán)境風(fēng)險(xiǎn)防控措施方案
- 醫(yī)療器械標(biāo)識(shí)與說明規(guī)范
- 陜西延長石油筆試題庫2025
- 華為戰(zhàn)略管理全景從DSTE體系到執(zhí)行的藝術(shù)
- 【《快遞分揀六軸機(jī)械臂結(jié)構(gòu)及控制系統(tǒng)設(shè)計(jì)》13000字(論文)】
- 宋志平三精管理課件
- 機(jī)械工程建設(shè)項(xiàng)目職業(yè)安全衛(wèi)生設(shè)計(jì)規(guī)范
- 兵團(tuán)經(jīng)營地回收管理辦法
- 2025年輻射安全與防護(hù)-科研生產(chǎn)與其他試題庫
- 2024年廣東第二次高中學(xué)業(yè)水平合格考物理試卷真題(含答案詳解)
- 中醫(yī)適宜技術(shù)課件下載
- 2025屆河南省鄭州市高三下學(xué)期第二次質(zhì)量預(yù)測英語試題(原卷版+解析版)
- 生產(chǎn)車間質(zhì)量管理提升計(jì)劃
評(píng)論
0/150
提交評(píng)論