# Copyright 2022 Gabriel Jensen. # This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. # If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. .globl zap_strfnd zap_strfnd: # Address of the first character: #define start %rdi # Character to be found: #define cmp %sil # Address of the current character: #define addr %rax # Current character: #define chr %dl movq start,addr # addr = start # Iterate over the string: .loop: # Copy the character into a register: movb (addr),chr # chr = *addr # Check if we have found the character: cmpb chr,cmp # if (chr == cmp) je .fnd # goto fnd # Check if we have found the null-terminator: testb chr,chr # if (chr == 0x0) jz .nfnd # goto nfnd # Continue to the next character: incq addr # ++addr jmp .loop # goto loop # Found: .fnd: # Get the offset of the character: subq start,addr # addr -= start ret # return addr # Not found: .nfnd: movq $0xFFFFFFFFFFFFFFFF,addr # addr = 0xFFFFFFFFFFFFFFFF ret # return addr