8086彙編(16位)
X86彙編(32位)
X64彙編(64位)
ARM彙編(嵌入式,移動設備)
......
2、X64彙編X64彙編根據編譯器的不同,有2種書寫格式:intel和 AT&T
在windows下vs編譯器使用的是Intel格式,MAC等設備 是AT&T格式
3、Intel和AT&T的格式的區别
intel和AT&T的區别
4、學習彙編的最重要的兩個知識點:彙編指令和寄存器(1)寄存器目前寄存器的種類大約有100多種,下邊我們簡單介紹常用的寄存器(32位)
如果用C語言來解釋寄存器,我們可以把這些寄存器理解為變量
32位寄存器:
EAX
累加寄存器,相對于其他寄存器,在運算方面比較常用
EBP
基址指針,指棧的棧底指針
EBX
基地址寄存器,作為内存偏移指針使用
ESI
在内存操作指令中作為“源地址指針”使用
ECX
計數器,用于特定的技術
EDI
在内存操作指令中作為“目的地址”使用
EDX
作為EAX的溢出寄存器,(除法産生的餘數)
MOV
将源操作數送至目的操作數
EIP
存儲CPU下次所執行的指令地址(存放指令偏移地址)
PUSH
入棧指令,将源操作數指定的字數據壓入堆棧棧頂
ESP
指針的寄存器,用于堆棧操作。被形象地稱為棧頂指針,堆棧的頂部是地址小的區域,壓入堆棧的數據越多,ESP也就越來越小。在32位平台上,ESP每次減少4字節
POP
出棧操作,将源操作數指定的字數據壓入堆棧棧頂
JMP
跳轉至指定地址執行
LEA
取有效地址(偏移地址)至寄存器
CALL
将程序的執行交給其他代碼段
RET
子程序的返回指令
64-bit寄存器:
通用寄存器:RAX、RBX、RCX、RDX
還有一些特定的寄存器:
RBP、RSI、RDI、RSP、R8、R9、R10、R11、R12、R13、R14、R15
16-bit寄存器:
通用寄存器:AX、BX、CX、DX
(2)寄存器發展至64位,那如何做到兼容低位寄存器的呢?請看下圖:
三種寄存器的兼容模式
32位寄存器兼容16位寄存器
64位寄存器占8個字節、32位寄存器占4個字節、16位寄存器占兩個字節
(3)利用代碼來理解彙編語言C 代碼
#include "iostream"
using namespace std;
int main() {
int a = 3;
int b = a 1;
system("pause");
return 0;
}
對應的彙編代碼
4: int a = 3;
00007FF70DC8184A mov dword ptr [a],3
5: int b = a 1;
00007FF70DC81851 mov eax,dword ptr [a]
00007FF70DC81854 inc eax
00007FF70DC81856 mov dword ptr [b],eax
6: system("pause");
00007FF70DC81859 lea rcx,[string "pause" (07FF70DC89BB0h)]
00007FF70DC81860 call qword ptr [__imp_system (07FF70DC902F8h)]
7: return 0;
00007FF70DC81866 xor eax,eax
4: int a = 3;
00007FF70DC8184A mov dword ptr [rbp 4],3
//中括号内為a變量的内存地址,這一行代碼的含義是: 把3存放進 内存地址為rbp 4所對應的内存空間
5: int b = a 1;
00007FF70DC81851 mov eax,dword ptr [rbp 4]
00007FF70DC81854 inc eax
00007FF70DC81856 mov dword ptr [rbp 24h],eax
6: system("pause");
00007FF70DC81859 lea rcx,[00007FF70DC89BB0h]
00007FF70DC81860 call qword ptr [00007FF70DC902F8h]
7: return 0;
00007FF70DC81866 xor eax,eax
8:
9: }
彙編指令:
mov dest src
将src 的内容賦值給dest,類似于dest=src
地址值
中括号[]裡面放的都是内存地址
word是2字節,dword是4字節(double word),qword是8字節(quad word)
call 函數地址
調用函數
lea dest[地址值]
将地址值付給dest,類似于dest=地址值
ret
函數返回
xor op1 ,op2
将op1和op2異或的結果賦值給op1,類似于op1=op1^op2
下一期将講解彙編指令
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!