extern puts %include "../inc/length_func.inc" section .data text db "REEEEEEEEEE",0 text2 db "REEEEEEErEE",0 differ db "they differ",0 notdiffer db "they do not differ",0 textlength dq 0 text2length dq 0 section .text global main main: sub rsp, 8 ;enter ;below we are getting the length of each string ;we do this because we dont want to compare with memory that isnt ours mov r8, text call length_func mov [textlength], rax mov r8, text2 call length_func mov [text2length], rax mov r8, [textlength] mov r9, [text2length] cmp r8, r9 jne _differ xor rcx, rcx ;we do this to clear garbage in rcx (i have had garbage in it before) _loop: ;loop tings mov r8, text add r8, rcx mov r9, text2 add r9, rcx mov r10b, [r8] mov r11b, [r9] cmp r10b, r11b jne _differ cmp r10b, 0 je _notdiffer cmp r11b, 0 je _notdiffer inc rcx jmp _loop _differ: mov rdi, differ cld call puts jmp _end _notdiffer: mov rdi, notdiffer cld call puts _end: add rsp, 8 ;exit ret