从C++探究汇编.04

[地址值]

  • 中括号[ ]里面放的都是内存地址
  • 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引用构成重载


你可能感兴趣的:(从C++探究汇编.04)