Pesquisa sobre "zerar" um registrador #10

Open
opened 2025-07-19 23:26:29 -03:00 by NRZCode · 0 comments

Na aula passada comentamos sobre "zerar", limpar, atribuir valor zero a um registrador, e eu pesquisei algumas formas comuns de realizar essa operação.

1. xor reg, reg — A forma mais comum e eficiente

xor rax, rax
  • Zera o registrador fazendo XOR com ele mesmo.
  • Vantagens:
    • Instrução curta
    • Não usa imediato
    • Não depende do valor anterior (evita stalls de pipeline)
    • Muito usada por compiladores (GCC, Clang)
  • Desvantagem:
    • Afeta flags (ZF, SF, etc.)

2. sub reg, reg — Funciona, mas pouco usada

sub rbx, rbx
  • Subtrai o registrador por ele mesmo.
  • Desvantagem: mais lenta e sem vantagem real sobre xor

3. mov reg, 0 — Mais claro, mas menos eficiente

mov rcx, 0
  • Vantagem: clareza semântica.
  • Desvantagem: usa imediato, pode ser mais lenta e depende do estado anterior.

4. and reg, 0 — Alternativa incomum

and rdx, 0
  • Garante zero, mas não tem vantagem prática sobre xor.

📋 Tabela comparativa

Instrução Zera? Afeta Flags Rápida? Comentário
xor reg, reg A forma mais comum e otimizada
sub reg, reg ⚠️ Funciona, mas menos eficiente
mov reg, 0 ⚠️ Mais clara, porém pode ser mais lenta
and reg, 0 Sem ganho prático

As flags afetadas entre as operações xor reg, reg e sub reg, reg

Flag xor reg, reg sub reg, reg Comentário
ZF Resultado é zero em ambos
SF Resultado não negativo
OF Nenhum overflow ocorre
CF (mas "ativo") sub é semântica de subtração, não "limpeza"
PF Paridade par

🧪 Comparativo prático (ciclos)

Instrução Ciclos aproximados Notas
xor rax, rax 1 Superscalar, eficiente
mov rax, 0 1–2 Depende da decodificação
imul rax, 0 3–10+ Muito mais lenta
Na aula passada comentamos sobre "zerar", limpar, atribuir valor zero a um registrador, e eu pesquisei algumas formas comuns de realizar essa operação. ### 1. `xor reg, reg` — A forma mais comum e eficiente ```asm xor rax, rax ``` - Zera o registrador fazendo XOR com ele mesmo. - **Vantagens**: - Instrução curta - Não usa imediato - Não depende do valor anterior (evita stalls de pipeline) - Muito usada por compiladores (GCC, Clang) - **Desvantagem**: - Afeta flags (ZF, SF, etc.) --- ### 2. `sub reg, reg` — Funciona, mas pouco usada ```asm sub rbx, rbx ``` - Subtrai o registrador por ele mesmo. - **Desvantagem**: mais lenta e sem vantagem real sobre `xor` --- ### 3. `mov reg, 0` — Mais claro, mas menos eficiente ```asm mov rcx, 0 ``` - **Vantagem**: clareza semântica. - **Desvantagem**: usa imediato, pode ser mais lenta e depende do estado anterior. --- ### 4. `and reg, 0` — Alternativa incomum ```asm and rdx, 0 ``` - Garante zero, mas não tem vantagem prática sobre `xor`. --- ## 📋 Tabela comparativa | Instrução | Zera? | Afeta Flags | Rápida? | Comentário | |---------------------|-------|-------------|---------|-------------------------------------| | `xor reg, reg` | ✅ | ✅ | ✅ | A forma mais comum e otimizada | | `sub reg, reg` | ✅ | ✅ | ⚠️ | Funciona, mas menos eficiente | | `mov reg, 0` | ✅ | ❌ | ⚠️ | Mais clara, porém pode ser mais lenta | | `and reg, 0` | ✅ | ✅ | ❌ | Sem ganho prático | --- ## As flags afetadas entre as operações `xor reg, reg` e `sub reg, reg` | Flag | `xor reg, reg` | `sub reg, reg` | Comentário | | ---- | -------------- | --------------- | ------------------------------------------------- | | ZF | ✅ | ✅ | Resultado é zero em ambos | | SF | ❌ | ❌ | Resultado não negativo | | OF | ❌ | ❌ | Nenhum overflow ocorre | | CF | ❌ | ❌ (mas "ativo") | `sub` é semântica de **subtração**, não "limpeza" | | PF | ✅ | ✅ | Paridade par | --- ## 🧪 Comparativo prático (ciclos) | Instrução | Ciclos aproximados | Notas | | -------------- | ------------------ | ------------------------ | | `xor rax, rax` | 1 | Superscalar, eficiente | | `mov rax, 0` | 1–2 | Depende da decodificação | | `imul rax, 0` | 3–10+ | Muito mais lenta |
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: blau_araujo/pbn#10
No description provided.