day03_引用的本质、x86_x64汇编

引用的本质

  • 引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针
  • 一个引用占用一个指针的大小

常引用

  • 引用可以被const修饰,这样就无法通过引用修改数据了,可以称为常引用
    • const必须写在&符号的左边,才能算是常引用
  • const引用的特点
    • 可以指向临时数据(常量、表达式、函数返回值等)
    • 可以指向不同类型的数据
    • 作为函数参数时(此规则也适用于const指针)
      • 可以接受const和非const实参(非const引用,只能接受非const实参)
      • 可以跟非const引用构成重载
  • 常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量
int main() {
	/*int age = 10;
	const int &rAge = age;
	age = 30;

	cout << "age is " << age << endl;
	cout << "rAge is " <<  rAge << endl;*/

	/*int age = 10;
	const long &rAge = age;
	age = 30;

	cout << "age is " << age << endl;
	cout << "rAge is " << rAge << endl;*/

	/*int array[] = { 1, 2, 3, 4 };
	int * const &p = array;*/
	//int (&rArray)[4] = array;

	int a = 10;
	int b = 20;
	// (a = b) = 30;
	(a > b ? a : b) = 40;

	cout << "a is " << a << endl;
	cout << "b is " << b << endl;

	getchar();

	return 0;
}

  • 数组的引用

    	int array[] = { 1, 2, 3, 4 };
    	int * const &p = array;
    	int (&rArray)[4] = array;
    

汇编语言

  • 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

  • add op1, op2

    • 类似于op1 = op1 + op2
  • sub op1, op2

    • 类似于op1 = op1 - op2
  • inc op

    • 自增,类似于op = op + 1
  • dec op

    • 自减,类似于op = op – 1
  • jmp 内存地址

    • 跳转到某个内存地址去执行代码
    • j开头的一般都是跳转,大多数是带条件的跳转,一般跟test、cmp等指令配合使用

权威参考:Intel白皮书 参考

posted @ 2021-04-18 12:36  AAAAAAAAA123123  阅读(53)  评论(0编辑  收藏  举报