寄存器&指令

汇编原理

地址总线:它的宽度决定了cpu的寻址能力,如1G内存寻址能力是1024x1024x1024; 8086地址总线宽度是20根,所以寻址能力是1M(2的20次方)。

数据总线:它的宽度决定了cpu的单次数据传送量,也就是数据传送速度;8086的数据总线宽度是16,所以单次最大传递2个字节的数据;

控制总线:它的宽度决定了cpu对其他器件的控制能力、能有多少种控制,能控制的指令就越多;

数据宽度:

  • 位(Bit):1个位就是1个二进制位0或者1
  • 字节(Byte): 1个字节由8个Bit组成,内存中最小单元Byte
  • 字(Word): 1个字由2个字节组成(16位),这2个字节分别为高字节和低字节
  • 双字(Doubleword):1个双字由个字组成(32位)

寄存器

  • 通用寄存器

pc寄存器(program counter)为指令指针寄存器,它指示了cpu当前要读取指令的地址

 register write pc 0x111111  pc寄存器即将要执行的
 ni 下一步执行
 s 进入函数

sp任何时候会保存我们栈顶的地址
fp保存栈底的地址
cpsr
lr(x30): 将bl跳转的下一条指令的地址放入
指令:
bl指令:转移指令,跳转到内存地址,转到标号处执行指令
ret:默认使用lr寄存器的值,通过底层指令提示cpu此处为下条指令地址
函数的返回值通常都放在x0寄存器中
64位对栈的操作必须是16位如0x10 0x20 0x30等等

  • 数据地址寄存器

    64位:X0-X30,XZR(零寄存器)
    32位:W0-W30,WZR(零寄存器)

  • 浮点和向量寄存器

    浮点64位:D0-D31 32位:S0-S31
    向量寄存器128位:v0-v31

  • 异常状态寄存器

    far
    esr
    exception

  • 内存读写指令

str(store register) 将数据从寄存器中读出来,存到内存中。
ldr(load register) 将数据从内存中读取出来,存到寄存器中。
ldr和str的变种ldp和stp可以操作2个寄存器。

  • 栈是一种特殊访问方式的存储空间(后进先出lifo)
  • sp指向哪里哪里就是栈
  • 由高地址往低地址走
    堆:由低地址往高地址走
sub sp,sp,#0x20       // 内存开辟栈32个字节
stp x0,x1,[sp, #0x10] // 将寄存器x0,x1的值放到内存栈的sp+#0x10的位置
ldp x1,x0,[sp,#0x10]  // 将内存数据读取到寄存器x1和x0中
add sp,sp,#0x20       // 栈平衡

你可能感兴趣的:(寄存器&指令)