linux汇编(ARM64)
linux汇编(ARM64)
quad
arm64汇编代码里(.S)的.quad,表示4个word,即8个字节
memset/__memset函数实现
这两个函数都是汇编函数,在如下路径里的.S文件里实现:
4.19\arch\arm64\lib\memset.S
misc
一. 带点的(一般都是ARM GNU伪汇编指令)
依次表示的是
“以下是代码段”,
“以下是初始化数据段”,
“以下是未初始化数据段”。
定义一个全局符号,通常是为ld使用。比如经常看到的
.global _start
3.".ascii"、".byte"、".short"、".int"、".long"、".word"、".quad"
定义一个字符串,并为它分配空间
定义一个字节,并为它分配空间,占单字节,0x34
定义一个短整型,并为它分配空间,占双字节,0x1234
定义一个整型,并为它分配空间,占四字节,0x12345678
定义一个长整型,并为它分配空间,占四字节,0x12345678
定义一个字,并为它分配空间,
定义一个,并为它分配定义,占八字节,...
比如
.long 0x22011110//BWSCON
.long 0x00000700//BANKCON0
...
停止汇编
.align absexpr1,absexpr2
以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16或32. 第二个表达式值表示填充的值
.if
.else
.endif:支持条件预编译
.include "file":包含指定的头文件, 可以把一个汇编常量定义放在头文件中
.comm symbol, length:
在bss段申请一段命名空间,该段空间的名称叫symbol, 长度为length. Ld连接器在连接会为它留出空间
.equ symbol, expression: 把某一个符号(symbol)定义成某一个值(expression).该指令并不分配空间,相当于C语言中的#define。例如
.equ aaa,0x20000000
.macro: 定义一段宏代码,.macro表示代码的开始,.endm表示代码的结束,.exitm跳出宏, 示例如下:
.macro SHIFTLEFT a, b.if \b < 0
mov \a, \a, ASR #-\b
.exitm
.endif
mov \a, \a, LSL #\b
.endm
11.".req"
name .req register name: 为寄存器定义一个别名
.code [16|32]: 指定指令代码产生的长度, 16表示Thumb指令, 32表示ARM指令
.ltorg: 表示当前往下的定义在归于当前段,并为之分配空间
汇编程序的缺省入口,但是可以更改,想要更改其他标志,到相应的链接脚本中去用ENTRY指明其他入口标志。标号可以直接认为是地址。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析