section .data
minha_string db 'ABZZZZXXZZHCDEEFGHX', 0 ; String com terminador 0
achou_msg db 'Achou 3 X!', 0xA
achou_len equ $ - achou_msg
contador dd 0
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:
mov dword [contador], 3
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
c2VjdGlvbiAuZGF0YQogbWluaGFfc3RyaW5nIGRiICdBQlpaWlpYWFpaSENERUVGR0hYJywgMCA7IFN0cmluZyBjb20gdGVybWluYWRvciAwCiBhY2hvdV9tc2cgZGIgJ0FjaG91IDMgWCEnLCAweEEKIGFjaG91X2xlbiBlcXUgJCAtIGFjaG91X21zZwogY29udGFkb3IgZGQgMApzZWN0aW9uIC50ZXh0CiBnbG9iYWwgX3N0YXJ0Cl9zdGFydDoKIG1vdiBlc2ksIG1pbmhhX3N0cmluZyA7IEVTSSBhcG9udGEgcGFyYSBvIGluw61jaW8gZGEgc3RyaW5nCnByb2N1cmFyOgptb3YgYWwsIFtlc2ldIDsgcGVnYSBvIGJ5dGUgYXBvbnRhZG8gcG9yIEVTSSBlIGNvbG9jYSBlbSBBTAppbmMgZXNpCmNtcCBhbCwgMCA7IENoZWdvdSBhbyBmaW5hbCBkYSBzdHJpbmc/ICh0ZXJtaW5hZG9yIDApCiBqZSBuYW9fYWNob3UKIGNtcCBhbCwgJ1gnIDsgQ29tcGFyYXIgY2FyYWN0ZXJlIGF0dWFsIGNvbSAnWCcKIGplIGFjaG91CiBqbXAgcHJvY3VyYXIgOyBDb250aW51YSBwcm9jdXJhbmRvCmFjaG91OgogbW92IGR3b3JkIFtjb250YWRvcl0sIDMKIGRlYyBkd29yZCBbY29udGFkb3JdCiBjbXAgZHdvcmQgW2NvbnRhZG9yXSwgMAogamUgYWNob3UzCiBqbXAgcHJvY3VyYXIKbmFvX2FjaG91OgogOyBzZSBuw6NvIHF1aXNlciBmYXplciBuYWRhLCBhcGVuYXMgc2Fpcgogam1wIHNhaXIKYWNob3UzOgogOyBlc2NyZXZlIG1lbnNhZ2VtICJBY2hvdSBvIFghIgogbW92IGVheCwgNCA7IHN5c2NhbGwgd3JpdGUKIG1vdiBlYngsIDEgOyBTVERPVVQKIG1vdiBlY3gsIGFjaG91X21zZwogbW92IGVkeCwgYWNob3VfbGVuCiBpbnQgMHg4MAogam1wIHNhaXIKc2FpcjoKIG1vdiBlYXgsIDEgOyBzeXNjYWxsIGV4aXQKIHhvciBlYngsIGVieAogaW50IDB4ODA=