美文网首页
地址、指针和引用

地址、指针和引用

作者: Justin_901e | 来源:发表于2019-07-17 16:44 被阅读0次

地址: 对变量取地址使用“&”符号

指针: TYPE * 定义指针,TYPE为数据类型

引用: TYPE & 定义引用,TYPE为数据类型

地址和指针 c 代码 汇编

13  int nVar = 0x12345678;

mov dword ptr ss:[ebp-C],12345678

14  int *pnVar = &nVar;

lea eax,dword ptr ss:[ebp-C]

mov dword ptr ss:[ebp-18],eax    //直接将地址存入内存

15  char *pcVar = (char*)&nVar;

lea eax,dword ptr ss:[ebp-C]

mov dword ptr ss:[ebp-24],eax

16  short *psnVar = (short*)&nVar;

lea eax,dword ptr ss:[ebp-C]

mov dword ptr ss:[ebp-30],eax

18  printf("Justin: %08x \r\n", *pnVar);

19  printf("Justin: %08x \r\n", *pcVar);

20  printf("Justin: %08x \r\n", *psnVar);

23  char cVar[5] = {0x01, 0x23, 0x45, 0x67, 0x89};

mov byte ptr ss:[ebp-40],1

mov byte ptr ss:[ebp-3F],23

mov byte ptr ss:[ebp-3E],45

mov byte ptr ss:[ebp-3D],67

mov byte ptr ss:[ebp-3C],89

内存数据

24  int *pnVar1 = (int*)cVar;

lea eax,dword ptr ss:[ebp-40]

mov dword ptr ss:[ebp-4C],eax

25  char *pcVar1 = (char*)cVar;

lea eax,dword ptr ss:[ebp-40]

mov dword ptr ss:[ebp-58],eax

26  short *psnVar1 = (short*)cVar;

lea eax,dword ptr ss:[ebp-40]

mov dword ptr ss:[ebp-64],eax

27  pnVar1 += 1;

mov eax,dword ptr ss:[ebp-4C]

add eax,4   //int 指针 4 位

mov dword ptr ss:[ebp-4C],eax

28  pcVar1 += 1;

mov eax,dword ptr ss:[ebp-58]

add eax,1    //char 指针 1位

mov dword ptr ss:[ebp-58],eax

29  psnVar1 += 1;

mov eax,dword ptr ss:[ebp-64]

add eax,2  //short指针 2位

mov dword ptr ss:[ebp-64],eax

32  int &nVarType = nVar;

lea eax,dword ptr ss:[ebp-C]

mov dword ptr ss:[ebp-70],eax

33  Add(nVar);

lea eax,dword ptr ss:[ebp-C]

push eax

call addressandpointerref.A11320

add esp,4

void Add(int &nVar) {

nVar++;

mov eax,dword ptr ss:[ebp+8]    //堆栈寄存器,获取函数调用前push的地址

mov ecx,dword ptr ds:[eax]        //数据段寄存器

add ecx,1

mov edx,dword ptr ss:[ebp+8]

mov dword ptr ds:[edx],ecx

}

AH&AL=AX(accumulator):累加寄存器 

BH&BL=BX(base):基址寄存器 

CH&CL=CX(count):计数寄存器 

DH&DL=DX(data):数据寄存器 

SP(Stack Pointer):堆栈指针寄存器 

BP(Base Pointer):基址指针寄存器 

SI(Source Index):源变址寄存器 

DI(Destination Index):目的变址寄存器 

IP(Instruction Pointer):指令指针寄存器 

CS(Code Segment)代码段寄存器 

DS(Data Segment):数据段寄存器 

SS(Stack Segment):堆栈段寄存器 

ES(Extra Segment):附加段寄存器 

OF overflow flag 溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1. 

SF sign Flag 符号标志 记录运算结果的符号,结果负时为1. 

ZF zero flag 零标志 运算结果等于0时为1,否则为0. 

CF carry flag 进位标志 最高有效位产生进位时为1,否则为0. 

AF auxiliary carry flag 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0. 

PF parity flag 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0. 

DF direcion flag 方向标志 用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大. 

IF interrupt flag 中断标志 IF=1时,允许CPU响应可屏蔽中断,否则关闭中断. 

TF trap flag 陷阱标志 用于调试单步操作.

相关文章

  • 地址、指针和引用

    地址:对变量取地址使用“&”符号 指针:TYPE *定义指针,TYPE为数据类型 引用:TYPE &定义引用,TY...

  • Go 语言学习笔记-指针、切片与结构体

    指针 指针就是地址。指针变量就是存储地址的变量 指针使用 &p : 引用*p : 解引用、间接引用 栈帧 用来给函...

  • 地址、指针和引用 随笔

    地址:一般而言是指物理地址。指针:是一个指向物理地址的变量。引用:在Java中没有真正的C++概念中的引用,只不过...

  • 函数指针函数数组指针数组双重指针char*你怕了吗反正我怕

    对没错这篇是C 指针和地址和引用以及*和& 指针指向一个内存空间的地址,sizeof(指针)=sizeof(int...

  • C++ 知识快速回顾

    一. 引用 1. 引用与指针的区别 声明引用时必须初始化,指针可以后续赋值 对引用取地址就是对目标向量取地址 引用...

  • GoAdvance

    指针 指针就是地址,指针变量就是存储地址的变量 *p : 解引用,间接引用 栈帧:用来给函数运行提供内存空间,取内...

  • java中的引用与c++中的指针的区别

    java中的引用与c++中的指针的区别 Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对...

  • 面经1

    语言基础C++ 1、指针和引用的区别?相同点:都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某...

  • 链表(下):如何轻松写出正确的链表代码

    技巧一:理解指针或者引用的意义 指针或者引用都是存储对象的内存地址。将某个变量赋值给指针,就是将这个变量的地址赋值...

  • 指针和引用的区别

    本质:引用是别名,指针是地址

网友评论

      本文标题:地址、指针和引用

      本文链接:https://www.haomeiwen.com/subject/rroqlctx.html