• Branches (pc=…)
  • Unconditional
    • Branches
        imm16 offsetbr
        imm26 absolutejmpi
        reg32 absolutejmp
        Branch: pc ← branch target
    • Calls
        TargetSave pc to
        imm26racall
        reg32 callr
        0x20eatrap
        breakpointbabreak
        Branch and save pc so we can come back later
    • Returns
        Return address
        raret
        eaeret
        babret
        Return: pc ← return address
  • Conditional
      signedunsigned
      <bltbltu
      ≥bgebgeu
      ≤blebleu
      >bgtbgtu
      =beq
      ≠bne
      Compare two registers and branch if true
  • Memory Operations
  • Load   reg←[mem]
      Sign-extendedZero-extendedNot extended
      Bytescacheduncachedcacheduncachedcacheduncached
      1ldbldbioldbuldbuio——
      2ldhldhioldhuldbhio——
      4————ldwldwio
      Register ← data loaded from memory
  • Store   reg→[mem]
      TruncatedNot truncated
      Bytescacheduncachedcacheduncached
      1stbstbio——
      2sthsthio——
      4——stwstwio
      Register (truncated) → stored into memory
  • Arithmetic and Logic
  • Data Movement
    • General-purpose
        UpperLower
        sign extendimm16movi
        0imm16movui
        imm160movhi
        imm32 movia
        reg mov
        Destination ← source value
    • Special registers
        ReadWrite
        ctlNrdctlwrctl
        prs.rNrdprswrprs
        pcnextpcjmp
        Special reg → reg
        Special reg ← reg
  • Arithmetic + − × ÷
      regimm16
      nop—
      +addaddi
      −subsubi
      ×mulmuli
      mulxss—
      mulxsu—
      mulxuu—
      ÷div—
      divu—
  • Bitwise Logic &|^~
      regimm16 lowimm16 high
      andandiandhi
      ororiorhi
      xorxorixorhi
      nor——
      For not, use nor with r0.
  • Comparisons
      registerimm16
      signedunsignedsignedunsigned
      <cmpltcmpltucmplticmpltui
      ≥cmpgecmpgeucmpgeicmpgeui
      ≤cmplecmpleucmpleicmpleui
      >cmpgtcmpgtucmpgticmpgtui
      =cmpeqcmpeqi
      ≠cmpnecmpnei
      Compare a register with a register or imm16
  • Shift and Rotate
      registerimm5
      shiftleftsllslli
      right
      logical unsigned
      srlsrli
      right
      arithmetic signed
      srasrai
      rotateleftrolroli
      rightror—
      Shift or rotate a register by 0–31 bit positions
  • Floating Point
      ×custom 252
      +custom 253
      −custom 254
      ÷custom 255
  • Misc.
  • Memory/Cache Coherence
      DataInstructionPipeline
      flushdflushiflushp
      flushda——
      initdinitiinitp
      initda——
      ——sync
  • Assembler Directives
  • Data Insertion
      SizeDirective
      1.byte
      2.hword
      4.word
      4.float
      len+1.string
      n.skip
      ≥ 0.align
  • Sections
      .section
      .data
      .text
  • Symbols
      .global
      .equ
  • Include
      .include
      .incbin