Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- global _start
- section .text
- _start:
- lea rdi, [str1]
- call str_len
- mov edx, eax
- lea rdi, [str2]
- call str_len
- mov ebx, eax
- cmp edx, ebx
- jne _errlen
- call _cmp_str
- mov rbx, rax
- call check_equal
- jmp _exit
- check_equal:
- cmp rax, 1
- je _CE2
- _CE1:
- mov rsi, truemsg
- mov rdx, 5
- jmp _CE3
- _CE2: ; false state
- mov rsi, falsemsg
- mov rdx, 6
- _CE3:
- mov rax, 1
- mov rdi, 1
- syscall
- ret
- str_len:
- mov eax, 0
- test rdi, rdi
- jne _S2
- _S4:
- add rax, 1
- _S2:
- cmp byte [rdi + rax], 0
- jne _S4
- ret
- _errlen:
- mov rax, 1
- mov rdi, 1
- mov rsi, err
- mov rdx, 21
- syscall
- _exit:
- mov rax, 60
- xor rdi, rdi
- syscall
- nop
- nop
- nop
- _cmp_str:
- mov rcx, rdx
- test rcx, rcx
- lea rdi, [str1]
- lea rsi, [str2]
- _L1:
- movdqu xmm0, [rdi]
- movdqu xmm1, [rsi]
- mov eax, ecx
- mov edx, ecx
- pcmpestrm xmm0, xmm1, 0b11000 ; _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_NEGATIVE_POLARITY | _SIDD_LEAST_SIGNIFICANT
- setb al
- movzx eax, al
- jb _L2
- cmp rcx, 16
- ja _L3
- _L4:
- ret
- _L3:
- sub rcx, 16
- add rdi, 16
- add rsi, 16
- jmp _L1
- _L2:
- nop
- mov eax, 1
- ret
- section .data
- err: db "length doesn't match", 10, 0
- truemsg: db "true", 10, 0
- falsemsg: db "false", 10, 0
- align 16
- str1: db "abc", "d", "defg", 0
- str2: db "abcddefg", 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement