Skip to content
Back to skills

Lang Assembly X64

ASecurity

Fornece padrões de engenharia de software e programação em Assembly x86_64 (Linux POSIX e Windows x64) baseado nas obras The Assembly Language Reimagined (John Schwartzman) e Assembly Programming Language For Beginners (Panchtilak, Kavishankar). Cobre sintaxe Intel e AT&T, registradores de uso geral e SIMD (AVX/SSE), chamadas de sistema diretas (syscalls), System V AMD64 ABI, manipulação de pilha, flags do CPU, modos de endereçamento, instruções de strings, procedures/recursion/macros e otimi...

  • 10 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 8, 2026
developmentgo

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add dandgabr/skills --skill lang-assembly-x64 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Lang Assembly X64?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Lang Assembly X64
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/dandgabr-lang-assembly-x64/badge)](https://www.skillsdirectory.com/skills/dandgabr-lang-assembly-x64)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: lang-assembly-x64
description: Fornece padrões de engenharia de software e programação em Assembly x86_64 (Linux POSIX e Windows x64) baseado nas obras The Assembly Language Reimagined (John Schwartzman) e Assembly Programming Language For Beginners (Panchtilak, Kavishankar). Cobre sintaxe Intel e AT&T, registradores de uso geral e SIMD (AVX/SSE), chamadas de sistema diretas (syscalls), System V AMD64 ABI, manipulação de pilha, flags do CPU, modos de endereçamento, instruções de strings, procedures/recursion/macros e otimização de baixo nível.
---

# Engenharia em Assembly x86_64 (Intel 64 / AMD64)

Esta skill estabelece diretrizes e convenções de código limpo para desenvolvimento em **Assembly x86_64** (NASM/Yasm e GCC/GAS), cobrindo registradores, convenções de chamada de funções (ABIs), manipulação de ponteiros e chamadas de sistema no Linux.

> 📖 **Referência canônica**: consulte [references/assembly-beginners-guide.md](references/assembly-beginners-guide.md) para os fundamentos da obra *Assembly Programming Language For Beginners* (Panchtilak, Kavishankar) — modelo de memória segmentado (.data/.bss/.text/stack), registradores IA-32, flags do CPU (ZF/CF/OF/SF/DF), modos de endereçamento (register/immediate/direct/direct-offset/indirect), instruções essenciais de aritmética/lógica/controle, instruções de strings com prefixos de repetição (MOVS/LODS/STOS/CMPS/SCAS + REP), procedures e stack (PUSH/POP/CALL/RET), recursion (condição de término), macros, syscalls Linux `int 0x80` (tabela sys_exit/sys_fork/sys_read/sys_write/sys_open/sys_close), file handling e alocação dinâmica com `sys_brk`.

---

## 💻 1. Registradores da Arquitetura x86_64

| 64-bit | 32-bit | 16-bit | 8-bit (Low/High) | Papel na System V ABI (Linux) |
| :--- | :--- | :--- | :--- | :--- |
| `rax` | `eax` | `ax` | `al` / `ah` | Valor de retorno de funções / Syscall Number |
| `rdi` | `edi` | `di` | `dil` | 1º Argumento de função |
| `rsi` | `esi` | `si` | `sil` | 2º Argumento de função |
| `rdx` | `edx` | `dx` | `dl` / `dh` | 3º Argumento de função |
| `rcx` | `ecx` | `cx` | `cl` / `ch` | 4º Argumento de função (ou `r10` em syscalls) |
| `r8`  | `r8d` | `r8w`| `r8b` | 5º Argumento de função |
| `r9`  | `r9d` | `r9w`| `r9b` | 6º Argumento de função |
| `rsp` | `esp` | `sp` | `spl` | Stack Pointer (Ponteiro do topo da pilha) |
| `rbp` | `ebp` | `bp` | `bpl` | Base Pointer (Ponteiro do frame da função) |

---

## 🛠️ 2. Exemplo: Hello World Puro em NASM (Linux Syscalls)

```nasm
section .rodata
    msg db "Hello, x86_64 Assembly!", 0x0A
    len equ $ - msg

section .text
    global _start

_start:
    ; write(1, msg, len)
    mov rax, 1          ; syscall: sys_write
    mov rdi, 1          ; fd: stdout
    lea rsi, [rel msg]  ; buffer address (Position-Independent)
    mov rdx, len        ; count
    syscall

    ; exit(0)
    mov rax, 60         ; syscall: sys_exit
    xor rdi, rdi        ; status: 0
    syscall
```

---

## 🏁 Fundamentos Adicionais (Panchtilak)

Extraído da obra *Assembly Programming Language For Beginners* (adaptado de IA-32 para x86_64 onde aplicável):

- **Modelo de memória segmentado**: `.data` (estáticos, tamanho fixo), `.bss` (buffers zero-filled com `RESB`/`TIMES`), `.text` (código) e stack — transpõe para `.rodata`/`.data`/`.bss`/`.text` do x86_64.
- **Registradores de dados** com papéis canônicos: `AX` (accumulator — E/S e aritmética), `BX` (base — endereçamento indexado), `CX` (count — loops), `DX` (E/S e par `DX:AX` em multiply/divide). Em x86_64: `RAX`, `RBX`, `RCX`, `RDX`.
- **Flags essenciais**: `ZF` (resultado zero), `CF` (carry unsigned), `OF` (overflow signed), `SF` (sinal), `DF` (direção de strings via `STD`/`CLD`), `TF` (single-step debug), `IF` (interrupções).
- **Idiomas comuns**: `XOR EAX, EAX` para zerar; `TEST`/`CMP` + `JZ`/`JE`/`JNZ` para desvios condicionais baseados em flags.
- **Modos de endereçamento**: register (mais rápido, sem memória), immediate (constante), direct (variável nomeada — symbol table), direct-offset (`TABLE[2]` / `TABLE + 2` para tabelas), indirect (base/index em colchetes — `MOV EBX, [MY_TABLE]` + `ADD EBX, 2` para arrays).
- **Instruções de strings** com pares `DS:SI`/`ES:DI` e sufixos B/W/D: `MOVS`, `LODS`, `STOS`, `CMPS`, `SCAS`; repetição com `REP`/`REPE`/`REPNE` condicionada a `CX`.
- **Procedures**: `CALL proc_name` + `RET`; stack LIFO via `PUSH`/`POP` (`SS:ESP`); recursion exige condição de término (ex.: factorial `Fact(n) = n * fact(n-1)`, parando em `n == 0`).
- **Macros** (`%macro` em NASM) expandem textualmente em cada uso — prefira procedures quando o corpo for grande (menos código gerado).
- **Syscalls IA-32 (`int 0x80`)**: número em `EAX`, argumentos em `EBX`/`ECX`/`EDX`/`ESI`/`EDI`/`EBP`, resultado em `EAX`. Em x86_64 use `syscall` com números distintos (ex.: `sys_write=1`, `sys_exit=60`) e argumentos em `RDI`/`RSI`/`RDX` — ver tabela de registradores acima.
- **File handling**: `sys_creat` (8), `sys_open` (5), `sys_write` (4), `sys_close` (6); leitura com `sys_read` (3) em buffers `.bss`.
- **Alocação dinâmica com `sys_brk` (45)**: estende a quebra de dados em `EBX` (endereço atual → atual + tamanho); preencha blocos com `REP STOSD` + `STD`/`CLD`.

Files in this skill

  • SKILL.md5.2 KB
  • examples/table_lookup.md2.2 KB
  • references/assembly-beginners-guide.md8.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…