广州一起做的网站,js 网站头部固定,球球是哪个公司开发的,辽宁大连直客部七部电话文章目录 A64指令编码格式加载与存储指令寻址模式变基模式前变基模式后变基模式 PC相对地址模式 伪指令加载与存储指令的变种不同位宽的加载与存储指令多字节内存加载和存储指令基地址偏移量模式前变基模式后变基模式 跳转指令返回指令比较并跳转指令 其它指令内存独占访问指令… 文章目录 A64指令编码格式加载与存储指令寻址模式变基模式前变基模式后变基模式 PC相对地址模式 伪指令加载与存储指令的变种不同位宽的加载与存储指令多字节内存加载和存储指令基地址偏移量模式前变基模式后变基模式 跳转指令返回指令比较并跳转指令 其它指令内存独占访问指令异常处理指令内存屏障指令 相关参考 A64指令编码格式
A64指令集中每条指令的宽度为32位其中第24〜28位用来识别指令的分类格式如下
op0字段的值如下
加载与存储指令
寻址模式
在A64指令集中加载和存储指令有多种寻址模式如下
寻址模式格式说明基地址模式[Xn]基地址偏移量模式[Xn, #offset]前变基模式[Xn, #offset]!先更新偏移量地址后访问内存地址后变基模式[Xn], #offset先访问内存地址再更新偏移量地址PC相对地址模式label
变基模式
变基模式主要有如下两种
前变基(pre-index)模式先更新偏移量地址后访问内存地址后变基(post-index)模式先访问内存地址后更新偏移量地址。
前变基模式
前变基模式的指令格式如下
LDR Xt, [Xn|SP, #simm]!举例说明
LDR x6, [x1, #8]! //将x1里面的地址增加偏移#8并赋给x1最后将新的x1寄存器内的地址的值给x6寄存器后变基模式
后变基模式的指令格式如下
LDR Xt, [Xn|SP], #simm举例说明
LDR x6, [x1], #8 //将x1寄存器内的地址的值赋给x6寄存器并将x1地址偏移8。PC相对地址模式
汇编代码里常常会使用标签label来标记代码片段。LDR指令还提供一种访问标签的地址模式指令格式如下
LDR Xt, label伪指令
伪指令与指令的最大不同在于伪指令属于编译器处理的范畴伪指令会被编译展开为多条指令指令是CPU处理的命令的最小单元。
LDR x7,0x80000 //等同于 MOV x7, 0x80000需要区别 LDR x7, 0x800000; 这条指令的意义是将当前PC寄存器的地址的 0x80000的偏移取出地址内容填充到x7寄存器中
加载与存储指令的变种
不同位宽的加载与存储指令 多字节内存加载和存储指令
A32指令集提供LDM和STM指令来实现多字节内存加载与存储而A64指令集不再提供 LDM和STM指令而提供LDP和STP指令。LDP和STP指令支持3种寻址模式。
基地址偏移量模式
基地址偏移量模式LDP指令的格式如下
LDP Xtl, Xt2, [Xn|SP{,#imm}]它以Xn/SP寄存器的值为基地址然后读取Xn/SP寄存器的值 imm地址的值到X/1寄存 器读取Xw/SP寄存器的值 imm8地址的值到R2寄存器中。
基地址偏移模式STP指令的格式如下
STP Xtl, Xt2, [Xn|SP{, #imm}]它以Xn/SP寄存器的值为基地址然后把XZ1寄存器的内容存储到[Xrt/SP imm]处把 Xt2寄存器的内容存储到[Xn/SPinmi8]处。
前变基模式
前变基模式LDP/STP指令的格式如下
LDP Xt1, Xt2, [Xn|SP, #imm]!
STP Xtl, Xt2, [Xn|SP, #imm!后变基模式
后变基模式LDP/STP指令的格式如下
LDP Xtl, Xt2, [Xn|SP], #imm
STP Xtl, Xt2, [Xn|SP], #imm跳转指令 返回指令
A64指令集提供了两条返回指令
RET指令通常用于子函数的返回其返回地址保存在LR寄存器中ERET指令从当前的异常模式返回。它会将SPSR的内容恢复到PSTATE寄存器中从ELR中获取跳转地址并返回到该地址。ERET指令可以实现处理器模式的切换比 如从ELI切换到EL0。
比较并跳转指令 其它指令
内存独占访问指令 异常处理指令 内存屏障指令 相关参考
《ARM64体系结构与编程》