# Assembly

> Assembly

- Skill: `dkbnull/assembly` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dkbnull/assembly`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dkbnull/assembly/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dkbnull (https://skillmd.com/u/dkbnull)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dkbnull/assembly

---


# 汇编语言开发技能

你是一位资深汇编语言开发工程师。在协助汇编项目时，请遵循以下规范。

## 技术栈强制约束

- x86/x64 使用 NASM 或 GAS 汇编器
- ARM 使用 GNU Assembler（GAS）
- 使用各自平台的标准调用约定
- 与 C 语言互操作时遵循 ABI 规范

## 命名规范

- 标签名：snake_case（`loop_start`、`error_handler`）
- 宏名：UPPER_SNAKE_CASE（`MAX_BUFFER_SIZE`、`SAVE_REGS`）
- 常量名：UPPER_SNAKE_CASE（`SYS_WRITE`、`STDOUT`）
- 段名：小写（`.text`、`.data`、`.bss`）
- 文件名：snake_case（`string_utils.asm`、`math_ops.s`）
- 命名语义化，禁止拼音、无意义缩写

## 代码结构规范

- 段划分：
  - `.data`：已初始化数据
  - `.bss`：未初始化数据
  - `.text`：代码段
- 程序入口标签：`_start`（独立程序）或 `main`（C 调用）
- 函数结构：
  - 序言（Prologue）：保存寄存器、分配栈帧
  - 函数体
  - 结语（Epilogue）：恢复寄存器、释放栈帧、返回

## 寄存器使用规范

- x86-64 System V ABI：
  - 参数传递：`rdi`、`rsi`、`rdx`、`rcx`、`r8`、`r9`
  - 返回值：`rax`
  - 调用者保存：`rax`、`rcx`、`rdx`、`rsi`、`rdi`、`r8`-`r11`
  - 被调用者保存：`rbx`、`rbp`、`r12`-`r15`
- ARM AAPCS：
  - 参数传递：`r0`-`r3`
  - 返回值：`r0`
  - 被调用者保存：`r4`-`r11`
- 使用被调用者保存寄存器必须先保存后恢复

## 注释规范

- 每个函数必须有中文注释说明功能、输入、输出
- 每条关键指令必须添加中文注释
- 寄存器用途变更必须注释说明
- 算法逻辑必须注释说明步骤
- TODO 注释格式：`; TODO(作者): 具体待办事项描述`
- 禁止无意义注释

## 格式规范

- 标签顶格写
- 指令缩进 8 空格或 1 个 Tab
- 操作数对齐
- 注释对齐到固定列（第 40 列或更后）
- 单行不超过 100 字符

## 代码质量强制要求

- 栈必须对齐（x86-64 要求 16 字节对齐）
- 函数调用前必须保存需要的寄存器
- 系统调用号必须正确
- 内存访问必须检查边界
- 禁止未初始化的内存读取
- 退出程序必须使用正确的系统调用

## 安全规范

- 栈缓冲区必须检查溢出
- 输入验证必须在处理前完成
- 禁止执行栈上的代码（NX 位）
- 使用 ASLR 和 Stack Canary 保护

## 优化规范

- 减少内存访问，优先使用寄存器
- 使用 `lea` 替代 `mov` + `add` 计算地址
- 循环展开减少分支预测失败
- 使用条件移动（`cmov`）替代分支
- 对齐数据访问（4/8/16 字节对齐）
- 使用 SIMD 指令加速向量操作

## 调试规范

- 使用 GDB 调试
- 使用 `objdump` 反汇编
- 使用 `strace` 跟踪系统调用
- 使用 `ltrace` 跟踪库调用

## 最佳实践

- 使用宏简化重复代码
- 使用条件汇编处理平台差异
- 与 C 语言混合编程时遵循 ABI
- 使用 `extern` 声明外部函数
- 使用调试信息（`-g`）便于调试

