通用暫存器
Register
AX、BX、CX、DX,
DI、SI、BP、SP
R8 ~ R15
64 bit
前綴加 R
ex:RAX、RDI
不變
ex:R8、R9…
32 bit
前綴加 E
ex:EAX、EDI
後綴加 D
ex:R8D、R9D…
16 bit
不變
ex:AX、DI
後綴加 W
ex:R8W、R9W…
8 bit
後面有 X,將 X 取代成 H/L
後面是 I/P,後綴加 L
ex:AH、BL、DIL、BPL
後綴加 B
ex:R8B、R9B…
Slide 15
Slide 15 text
通用暫存器
RAX
EAX
AX
AH AL
64bits 32bits 16bits
8bits
Slide 16
Slide 16 text
區段暫存器
名稱 作用
CS 指向 Code Segment
DS 指向 Data Segment
SS 指向 Stack Segment
ES、FS、GS
指向 data segment
(選擇性使用)
Slide 17
Slide 17 text
指標暫存器
名稱 作用
SP
Stack Pointer
指向 stack 頂端
BP
Base Pointer
指向 stack 的任何位置
IP 指向目前執行指令的地址
SI、DI
Source/Destination Index
指向資料來源、資料目的地
Slide 18
Slide 18 text
旗標暫存器
名稱 作用
CF
Carry Flag
最高位元有進位或借位,CF = 1;否則為 0
PF
Parity Flag
判斷在運算後最低 8 位元的 1 個數
奇數個 PF = 1,否則為0
AF
Auxiliary Flag
運算後,第 3 位元產生進位或借位
AF = 1;否則為 0
ZF
Zero Flag
運算後,結果為 0,則 ZF = 1;否則為 0
Slide 19
Slide 19 text
旗標暫存器
名稱 作用
SF
Sign Flag
運算後,SF = 1,表示負數;否則為 0
OF
Overflow Flag
運算後,結果溢位,OF = 1,否則 為 0
TF
Trap Flag
用於 Debug,TF = 1,執行時一次執行一個指令
DF
Direction Flag
字串運算,DF = 0,低位到高位;DF = 1,則反之
IF
Interrupt Flag
IF = 1 時,可以接受外部中斷,IF = 0 則無法
Slide 20
Slide 20 text
ASM Syntax
Slide 21
Slide 21 text
Practice
• Compiler Explorer
• 可以將程式碼轉成 Assembly 觀察
• 將程式碼用不同的顏色做背景,作為對應
Slide 22
Slide 22 text
Syntax
Intel AT&T
push rbp
mov rbp,rsp
pop rbp
push %rbp
mov %rsp,%rbp
pop %rbp
常見
指令 作用 範例語法
push 將資料放進 stack push rbp
pop 將資料從 stack 拿出 pop rbp
mov 將資料從 A 放入 B mov B, A
ret 回傳 ret
lea 將變數位址複製給暫存器 lea rax, [rbp-0xc]
nop 無任何操作 nop
Slide 35
Slide 35 text
基本運算
指令 作用 範例語法
inc 將變數加 1 inc rax
dec 將變數減 1 dec rax
add 將變數加指定數目 add rax, 0x1
sub 將變數減指定數目 sub rax, 0x1
mul 將變數相乘 mul cx
div 將變數相除 div cx
Slide 36
Slide 36 text
位元運算
指令 作用 範例語法
and 做 & 運算 and al, 0x05
or 做 | 運算 or al, 0x05
xor 做 ^ 運算 xor al, 0x05
not 做 ! 運算 not al
neg 計算二進位補數 neg al
shl/shr 左/右移指定位數 shl rax, 2
rol/ror 左/右循環位移指定位數 rol rax, 2