Primeiros passos com montagem

Índice
conjunto é uma linguagem de baixo nível cuja função é fornecer todos os elementos necessários para a programação da arquitetura de desktops ou laptops. Sua curva de aprendizado é um pouco íngreme e poucos conceitos podem ser aplicados a partir de linguagens de alto nível, como Python, Ruby ou JavaNo entanto, é a linguagem mais poderosa para arquiteturas de programação baseadas em x64.
Apesar de ser uma linguagem complexa, em suas versões mais atuais deixa de lado o uso de hexadecimais e os substitui por convenções de nomenclatura mais fáceis de lembrar e ler, além de possuir características superiores como permitir o uso de macros e inclusão definidas pelo usuário tipos de dados.
Quando o processo de desenvolvimento termina, essas linhas de código são lidas pelo programa de montagem e, em seguida, traduzidas em código de máquina por um processo semelhante ao de compilação em linguagens de alto nível, mas aqui é chamado Junte.
Para os fins deste tutorial, veremos em primeira instância como é o processo de codificação em 32 bits, uma vez que é uma etapa fundamental para alcançar uma maior compreensão da linguagem e do processo de codificação nas aplicações de 64 bits, isso por compartilhar muitas características com a arquitetura x86 64 bits.
Existem muitas maneiras de começar a codificar conjunto para aplicativos de 32 bits, mas uma das maneiras mais fáceis e práticas de fazer isso é por Estúdio visual uma vez que tem algo chamado montado online onde o código de conjunto está embutido em C ++ normal e atual, isso pode ser feito em uma única linha ou em blocos de código com a palavra reservada __asm.
ImportanteA palavra-chave __asm ​​pode ser usada com um único sublinhado. Esta é uma diretiva antiga usada para garantir a compatibilidade em aplicativos menos modernos.
Tendo esclarecido isso, a primeira coisa que devemos fazer é obter Estúdio visual, para este tutorial usamos a versão Expressar no entanto, o código é válido em ambas as versões do SDI. Baixamos no seguinte link o nosso SDI e executamos no instalador:

Depois que o processo de instalação terminar, podemos começar a codificar em conjunto, para isso, faremos um pequeno exemplo onde demonstraremos como podemos incorporar o código de conjunto em C ++ com a palavra reservada __asm, onde qualquer segmento de código próximo a esta palavra será tratado como código nativo de conjunto pelo compilador C ++.
Abrimos nosso Visual Studio e criamos um novo projeto do tipo Aplicativo de console Win32, nós empurramos OK e o assistente de criação de projetos será exibido, que nos perguntará que tipo de projeto queremos e se queremos um vazio, recomendamos deixar todas as opções padrão e pressionar Finalizar:

PROLONGAR

O assistente criará um código base para nosso projeto, que conterá uma biblioteca e o método principal, deve ser semelhante a este:
 #include "stdafx.h" int _tmain (int argc, _TCHAR * argv []) {return 0;}
Tendo o código base agora, precisamos adicionar nossa linha de conjunto, além disso, devemos adicionar a biblioteca para poder imprimir por console e o namespace para que tudo funcione corretamente, vamos ver o código final:
 #include "stdafx.h" #include usando namespace std; int _tmain (int argc, _TCHAR * argv []) {int x = 0; _asm mov x, 25 cout << "O valor para x é:" <<>
O que fizemos aqui é definir uma variável chamada x e, em seguida, por meio de código conjunto atribuímos a ele o valor de 25, para finalmente imprimi-lo com cout, como podemos ver, é um processo bastante simples incorporar o Código de montagem, agora só precisamos executar nosso pequeno programa, para isso podemos pressionar Ctrl + F5 onde nosso programa será compilado e executado, vamos ver como é essa operação:

PROLONGAR

Além disso, podemos incluir várias linhas de código de conjunto em nosso código C ++, que podemos alcançar colocando a palavra reservada __asm e abrindo um bloco de código, vamos ver como conseguimos isso:
 float Sqrt (float f) {__asm ​​{fld f // Coloca f na pilha de operações fsqrt // Calcula sqrt}}
Vantagens da montagem em linhaHá muitos benefícios em usar assembly embutido em vez de um aplicativo nativo de 32 bits do conjunto, por exemplo, o envio de parâmetros para as funções é totalmente gerenciado pelo compilador de C ++ e ele injetará a quantidade exata de código de máquina para que não tenhamos que nos preocupar com um estouro de memória ou algo parecido.
Mas assim como temos vantagens, também encontramos desvantagens nessa forma de codificação, uma delas é que o desenvolvedor perde um pouco do controle sobre a aplicação, como manipular a pilha ou até mesmo definir suas próprias convenções.
O assembly online oferece muita flexibilidade e nos permite entrar neste mundo de forma rápida e fácil, mas este método de codificação impede que os desenvolvedores acessem alguns elementos do Assembly, por isso é comum adicionar código nativo e separado ao nosso projeto.
Para isso, precisamos criar nossos arquivos separadamente e, em seguida, incluir os métodos de que precisamos, para atingir nosso objetivo, vamos seguir os seguintes passos:
1- Primeiro criamos um novo projeto, pode ser um projeto do tipo C ++ ou de aplicativo windows, ambos trabalham para adicionar os arquivos de conjunto.
2- Nós adicionamos um arquivo C ++ ao nosso projeto que chamaremos principal.cpp que se encarregará de chamar um procedimento de nosso arquivo conjunto enviando um array de valores numéricos e depois imprimindo o que este procedimento retorna, vamos ver o conteúdo do nosso arquivo principal.cpp:
 #include usando namespace std; extern "C" int findMinorNum (int * i, int count); int main () {int arr [] = {4, 2, 6, 4, 5, 1, 8, 9, 5, -5}; cout << "O menor número é:" << findMinorNum (arr, 10) << endl; cin.get (); return 0;}
3- Em seguida, clicamos com o botão direito em nosso projeto, ele se encontra do lado direito de nossa interface, na seção de Explorador de Soluções. Nós selecionamos o Dependências de construção e logo Crie personalizações. Fazemos isso para estabelecer como o Visual Studio tratará os arquivos com a extensão .asmUma vez que não queremos que o compilador C ++ compile esses arquivos, nosso objetivo é que o VS forneça esses arquivos para MAIS M para que eu os monte e depois esses arquivos vinculados ao nosso C ++ ficarão responsáveis ​​por formar o executável final.
4- Para finalizar com as dependências, selecionamos a opção de mais M como podemos ver na imagem a seguir:

PROLONGAR

É importante realizar esta etapa antes de adicionar qualquer arquivo com código Assembly como Estúdio visual atribui o que um arquivo precisa fazer quando é criado e não quando é compilado.
5- Então precisamos adicionar outro arquivo C ++, mas desta vez com a extensão .asm, para este tutorial eu chamei de assembler.asm. Da mesma forma, podemos colocar qualquer nome nele, exceto main.asm, uma vez que o compilador pode ter problemas para localizar onde seu método principal está.
6- Nosso arquivo assembler.asm Será responsável por calcular a partir de uma série de valores numéricos qual é o menor valor entre estes e então C ++ Ele se encarregará de receber o valor para processá-lo através do cout, vamos ver o conteúdo do nosso arquivo:
; assembler.asm.xmm.model flat, c.data.code findNumMenor proc exportmov edx, dword ptr [esp + 4]; mov ecx, dword ptr [esp + 8]; mov eax, 7fffffffh; cmp ecx, 0; jle Concluído; MainLoop: cmp dword ptr [edx], eax; cmovl eax, dword ptr [edx]; adicionar edx, 4; dec ecx; jnz MainLoop; Concluído: ret; findNumMinor endpend
Isso nos permite separar nossos arquivos, bem como nossa lógica. A realização deste tipo de procedimentos baseados em 32 bits é muito pouco utilizada mas é importante conhecer todas as suas implicações, vamos ver agora como alteramos o nosso código para uma aplicação de 64 bits bem como as etapas que precisamos tomar para adaptar nosso ambiente de Estúdio visual.
O Visual Studio inclui todas as ferramentas necessárias para adicionar o assembly nativo ao nosso projeto em C ++, mas trabalhar com base em 64 bits precisamos fazer algumas configurações adicionais para nosso projeto, vamos ver:
1- As etapas para realizar este tipo de codificação são semelhantes ao nosso exemplo anterior, mas para se adaptar VS nós vamos para a opção Construir e nós selecionamos Gerenciador de configuração:

2- Na tela do gerenciador de configuração vamos selecionar a opção Novo ou novo na coluna da plataforma, que exibirá uma segunda tela para selecionar a plataforma do projeto, selecionamos x64 e na opção Copiar configurações de deixamos selecionada a opção de Win32. Isso vai fazer VS alterar caminhos de versão de 32 bits do MAIS M para aquele de 64, então todo o trabalho será feito pelo IDE.

PROLONGAR

3- Feito isso, podemos compilar nosso código e executá-lo, porém devemos modificar nosso arquivo conjunto já que estamos trabalhando em diferentes arquiteturas, vamos ver o novo código para nosso arquivo:
; Listagem: assembler.asm .code; int findMinorNum (int * arr, int contagem) FindSmallest proc; mov eax, 7fffffffh; cmp edx, 0; jle Concluído; MainLoop: cmp dword ptr [rcx], eax; cmovl eax, dword ptr [rcx]; adicione rcx, 4; dec edx; jnz MainLoop; Terminado: ret; FindSmallest endp; fim;
Com isso terminamos este tutorial, já demos uma primeira olhada na programação com conjunto, pode parecer um pouco complexo no início, mas com um domínio adequado de C ++ e noções básicas de linguagem de máquina, podemos alcançar coisas interessantes e úteis em nossos desenvolvimentos.Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave