; Este programa le um texto da entrada padrao e passa-o para letras maiusculas. ; O resultado e' exibido na saida padrĂ£o global _start section .data ; secao de declaracao de variaveis STDIN: EQU 0 STDOUT: EQU 1 STDERR: EQU 2 section .bss buffer: resb 256 ; um buffer com 256 bytes section .text ; secao com o corpo do programa _start: ; >>> le o texto digitado ; int read(int fd, void *buf, size_t count); mov ebx,STDIN ; primeiro parametro: stdin mov ecx,buffer ; segundo parametro: ponteiro para o buffer mov edx,256 ; terceiro argumento: qtde de bytes a ser lida mov eax,3 ; numero da chamada ao sistema (read) int 80h ; chamada ao nucleo do SO ; eax contem a quantidade de caracteres lidos ; >>> faz a conversao de letras minusculas em maiusculas mov ecx,0 ; cont <- 0 loop: mov bl,[buffer+ecx] ; bl <- buffer[cont] ; verifica se 'a' >= bl <= 'z' cmp bl,'a' jb prox ; se bl < 'a', vai para o proximo caracter cmp bl,'z' ja prox ; se bl > 'z', vai para o proximo caracter sub bl,20h ; transforma letra minuscula em maiuscula ; 20h = 61h - 41h = 97d - 65d = 'a' - 'A' mov [buffer+ecx],bl prox: inc ecx ; 'avanca' o contador cmp ecx,eax jb loop ; se cont < qtde bytes lidos, volta ao inicio do laco ; >>> exibe o texto convertido na saida padrao ;int write(int fd, const void *buf, size_t count); mov edx,eax ; terceiro parametro: tamanho da mensagem mov ebx,STDOUT ; primeiro parametro: stdout mov ecx,buffer ; 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 ;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