; 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) ; strrev: test b[ax1], b[ax1] cmovz b[ax0], 0 jz .4 ; save str's location ; xxx why is dec'ing needed? lea rdx, b[ax1 + -1] ; go to str's end, just before ; the null terminator .1: test b[ax1+1], b[ax1+1] jz .2 inc ax1 jmp .1 ; copy, going backward though str ; and forward through buf .2: mov b[ax0], b[ax1] cmp ax1, rdx je .3 inc ax0 dec ax1 jmp .2 .3: mov b[ax0+1], 0 .4: ret