汇编 assembly

汇编

CPU & 内存

  • 控制线
    内存是读还是写
  • 地址线
    从内存地址中找出内存的值
  • 数据线
    从内存中取出数据交给CPU,传输数据的能力

寄存器

CPU直接交互的硬件,CPU 不会直接和内存交互而是从内存中去除数据放到寄存器中,由寄存器和CPU 交互

arm64 有31个寄存器 每个寄存器有64位,x0-x31 也有w0-w31 不过w0是X0的低32位 如int 修饰的参数 放到寄存器里面就会是w0

  • PC寄存器
    CPU 马上要执行的指令 CPU通过PC寄存器来寻找将要执行指令。

  • bl指令
    arm64 有个mov指令,用来修改寄存器的值,但是mov指令不能修改pc寄存器 不能mov pc 0x113333333这种形式
    修改pc寄存器 只能是bl 和8086 jump差不多
    将下一条指令存到x30寄存器(lr寄存器 )

  • ret指令:
    表示函数的结束,如果函数有返回值的话,cpu会把计算的结果放到x0寄存器中,x0为函数的返回值。

  • 高速缓存
    对内存读取的速度太慢了,于是有了高速缓存


  • 特殊访问方式的存储空间,有FIFO特性
    sp寄存器,sp指向哪,哪就是栈。总指向栈顶 栈是有高到低

  • str ldr str是将 寄存器数据放到栈里面
    ldr 是将内存数据放入寄存器中

2个变种stp ldp

  • cpsr 寄存器 标记寄存器 32位

判断结果 看cpsr 决定某条指令是否被执行
32位的最后4为 NZCV
N 表示运算结果是否为正 负为N=1 非负 N=0
Z判断结果是否为0 如果为0 Z=1 不为0 则Z=0
C 运算时 进位为1 否则为0
V 溢出 正数加正数

  • 内存分区
    代码区,放代码的 可读可写 可执行
    栈区域 存放参数 局部变量 可读可写
    堆区域 可读可以
    全局变量 可读可写
    常量区 可读

你可能感兴趣的:(汇编 assembly)