; The OS/K Team licenses this file to you under the MIT license. ; See the LICENSE file in the project root for more information. ; ; void strrev(char *buf, const char *str) ; ; buf and src must NOT overlap ; strrev: cmp b[ax1], 0 mov.z b[ax0], 0 ret.z ; save str's location mov r10, ax1 ; go to str's end, just before ; the null terminator mov rcx, STRLEN_MAX scasb.rep.nz ax1, 0 dec ax1 .2: ; copy, going backward though str ; and forward through buf mov rax, b[ax1] mov b[ax0], rax cmp ax1, r10 mov.z b[ax0+1], 0 ret.z inc ax0 dec ax1 jmp .2 ; ; void strrev2(char *str) ; ; Inverses str ; strrev2: cmp b[ax0], 0 ret.z mov ax1, ax0 ; go to str's end, just before ; the null terminator mov rcx, STRLEN_MAX scasb.rep.nz ax1, 0 dec ax1 ; increase ax0 while decreasing ax1, performing exchanges .2: b.ae ax0, ax1, .3 mov rax, b[ax1] xchg rax, b[ax0] mov b[ax1], rax inc ax0 dec ax1 jmp .2 .3: ret