汇编-00
为什么要学习汇编语言:
- 透过高级语言看本质, 突破瓶颈
- 疑难bug追踪
- 逆向工程, 反汇编(Disassembly)
汇编语言(Assembly language):
- 汇编语言与机器语言一一对应, 每一条机器指令都有与之对应的汇编指令 (可逆的)
- 汇编语言可以通过编译得到机器语言, 机器语言可以通过反汇编得到汇编语言
- 通过汇编语言, 不能得出高级语言, 因为存在二义性
//1
int array[] = {10, 20};
//2
struct Person {
int age;
int num;
} per = {10, 20};
//1,2生成的汇编代码是一样的, 本质都是分配8个字节
mov dword ptr [ebp-8], 0Ah
mov dword ptr [ebp-4], 14h
汇编语言特点:
- 可以直接访问、控制各种硬件设备,比如存储器、CPU等,能最大限度地发挥硬件的功能
- 汇编指令是机器指令的助记符,同机器指令一一对应。每一种CPU都有自己的机器指令集\汇编指令集,所以汇编语言不具备可移植性
- 知识点过多,开发者需要对CPU等硬件结构有所了解,不易于编写、调试、维护
- 不区分大小写,比如mov和MOV是一样的
汇编语言种类:
8086汇编(8086处理器是16bit的CPU, 所以作为入门学习最好) Win32汇编 Win64汇编
AT&T汇编(Mac、iOS模拟器) ARM汇编(嵌入式、iOS设备) ......
前三种为intel汇编