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中最主要部件是寄存器,可以通过改变寄存器的内容来实现对CPU的...
    成绩是汗阅读 6,330评论 0 3
  • 废话不多说,开搞! 一:总线 1.每个CPU芯片都有许多管脚,这些管脚和总线相连,CPU通过总线跟外部器件进行交互...
    项啊丑阅读 10,719评论 1 3
  • CPU包括控制器、运算器、寄存器。其中寄存器的作用就是进行数据的临时存储。 CPU的运算速度是非常快的,为了性能C...
    危险地带_浅笑阅读 4,014评论 0 4
  • 前言 最近准备学习汇编,然后在B站上看到叫iOS小贤的作者发的视频挺不错,打算跟着学,文章是看视频的笔记,最后有原...
    小凉介阅读 5,559评论 0 1
  • 有许多人都知道狗,认识狗,但是你们了解狗吗。目前公认的世界上最重的狗是英国伦敦北部一条叫“佐巴”的大狗,体重...
    曹徳皓123123阅读 3,192评论 0 0