; Este programa le da entrada padrao uma sequencia de caracteres terminada ; por ENTER e exibe na saida padrao a sequencia em ordem inversa global _start section .data ; declaracao de variaveis e constantes STDIN: equ 0 ; entrada padrao STDOUT: equ 1 ; saida padrao cont: DW 0 ; contador de caracteres lidos section .bss caracter: RESW 1 ; aloca bytes na memoria, para o ultimo caracter lido section .text ; corpo do programa _start: ; Le a sequencia de caracteres terminada por ENTER e a armazena na pilha ; int read(int fd, void *buf, size_t count); le: mov ebx,STDIN ; primeiro parametro: STDIN mov ecx,caracter ; segundo parametro: ponteiro para o caracter mov edx,1 ; terceiro argumento: qtde de bytes a ser lida mov eax,3 ; numero da chamada ao sistema (read) int 80h ; chamada ao nucleo do SO push word[caracter] ; empilha 2 bytes, porque não existe push para 1 byte inc word[cont] cmp [caracter], byte 0Ah jne le ; Desempilha os caracteres lidos e os exibe na saida padrão ; int write(int fd, const void *buf, size_t count); esc: pop word[caracter] ; desempilha um caracter mov edx,1 ; terceiro parametro: tamanho da mensagem mov ebx,STDOUT ; primeiro parametro: stdout mov ecx,caracter ; segundo parametro: ponteiro para a msg a ser escrita mov eax,4 ; numero da chamada ao sistema (write) int 80h ; chamada ao nucleo do SO dec word[cont] jnz esc ; se ainda houver caracteres na pilha, ; volta ao inicio da etapa de escrita ;void exit(int status); mov eax,1 ; numero da chamada ao sistema (exit) mov ebx,0 ; primeiro argumento: codigo de saida (sucesso) int 80h ; chamada ao nucleo do SO