Redescobrindo Assembly

Passo a passo para escrever uma função em Assembly e executá-la a partir do C++ (usando o VS2019)

Uma das formas mais fáceis, hoje em dia, de começar a escrever código em Assembly é criando funções para programas em C++.

Para escrever uma função, em assembly, para ser executada em C++:

  1. abra uma nova instância do Visual Studio 2019 e inicie um Empty Project (C++) (chame-o MyFirstASMFunction)
  2. clique com o botão direito no nó do projeto na janela Solution Explorer
  3. clique em Build Dependencies > Build Customizations...
  4. habilite a opção masm
  5. clique em OK
  6. adicione um arquivo chamado main.cpp ao projeto
  7. adicione um arquivo chamado addInAsm.asm ao projeto

O código necessário em C++ é bem simples e deve ser colado em main.cpp. Ele apenas faz a chamada para o código Assembly que desejamos executar.

#include <iostream>

extern "C" int addInAsm(int a, int b);

int main() {
	int a = 2;
	int b = 3;

	int result = addInAsm(a, b);

	std::cout << a << " + " << b << " = " << result << std::endl;
	return 0;
}

A função em Assembly, no nosso exemplo, que iremos escrever receberá dois números e irá retornar a soma (o código deve ser colado em addInAsm.asm)

    .model flat, c
    .code

addInAsm proc 

; Initialize a stack frame pointer  
    push ebp
    mov  ebp, esp

; load the paramaters 
    mov  eax, [ebp + 8]    ; eax = a
    mov  ecx, [ebp + 12]   ; ecx = b

;
    add  eax, ecx         

; restore the stack frame
    pop  ebp
    ret

addInAsm endp

    end

Executando o programa, podemos confirmar que tudo está funcionando bem e que a função que escrevemos em assembly foi corretamente executada.

Elemar Júnior

Microsoft Regional Director e Microsoft MVP. Atua, há mais de duas décadas, desenvolvendo software e negócios digitais de classe mundial. Teve o privilégio de ajudar a mudar a forma como o Brasil vende, projeta e produz móveis através de software. Hoje, seus interesses técnicos são arquiteturas escaláveis. bancos de dados e ferramentas de integração. Além disso, é fascinado por estratégia e organizações exponenciais.

Talvez você goste também

Carregando posts…

Mais posts da série Redescobrindo Assembly

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *