section .data
minha_string db 'ABZXXZZZZZHCDEEFGHX', 0 ; String com terminador 0
achou_msg db 'Achou 3 X!', 0xA
achou_len equ $ - achou_msg
contador dd 3
section .text
global _start
_start:
mov esi, minha_string ; ESI aponta para o início da string
procurar:
mov al, [esi] ; pega o byte apontado por ESI e coloca em AL
inc esi
cmp al, 0 ; Chegou ao final da string? (terminador 0)
je nao_achou
cmp al, 'X' ; Comparar caractere atual com 'X'
je achou
jmp procurar ; Continua procurando
achou:
dec dword [contador]
cmp dword [contador], 0
je achou3
jmp procurar
nao_achou:
; se não quiser fazer nada, apenas sair
jmp sair
achou3:
; escreve mensagem "Achou o X!"
mov eax, 4 ; syscall write
mov ebx, 1 ; STDOUT
mov ecx, achou_msg
mov edx, achou_len
int 0x80
jmp sair
sair:
mov eax, 1 ; syscall exit
xor ebx, ebx
int 0x80
c2VjdGlvbiAuZGF0YQogbWluaGFfc3RyaW5nIGRiICdBQlpYWFpaWlpaSENERUVGR0hYJywgMCA7IFN0cmluZyBjb20gdGVybWluYWRvciAwCiBhY2hvdV9tc2cgZGIgJ0FjaG91IDMgWCEnLCAweEEKIGFjaG91X2xlbiBlcXUgJCAtIGFjaG91X21zZwogY29udGFkb3IgZGQgMwpzZWN0aW9uIC50ZXh0CiBnbG9iYWwgX3N0YXJ0Cl9zdGFydDoKIG1vdiBlc2ksIG1pbmhhX3N0cmluZyA7IEVTSSBhcG9udGEgcGFyYSBvIGluw61jaW8gZGEgc3RyaW5nCnByb2N1cmFyOgptb3YgYWwsIFtlc2ldIDsgcGVnYSBvIGJ5dGUgYXBvbnRhZG8gcG9yIEVTSSBlIGNvbG9jYSBlbSBBTAppbmMgZXNpCmNtcCBhbCwgMCA7IENoZWdvdSBhbyBmaW5hbCBkYSBzdHJpbmc/ICh0ZXJtaW5hZG9yIDApCiBqZSBuYW9fYWNob3UKIGNtcCBhbCwgJ1gnIDsgQ29tcGFyYXIgY2FyYWN0ZXJlIGF0dWFsIGNvbSAnWCcKIGplIGFjaG91CiBqbXAgcHJvY3VyYXIgOyBDb250aW51YSBwcm9jdXJhbmRvCmFjaG91OgogZGVjIGR3b3JkIFtjb250YWRvcl0KIGNtcCBkd29yZCBbY29udGFkb3JdLCAwCiBqZSBhY2hvdTMKIGptcCBwcm9jdXJhcgpuYW9fYWNob3U6CiA7IHNlIG7Do28gcXVpc2VyIGZhemVyIG5hZGEsIGFwZW5hcyBzYWlyCiBqbXAgc2FpcgphY2hvdTM6CiA7IGVzY3JldmUgbWVuc2FnZW0gIkFjaG91IG8gWCEiCiBtb3YgZWF4LCA0IDsgc3lzY2FsbCB3cml0ZQogbW92IGVieCwgMSA7IFNURE9VVAogbW92IGVjeCwgYWNob3VfbXNnCiBtb3YgZWR4LCBhY2hvdV9sZW4KIGludCAweDgwCiBqbXAgc2FpcgpzYWlyOgogbW92IGVheCwgMSA7IHN5c2NhbGwgZXhpdAogeG9yIGVieCwgZWJ4CiBpbnQgMHg4MA==