Lazy loaded image
技术分享
计算机语言
00 min
2018-8-24
2024-11-25
type
status
date
slug
summary
tags
category
icon
password

LEGv8 指令集

LEGv8 指令集是 ARMv8 指令集的子集,适用于嵌入式系统
LEGv8 架构中共有 32 个 64 位寄存器,其中:
通用寄存器(General-Purpose Registers,GPRs)
31个,编号 X0-X30,用于存储数据和执行算数逻辑操作
  • X0-X7:用于函数调用时传递参数和返回结果,如果参数超过8个,多余的存到栈帧中
  • X8:用于间接返回结果的地址
  • X9-X15:用于临时变量存储数据,不需要保留数据
  • X16-X17(IP0-IP1):可能被链接器用作临时寄存器,或者作为普通的临时寄存器
  • X18:用于平台无关的代码的平台寄存器,或者作为普通的临时寄存器
  • X19-X27:用于保存数据,需要在函数调用前后保持不变,其中的一个寄存器可作为基址寄存器
  • X28(SP):用于指向堆栈顶部的地址,存储临时数据和函数调用信息,栈由高地址向低地址增长,随着数据压栈,SP会向低地址移动,栈中的数据段称为栈帧
  • X29(FP):用于指向当前函数的栈帧的底部,即高地址处,在函数调用期间,栈帧会被动态地创建和销毁,因此栈帧指针会变动
  • X30(LR):用于存储函数调用返回地址,即函数执行完毕后应该继续执行的下一条指令的地址,这个地址会被加载到程序计数器(PC)中,从而跳回到函数原点继续执行后面的指令
特殊寄存器(Special Registers)
  • X31(XZR):零寄存器,值恒为0,用于一些特定操作,如清零或与零比较
  • PC:程序计数器,用于存储当前需要执行的指令的地址
汇编语言
notion image
机器语言
为了满足不同的操作需求和优化指令的执行效率,机器语言的指令格式被区分了多种类型,其中
R型指令格式:用于表示寄存器之间的操作。适用于仅涉及寄存器操作的指令,如加法、逻辑运算等
opcode:指令操作
Rm:第二源寄存器
shamt:位移量
Rn:第一源寄存器
Rd:目标寄存器
11位
5位
6位
5位
5位
例:将 ADD X9,X20,X21 转为二进制机器语言
10001011000
10101
000000
10100
01001
ADD操作码
寄存器X21
位移0
寄存器X29
寄存器X9
D型指令格式:用于表示寄存器和常数值之间的操作。适用于使用常数或即时数据的指令,如加载、存储和立即数运算等
opcode:指令操作
address:偏移量
op2:操作扩展
Rn:源寄存器
Rt:目标寄存器
11位
9位
2位
5位
5位
例:将 LDUR X9,[X10,#240] 转为二进制机器语言
11111000010
011110000
00
01010
01001
LDUR操作码
基址偏移量
基址寄存器X10
寄存器X9
除了R型、D型,还有I型、B型、J型、S型、U型等

内存管理

低地址
高地址
空闲
代码段
静态数据
动态数据(堆)
→向高地址增长
←向低地址增长
堆和栈此消彼长
 
上一篇
TCP/IP协议
下一篇
个人简历