AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79118695
Accepted
Dess
Dess
Asked: 2024-10-23 23:47:09 +0800 CST2024-10-23 23:47:09 +0800 CST 2024-10-23 23:47:09 +0800 CST

Para que é usado o modo de endereçamento [IndexReg * ScaleFactor + Offset]?

  • 772

Na montagem X86, que tipo de operações usam o modo de endereçamento com este formato?

IndexReg * ScaleFactor + Offset

mov rax, [r15 * 8 + 56]
assembly
  • 1 1 respostas
  • 43 Views

1 respostas

  • Voted
  1. Best Answer
    Peter Cordes
    2024-10-24T00:31:27+08:002024-10-24T00:31:27+08:00

    Normalmente, sendo disp32o endereço absoluto de uma matriz, como mov eax, [arr + rdi*4], não uma pequena constante inteira como seu 56.

    Isso sempre foi possível no modo de 16 e 32 bits, mas no modo de 64 bits só é possível para modelos de código não PIE, onde dados estáticos estão nos 2 GiB inferiores ou superiores do espaço de endereço virtual. (Consulte Endereços absolutos de 32 bits não são mais permitidos no Linux x86-64? / O formato Mach-O de 64 bits não oferece suporte a endereços absolutos de 32 bits. Acessando o Array NASM )

    Outros casos de uso incluem LEA para deslocar e adicionar como lea eax, [rdi*8 + 56].


    Em teoria, você poderia usá-lo para iterar por uma matriz alinhada onde o registrador escalonado contém o endereço/8, talvez em um loop usando também esse valor como um deslocamento de byte em uma matriz de elementos menores como [rbx + rdi].

    Observe que ele só pode ser codificado com 4 bytes, disp32não com 1 byte disp8( https://wiki.osdev.org/X86-64_Instruction_Encoding#SIB ), então o formato de código de máquina não incentiva usos como os seus [r15*8 + 56]modos de endereçamento .x86 sempre têm um registrador base e/ou um disp32 que poderia (antes do modo de 64 bits) conter um endereço absoluto do início de uma matriz.

    Veja Referenciando o conteúdo de um local de memória. (modos de endereçamento x86) para exemplos de casos de uso para cada modo de endereçamento x86. (Embora não tente ser exaustivo para cobrir todas as maneiras de usar cada modo de endereçamento.)

    • 2

relate perguntas

  • x86 - mudando de 32 bits para 64 bits via RETF

  • Opcode não reconhecido em instruções de montagem de ponto flutuante para Xiao ESP32-C3 (baseado em RISC-V)

  • Como usar o GNU Assembler (GAS) para criar um arquivo ELF escrito à mão a partir do arquivo .s correspondente

  • Não consigo ler o registro LY do gameboy

  • Obtenha o valor do parâmetro no Assembly

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve