section .data
minha_string db 'ABZZZZXXXZZHCDEEFGHX', 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
c2VjdGlvbiAuZGF0YQogbWluaGFfc3RyaW5nIGRiICdBQlpaWlpYWFhaWkhDREVFRkdIWCcsIDAgOyBTdHJpbmcgY29tIHRlcm1pbmFkb3IgMAogYWNob3VfbXNnIGRiICdBY2hvdSAzIFghJywgMHhBCiBhY2hvdV9sZW4gZXF1ICQgLSBhY2hvdV9tc2cKIGNvbnRhZG9yIGRkIDAKc2VjdGlvbiAudGV4dAogZ2xvYmFsIF9zdGFydApfc3RhcnQ6CiBtb3YgZXNpLCBtaW5oYV9zdHJpbmcgOyBFU0kgYXBvbnRhIHBhcmEgbyBpbsOtY2lvIGRhIHN0cmluZwpwcm9jdXJhcjoKbW92IGFsLCBbZXNpXSA7IHBlZ2EgbyBieXRlIGFwb250YWRvIHBvciBFU0kgZSBjb2xvY2EgZW0gQUwKaW5jIGVzaQpjbXAgYWwsIDAgOyBDaGVnb3UgYW8gZmluYWwgZGEgc3RyaW5nPyAodGVybWluYWRvciAwKQogamUgbmFvX2FjaG91CiBjbXAgYWwsICdYJyA7IENvbXBhcmFyIGNhcmFjdGVyZSBhdHVhbCBjb20gJ1gnCiBqZSBhY2hvdQogam1wIHByb2N1cmFyIDsgQ29udGludWEgcHJvY3VyYW5kbwphY2hvdToKIG1vdiBkd29yZCBbY29udGFkb3JdLCAzCiBkZWMgZHdvcmQgW2NvbnRhZG9yXQogY21wIGR3b3JkIFtjb250YWRvcl0sIDAKIGplIGFjaG91Mwogam1wIHByb2N1cmFyCm5hb19hY2hvdToKIDsgc2UgbsOjbyBxdWlzZXIgZmF6ZXIgbmFkYSwgYXBlbmFzIHNhaXIKIGptcCBzYWlyCmFjaG91MzoKIDsgZXNjcmV2ZSBtZW5zYWdlbSAiQWNob3UgbyBYISIKIG1vdiBlYXgsIDQgOyBzeXNjYWxsIHdyaXRlCiBtb3YgZWJ4LCAxIDsgU1RET1VUCiBtb3YgZWN4LCBhY2hvdV9tc2cKIG1vdiBlZHgsIGFjaG91X2xlbgogaW50IDB4ODAKIGptcCBzYWlyCnNhaXI6CiBtb3YgZWF4LCAxIDsgc3lzY2FsbCBleGl0CiB4b3IgZWJ4LCBlYngKIGludCAweDgw