C++学习 <四> 汇编入门
一、汇编难或不难?
- 学习汇编主要学习两大知识点 1> 寄存器 2> 汇编指令
- 不同的平台下,x64汇编有2种。 1> 目前大部分Windows平台:Intel 2> Mac平台:AT & T
- 汇编的种类 8086 (16bit) x86 (32bit) x64 (63bit) ARM (嵌入式、移动设备)
- 汇编不区分大小写
二、计算机原理图
三、寄存器
x64环境,64bit: RAXRBXRCXRDX:通用寄存器 x86环境,32bit: EAXEBXECXEDX:通用寄存器 16bit: AXBXCXDX:通用寄存器 把RAX对半分,就兼容EAX,同理,兼容AX 一般规律: R开头,64bit E开头,32bit
四、汇编指令
1. mov dest, src
2. [地址值]
中括号[ ]里面放的都是内存地址
3.word:2字节;dword:4字节(double word);qword:8字节(quad word)
例如:int a = 3; 转成汇编:mov dword ptr [ebp-8],3 解释:把3赋值给变量a的地址值,使用4个字节空间
4.call 函数地址
函数调用
5.其他
-
lea dest, [地址值] load effect address : 装载一个有效的地址值
lea eax, [1122H] 结果=> eax == 1122h
mov eax, dword ptr [1122H] (假设这里的内容值为3) 结果=> eax == 3
-
ret : 函数返回 xor op1, op2 表示:将op1 和op2异或的结果赋值给op1, 类似op1 = op1 ^ op2 add op1, op2 表示:op1 = op1 + op2 sub op1, op2 表示:op1 = op1 - op2 inc op 表示:op = op + 1 dec op 表示:op = op - 1 jmp 内存地址 表示: cmp 表示:比较 compare jne 01202683
表示: jump not equal,如果不相等,就跳转,否则正常往下走