RISC-V平台的匯編指令解析


     csrr    a0, 0xF14 //把0xF14的值讀入到a0中

     andi    a1, a0, 0x1f //把a0 和0x1F按位與運算后存儲到a1中

     srli    a0, a0, 5 //將高位移動到低位,覆蓋a0 (SLLI是邏輯左移(0被移入低位); SRLI是邏輯右移(0被移入高位);SRAI是算術右移(原來的符號位被復制到空出的高位中))

     li      a2, ARCHI_FC_CID //將ARCHI_FC_CID 的低6位取出寫入到a2中 (C.LI 指令將符號擴展的 6 位立即數 imm,寫入寄存器 rd 中)

     la      t1, _start  //加載地址,把_strart加載到系統中 (la rd, symbol :          auipc rd, symbol[31:12] addi rd, rd, symbol[11:0])

       sw      t1, 0x80(t2)  //C.SW 指令將寄存器 rs2’中的 32 位值保存到存儲器中。其有效地址的計算是通過將 零 擴展的偏移量×4,然后加上寄存器 rs1’中的基址形成的。它被擴展為 sw rs2’, offset[6:2](rs1’)指令.

      bltu    t0, t1, 1b //如果無符號的t0小於無符號的t1,則跳轉到1b (BLT和BLTU 將跳轉,如果rs1小於rs2,分別使用有符號數和無符號數進行比較。BGE和BGEU將跳轉,如果rs1大於等於rs2,分別使用有符號數和無符號數進行比較。注意,BGT、BGTU、BLE和BLEU可以通過將BLT、BLTU、BGE、BGEU的操作數對調來實現)

      jalr  x1, t2 //C.JALR(jump and link register)指令執行與 C.JR 指令相同的操作,但是它還將在跳轉指 令后的指令地址(pc+2)寫入到鏈接寄存器 x1 中。C.JALR 指令被擴展為 jalr x1, rs1, 0。

      lw  x10, 0(x10) //C.LW 指令將一個 32 位數值從存儲器讀入寄存器 rd’中。其有效地址的計算是通過將 零擴展的偏移量×4,然后加上寄存器 rs1’中的基址形成的。它被擴展為 lw rd’, offset[6:2](rs1’)指令。

      slli     x9, x9, 2  //C.SLLI 指令是一條 CI 格式的指令,它對寄存器 rd 中的數值進行邏輯左移操作,並將結果寫入 rd。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM