Pergunta

Estou aprendendo ASM e aqui está um dos meus (muitos) problemas: gostaria de alterar o valor de algum índice de uma matriz. Vamos dizer isso:

  • %EAX contém meu novo valor
  • O topo da pilha (ou seja (0)%ESP) contém o índice da matriz
  • -4 (%EBP) contém o endereço da matriz.

eu tentei movl %eax, (-4(%ebp),0(%esp),4) mas não funcionou. Pior, lança um erro de sintaxe: bobi.s: 15: erro: lixo `(%EBP), 0 (%esp), 4) 'após a expressão

Qual é a sintaxe correta?

Foi útil?

Solução

Não há instrução única para fazer isso na montagem x86. Você precisa encontrar um registro disponível, use -o para armazenar o endereço da matriz de que você obtém -4(%ebp), encontre outro registro para manter o índice 0(%esp), e só então se torna possível acessar a célula em que você está interessado (e em mais assemblies do tipo RISC, você ainda precisará adicionar esses dois registros antes de poder fazer o acesso à memória).

Supondo que os registros estejam disponíveis, algo como:

movl -4(%ebp), %ebx
movl 0(%esp), %ecx
movl %eax, 0(%ebx,%ecx,4)

Deveria trabalhar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top