[地址值]
- 中括号[ ]里面放的都是内存地址
- word是2字节,dword是4字节,qword是8个字节
lea
lea dest, [地址值]
赋值地址值 给dest (load effect address) (装载地址值)
类似于 dest = 地址值
- 对比 mov
mov dest, src
mov 是对应地址取出的内容赋值,
类似于dest = src
mov move的简称
lea dest, [地址值]
lea eax, [1122H]
// eax = 1122H
// mov eax, 1122H
mov eax, dword ptr[1122H]
call
call 函数地址
-
调用函数
F11 进入函数内部汇编代码:
xor
xor op1, op2
- 将op1和op2异或的结果赋值给op1,类似于op1 = op1^op2
jmp
跳转到某个内存地址去执行代码
带条件跳转
汇编:
分析:
-
jne:jump not equal,结果不相等才跳转
常见代码汇编分析
-
1
汇编代码:
-
2
为什么用mov?
mov不支持内存到内存
用debug模式调试查看汇编代码,release模式下,没用代码会被优化掉
-
3
注意: mov 都是带单位的
汇编分析:
内存概图
mov dword ptr[age], 3
lea eax, [age]
mov dword ptr[p], eax
mov eax,dword ptr[p]
mov dword ptr[eax], 5
引用补充
-
结构体的引用:
-
指针的引用:
-
数组的引用:
常引用
- 引用可以被const修饰,这样就无法通过引用修改数据了,即常引用
必须写在&符号的左边才算常引用
特点:
- 可以指向临时数据(常量、表达式、函数返回值等)
- 可以指向不同类型的数据
- 作为函数参数时(此规则也适用于const指针)
可以接受const和非const实参(非const引用,只能接受非const实参)
可以跟非const引用构成重载
可以访问能修改:
因为本质是指针:
几种不同的写法的情况:
-
常引用可以指向临时数据,常量
带来的重大用处:引用不可以,常引用可以
引用:
常引用:
下面的函数定义对应函数不能直接穿常量:
函数参数常引用就可以了:const引用可接收范围很大
和非const引用构成重载