美文网首页
寄存器&指令

寄存器&指令

作者: Crassus | 来源:发表于2019-02-01 15:36 被阅读0次

    汇编原理

    地址总线:它的宽度决定了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       // 栈平衡
    

    相关文章

      网友评论

          本文标题:寄存器&指令

          本文链接:https://www.haomeiwen.com/subject/fbjdsqtx.html