Dica enviado por albert guedes
section .data
; ´MSG1´ guarda a mensagem.
MSG1: db "Eu vou ler e escrever o que você digitar."
db " Você já pode digitar:"
; ´TAM1´ guarda o tamanho de ´MSG1´
TAM1: equ $ - MSG1
section .text ; Seção do texto.
global _start ; Declaração do inicio do programa.
_start: ; Inicio do programa.
; Primeiro argumento.
mov eax, 4 ; Guarda o valor 4 em eax que é o número
; de chamada do sistema para escrever no
; output dado por ebx.
; Segundo argumento.
mov ebx, 1 ; Guarda o número do output, que neste
; caso é 1, o monitor.
; Terceiro argumento.
mov ecx, MSG1 ; Aqui é armazenado em ecx a
; mensagem ´MSG1´
; Quarto argumento.
mov edx, TAM1 ; edx recebe o tamanho da mensagem
; ´MSG1´
; Chamada do sistema.
int 0x80 ; Chama o sistema para executar a função
; que está em eax, ou seja, a função 4,
; imprime a mensagem que está no endereço
; armazenado em ecx através da saída que
; está em ebx, a saída 1, o monitor.
; Para a utilização de mais que cinco argumentos utilizamos a
; pilha, ou stack, para conseguirmos mais argumentos.
mov ecx, esp ; Armazena em ecx a primeira posição
; do stack esp.
sub esp, 11 ; Subtrai 11 da posição do
; stack para reservar 11 bytes nele.
; Primeiro argumento.
mov eax, 3 ; Armazena em eax o número da chamada
; do sistema, 3 significa leitura.
; Segundo argumento.
mov edx, 10 ; edx recebe o valor 10 (0ax em hex) que
; que é o tamanho da string que vai ser
; lido do input.
int 0x80 ; Chamada do sistema.
mov edx, eax
mov eax, 4 ; Pedido de escrita.
mov ebx, 1 ; Output, isto é, o monitor.
int 0x80 ; Chama o sistema para imprimir.
mov eax, 1 ; Saída do sistema.
mov ebx, 0 ; Verifica se está tudo ok.
int 0x80 ; Chamada do sistema para imprimir.