汇编 assembly
2018-05-30 本文已影响0人
MAXZhangZZ
汇编
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 溢出 正数加正数
- 内存分区
代码区,放代码的 可读可写 可执行
栈区域 存放参数 局部变量 可读可写
堆区域 可读可以
全局变量 可读可写
常量区 可读