Primeiro programa em Assembly - Como fazer o Hello World (Olá Mundo)

Agora que você já sabe instalar o NASM, vamos ensinar como criar seu programa em Assembly.

É um texto com o código em Assembly para você ir se familiarizando.
Tenha em mente que este é apenas o primeiro passo para programar nessa linguagem.
Nos próximos tutoriais vamos ensinar os procedimentos para executar um programa em Assembly, bem como explicar detalhadamente o significado de cada comando nessa verdadeira sopa de letrinhas.

Não se assuste, em breve você entenderá tudo perfeitamente e dominará esse bela e poderosa linguagem de programação.


Código do Hello World em Assembly

Crie um arquivo de texto com o nome "hello.asm" e escreve o seguinte código dentro dele:

section .data
msg     db      'Como programar em Assembly - Curso Assembly Progressivo', 0AH
len     equ     $-msg
 
section .text
global  _start
_start: mov     edx, len
        mov     ecx, msg
        mov     ebx, 1
        mov     eax, 4
        int     80h
 
        mov     ebx, 0
        mov     eax, 1
        int     80h


Sim, todas essas linhas de código são para exibir a mensagem "Como programar em Assembly - Curso Assembly Progressivo".

Esse, porém é um código 'humano', pois usamos mnemônicos, que são símbolos e códigos para que nós possamos entender.
Obviamente, os computadores não leem como as pessoas, eles simplesmente obedece aos comandos em binários.

E é isso que vamos ensinar no próximo tutorial, sobre como criar os object files (código objeto) e linkar arquivos em Assembly, nós vamos ensinar como transformar esse código humano em código binário.
Vamos montar (e não compilar) tal código, que é o que seu computador realmente vai entender e obedecer.

O código de máquina será o código objeto, que são arquivos com extensão .o
Em seguida, o próximo passo é reunir todos esses object files, bem como códigos que usamos de outras bibliotecas, e criar um executável. Ou seja, vamos linkar, agrupar tudo que é necessário para rodar o programa...


19 comentários:

Anônimo disse...

Eu tentei estalar o nasm e não deu certo . Mim ajuda sou louco por esse mundo e agora quero muito aprender.

Li outros tutorias e ele falom jne, je, hexadecimal. Nao entendi nada.

Anônimo disse...

parabéns tá bem legal.
o que são numeros hexadecimal?

Anônimo disse...

são sentenças onde possuem números e letras.

Anônimo disse...

Desculpa, mas como uma pessoa que está louca por "esse mundo', ou seja, pelo que entendi o que programação e visita um site que fala sobre assembly, não sabe o que são hexadecimais?
antes de fazer uma pergunta tão idiota, pq nao procura no google antes?

Hexadecimais: números que estão na base 16
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
.
.
.

TY disse...

Essa pessoa faz um comentário acima, metendo o pau na pessoa do primeiro comentário... E ele encana onde não explica. Pois bem.

Números Hexadecimais são números baseados em 16 caracteres para sua representação numérica. Ou seja, apenas 16 "números", são eles:

0 1 2 3 4 5 6 7

8 9 A B C D E F

Essa sequência numérica vai de 0 a F.

--------------------------

Nos decimais os números vão de 0 a 9.

0 1 2 3 4 5 6 7 8 9

E assim como nos números decimais podemos organizar os números em qualquer sequência (por exemplo 2014 = 7DE em hexadecimal), nos Hexadeciamais, tbm podemos, 9FA4 ( 40868 em decimais ). Existem outras duas bases decimais que conheço, a Binária ( 00110101 ), que trabalham com apenas dois números, zeros e uns, e a Octal, q vai de 0 a 7, trabalham com oito números. É isso aí. Só não pude ser mais completo por falta de tempo, estou de saída, desculpe por isso, mas na net tem bastante material sobre isso.

O PROBLEMA DO BRASILEIRO, É QUE ELE BANALIZA A IGNORÂNCIA, GOSTA DE SE FAZER PARECER MELHOR. NÃO ENSINA, POVO QUE DESCONHECE A GENTILEZA E O PREZO PELO BEM ESTAR DO PRÓXIMO. SABE? ENTÃO ENSINE, NÃO CONDENE O NÃO SABER. UMA VEZ TODOS FOMOS LEIGOS!!!

João Paulo disse...

TY, receba meus sinceros cumprimentos.

O rapaz agrediu gratuitamente um colega que está com dúvidas sinceras. Quem zomba e não explica, duvido muito que de fato saiba.

Anônimo disse...

Hexadecimal para em F pois quando se fala 10 tem repetição de número.

Jonathan disse...

"Esse, porém é um código 'humano', pois usamos mnemônicos, que são símbolos e códigos para que nós possamos entender."

Nossa, quanta humanidade nesse código. Que código fácil de entender é esse de 15 linhas? eu faço isso em 1 em ruby e consigo entender, Assembly parece um ritual pra invocar um ET.

Assembly Progressivo disse...

Jonathan,

Experimente fazer isso em Ruby sem usar um sistema operacional.

Tente fazer isso em Ruby sem usar um compilador.

Tente fazer isso em Ruby, com uma performance que seja pelo menos 1% do Assembly, que use pelo menos 10% da memória que o Assembly usar,

Experimente fazer algo em um hardware que fornece apenas alguns kb de memória (4 ou 8), em Ruby.

O fato de você ver uma mensagem na tela usando uma linha de Ruby não significa que é a mesma coisa, ou melhor, que ver o mesmo resultado usando Assembly.

Poderia continuar por horas e horas citando motivos de se fazer isso em Assembly, e apenas em Assembly.

Assembly Progressivo disse...

Jonathan,

Experimente fazer isso em Ruby sem usar um sistema operacional.

Tente fazer isso em Ruby sem usar um compilador.

Tente fazer isso em Ruby, com uma performance que seja pelo menos 1% do Assembly, que use pelo menos 10% da memória que o Assembly usar,

Experimente fazer algo em um hardware que fornece apenas alguns kb de memória (4 ou 8), em Ruby.

O fato de você ver uma mensagem na tela usando uma linha de Ruby não significa que é a mesma coisa, ou melhor, que ver o mesmo resultado usando Assembly.

Poderia continuar por horas e horas citando motivos de se fazer isso em Assembly, e apenas em Assembly.

João Paulo disse...

Johnatan,

Experimente programar atuadores de válvulas automáticas em Ruby.
Já pensou também se as ordens de bid/ask entre um banco na NYSE e outro na Bolsa de Tóquio fossem programadas em Ruby?

Anônimo disse...

A vingança nunca é plena mata a alma e a invenena!

Anônimo disse...

Já pensaram em deixarem de ignorância e usar a linguagem de acordo com o que se precisa, use assembly se for preciso usar assembly, use ruby se for preciso usar ruby, quero ver uma pessoa desenvolver uma pagina web em assembly, se vai ser mais agil que um programa em ruby, cada linguagem tem suas vantagens. Então deixem de xurumelas.

Anônimo disse...

Legal

Tio Sam Tutoriais disse...

Gostaria de aprender assembly mas parece bem complexo.Já programo em c,c#,delphi e java!!!

Anônimo disse...

GENIAL!!!

Tiago Farias disse...

O Jonathan foi muito infeliz no comentário.

FrancinyS disse...

Muito legal a intenção de criação do curso de Assembly.
Só faltou informar que as instruções do código acima são para Linux
Apesar que ele avisou que a construção do executável era para linux.

FrancinyS disse...

Poderia usar o masm32 com o seguinte código:
.386
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

.data

msg db "Ola Mundo", 0
cpt db "Meu Primeiro Programa em Assembly", 0

.code
start:

invoke MessageBox, NULL, addr msg, addr cpt, MB_OK + MB_ICONINFORMATION


invoke ExitProcess, NULL

end start