seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^

Participe do fórum, é rápido e fácil

seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

[Assembly] Hello World!

2 participantes

Ir para baixo  Mensagem [Página 1 de 1]

1[Assembly] Hello World! Empty [Assembly] Hello World! Sex Ago 10, 2012 7:37 pm

[BaKa]

[BaKa]
novato
novato

Bom pra quem ta começando com assembly, como outras linguagens, um programa básico é o Olá Mundo/Hello World, vou explicar por partes e depois o código comentado.

Antes de partimos para o código em si, precisamos passar alguns "parametros"/"diretivas" para nosso assembler (usaremos o masm32), tais como, a qual processador se refere, modelo de memória, variáveis, etc. Resumindo,

- A primeira diretiva é o modelo do processador, por exemplo:
Código:

.386 -> Para processadores 80386
.486 -> Para processadores 80486

- Em seguida, vamos especificar o modelo de memória juntamenta com o "modelo de passagem de parâmetros", no caso usaremos MODEL FLAT, como modelo contínuo e STDCALL(StandartCall) para passagem de parâmetros, este modelo é uma mescla entre os usados em C e em Pascal. Exemplo:
Código:

.MODEL FLAT,STDCALL

- Como vamos usar API's em nosso programa, precisamos declarar as lib's as quais elas pertencem, por exemplo, a 'MessageBox' pertence a user32, então temos que declará-la, aqui usamos includelib \endereço_da_lib\. Junto com as lib's, precisamos usar a diretiva include, para cobrir a declaração de funções, assim poderemos chamá-las através do 'invoke'. Exemplo:
Código:

includelib \masm32\lib\kernel32.lib        ;Para a ExitProcess()
includelib \masm32\lib\user32.lib            ;Para a MessageBox()
include    \masm32\include\kernel32.inc
include    \masm32\include\user32.inc
include    \masm32\include\windows.inc

OBS: A vantagem das API's é que elas são importadas em tempo de execução, o que decha o programa bem mais leve.

- Agora nos resta declarar as variáveis e por fim o código. As variáveis com valores iniciais vão na diretiva .DATA, as sem valores iniciais vão na .DATA?, por fim as consantes vão na .CONST. No nosso caso usaremos somente a .DATA, para passar o texto e o título da MessageBox. Exemplo:
Código:

.DATA
    ;Suas variáveis inicializadas
.DATA?
    ;Suas variáveis não inicializadas
.CONST
    ;Suas constantes

- Agora sim, chegamos ao código em si. Este fica na diretiva .CODE e para delimitar o início e o fim do código usamos por padrão 'inicio:' e 'end inicio'. Exemplo:
Código:

.CODE
      inicio:
          ;Seu código aqui
      end inicio


Usaremos, neste caso, as API's MessageBox() para chamar a caixa de mensagem e a ExitProcess para finalizar. Para conferir os parâmetros destas API's recomendo consultar na msdn.

Código completo comentado:

Código:

.386                ;Para processadores 80386
.MODEL FLAT, STDCALL    ;Modelo de memória FLAT, contínuo e StandartCall para       
                                ;passagem de parâmetros das funções e posterior ajuste da pilha
option casemap:none  ;Para trabalharmos sem problemas com maiúsculas e minúsculas

includelib \masm32\lib\kernel32.lib        ;Incluindo as lib's das API's que usaremos
includelib \masm32\lib\user32.lib           
include    \masm32\include\kernel32.inc
include    \masm32\include\user32.inc
include    \masm32\include\windows.inc

.DATA
    Texto db "Hello World",0    ;Variável Texto guardando o texto da msg
    Titulo db "Titulo da mensagem",0    ;Variável Titulo guardando o titulo da msg
.CODE
      inicio:
          invoke MessageBox, NULL, ADDR Texto, ADDR Titulo, MB_OK                        ;Chamando a API da mensagem com seus parâmetros
          invoke ExitProcess,0   
;Finalizando
      end inicio

É isso aew, dúvidas/sugestões/críticas ?

2[Assembly] Hello World! Empty Re: [Assembly] Hello World! Dom Ago 12, 2012 5:02 am

Kodo no Kami

Kodo no Kami
master
master

boa mano, muito show o tutorial *-*

https://endoffile.umforum.net

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos