組合語言
Author:堇姬
電腦底層架構
與程式執行相關硬體
- CPU
實際運算硬體,配有暫存器,儲存運算資料
- RAM
記憶體
指令集架構
先設計好指令集架構再設計電路。
常見:
- x86/x86-64
- ARM
- MIPS
大部分用的是intel x86/x86-64架構
CPU暫存器
隨設計而改變用途
名稱 | 意思 |
---|---|
rax | accumulator |
rbx | base |
rcx | count |
rdx | data |
固定用途
名稱 | 意思 |
---|---|
rsi | source index |
rdi | destination index |
rbp | base pointer(控制stack) |
rsp | stack pointer(控制stack) |
rip | instruction pointer(執行到甚麼位置) |
- 同個暫存器可以用不同名稱來存取不同大小資料(RAX/EAX/AX/AH/AL是同個暫存器,只是大小不同)
ex:
RAX= 0x0102030405060708
EAX= 0x05060708
AH = 0x0506
AL = 0x0708
Stack相關指令
指令 | 意思 | 範例 | 範例意思 |
---|---|---|---|
push | 放進stack | push rax | rax放到stack頂部,rax資料不清除 |
pop | 拿出stack | pop rbx | 取stack頂部資料放入rbx |
簡單x86指令
mov <Destination>,<Source>
- 移動
1
2
3mov rax,rbx (rax=rbx)
mov rax,[rbp-0x4] (rax=*(rbx-0x4))
mov [rax],rbx (*rax=rbx)
運算式指令
- 指令 <Destination>,<source>
指令 | 意思 |
---|---|
add | 加 |
sub | 減 |
imul | 乘 |
idiv | 除 |
and | 且 |
or | 或 |
xor | 異或 |
- 指令 <Destination>
指令 | 意思 |
---|---|
inc | +1 |
dec | -1 |
neg | |
not |
指定大小
可以在[]前面加上大小來決定取值大小
- byte 1byte
- word 2bytes
- dword 4bytes
- qword 8bytes
1 | (rcx=0x0102030405060708) |
分支
使用比較以及跳轉實現 if / for /while
- 比較