基本概念:
beq (branch if equal):當兩個 registers 的值相等時跳轉到指定的標籤,例如 beq reg1, reg2, L1。bne (branch if not equal):當兩個 registers 的值不相等時跳轉。Branch 類型:
beq 和 bne,還有比較數字大小的 blt (branch if less than) 和 bge (branch if greater than or equal)。j Label。範例:
i == j,則執行加法運算,否則執行減法運算的 if-else 語句:
if (i == j)   bne x13, x14, Else
f = g + h;   add x10, x11, x12 
else   j Exit 
f = g - h; Else: sub x10, x11, x12
Exit: 
比較運算:
blt (比較是否小於) 和 bge (比較是否大於或等於),還有對無符號數的比較指令 bltu 和 bgeu。Logical Instructions 簡介:
常見指令:
and、andi): 將兩個 registers 的位元進行 AND 操作,and 是 registers 之間的操作,而 andi 則與立即數進行 AND 操作。
and x5, x6, x7 (x5 = x6 和 x7 的位元相交)or、ori): 進行位元的 OR 操作。xor、xori): 進行 XOR 操作,位元不同為 1,相同為 0。sll (shift left logical):左移位,將位元往左移,並在右邊補 0。srl (shift right logical):右移位,將位元往右移,左邊補 0。sra (shift right arithmetic):右移位,但左邊補上符號位。沒有 NOT 指令:
not 指令,但可以使用 xor 與全 1 的值來達成邏輯反轉效果。範例:
slli x11, x12, 2 # x11 = x12 << 2
Assembler 到 Machine Code:
foo.S 和 bar.S)會被轉換成對應的 Machine Code 的 object files(對象文件)(如 foo.o、bar.o)。程式的儲存:
程式執行:
Virtual Register 名稱:
a0-a7,對應的 physical registers 為 x10-x17。Pseudo Instructions:
mv rd, rs = addi rd, rs, 0
li rd, 13 = addi rd, x0, 13
nop = addi x0, x0, 0