; 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 rx8, 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 b[ax0], b[ax1] cmp ax1, rx8 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: cmp ax0, ax1 j.ae .3 xchg b[ax0], b[ax1] inc ax0 dec ax1 jmp .2 .3: ret