CPU、常见寄存器、指令、栈内存

CPU:运算器、控制器、寄存器 , 控制总线、数据总线、地址总线

一个字节Byte有8个bit就是8个二进制位,16进制时一个F四个1111,两个F就是八个1,FF时11111111,两个F就是一个字节;一个int类型占4个字节,一个字节8个bit,4*8=32位, 8个F可以表示一个int类型

64位CPU,64/8=8,8个字节,

CPU通过总线与外界联系p &cTemp打印内存地址 ,command+shift+M 粘贴内存地址查看内存

一个字由两个字节组成

ARM64拥有31个64位的通用寄存器X0到X30   ,W0到W28,SP、PC、CPSR

PC寄存器为指令指针寄存器,它指示CPU当前要读取指令的地址,CPU将PC指向的内存单元的内容看做指令

bl指令叫做转移指令是专门修改PC寄存器的值的,即修改下一步要读取指令的地址

register write pc 0x1011168bc 强行修改pc寄存器的

ARM64中  :XZR零寄存器

                          浮点寄存器 64位:D0~D31  32位:S0~S31

                          向量寄存器  128位:V0-V31


堆栈是内存中的一个数据结构.

内存如同一个仓库,堆栈是仓库中开辟的一个规则有序的后进先出的仓库区,而寄存器就是生产线上的一个容器。堆栈是属于内存区的一部分,而寄存器则是CPU中的一部分。

ARM64下,函数的参数存放在x0到x7(w0到w7)这8个寄存器,如果超过8个会入栈,函数的返回值是放在x0寄存器,函数的局部变量放在栈里面

关于内存读写指令:

Str指令将数据从寄存器中读出来,存到内存中(写内存)

ldr指令从内存中读出来,存到寄存器中

str和ldr的变种寄存器 stp和ldp可以操作2个寄存器.  stur 和ldup也是变种寄存器,一般表示负数


例子:

sub sp,sp,#0x20 //因为是16进制的, 拉伸栈空间32个字节,往低地址拉伸。

stp x0,x1,[sp,#0x10]  //x0,x1是寄存器,sp是栈顶,栈在内存中,stp指令的意思是将寄存器中的东西放到内存中,所以这句话的意思是sp往上加16个字节用来存放x0,x1中的东西

ldp x1,x0,[sp,#0x10]  //将sp往上读16个字节的东西拿出来放到x1,x0寄存器中

add sp,sp,#0x20  //上面减一下,这里加一下,让栈平衡


函数的返回值通常放在x0寄存器里

你可能感兴趣的:(CPU、常见寄存器、指令、栈内存)