寄存器&指令

2019-02-01  本文已影响0人  Crassus

汇编原理

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

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

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

数据宽度:

寄存器

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等等

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

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       // 栈平衡
上一篇下一篇

猜你喜欢

热点阅读