;; (C) David Vajda ;; 2025-08-15 ;; nasm linux/debian gnu i586/amd64/i386 sort mmx strings´ global _start section .data toSortStr: db "Die MMX-Register"," sind 64 Bit bre","it, während die"," XMM-Register 12","8 Bit breit sind",". Die MMX-Befehl","ssatzarchitektur"," stellt acht 64-","Bit-Register (MM","0 bis MM7) zur V","erfügung. Die S","treaming SIMD Ex","tensions (SSE) e","rweitern diese a","uf 128 Bit mit d", 16 dup (0x00) toOutPutStr: db 16 dup (0x00), 10, 13 toSortStrLen: dq 0x0000000000000000 toCmpStrSrc: dq 0x0000000000000000 toCmpStrDes: dq 0x0000000000000000 toCmpStrDet: dq 0x0000000000000000 section .text _start: mov rsi, toSortStr loop1: movdqu xmm1, [rsi] movdqu xmm0, [toCmpStrSrc] pcmpeqb xmm0, xmm1 movdqu [toCmpStrDes], xmm0 mov rbx, [toCmpStrDes+0x00] cmp rbx, 0xffffffff je loop1end mov rbx, [toCmpStrDes+0x08] cmp rbx, 0xffffffff je loop1end movdqu xmm1, [rsi] movdqu [toOutPutStr], xmm1 mov rdx, 0x12 mov rcx, toOutPutStr mov rax, 0x04 mov rbx, 0x01 int 0x80 add rsi, 0x10 jmp loop1 loop1end: mov rsi, toSortStr loop2: movdqu xmm1, [rsi] movdqu xmm0, [toCmpStrSrc] pcmpeqb xmm0, xmm1 movdqu [toCmpStrDes], xmm0 mov rbx, [toCmpStrDes+0x00] cmp rbx, 0xffffffff je loop2end mov rbx, [toCmpStrDes+0x08] cmp rbx, 0xffffffff je loop2end mov rdi, rsi loop3: add rdi, 0x10 movdqu xmm2, [rdi] movdqu xmm0, [toCmpStrSrc] pcmpeqb xmm0, xmm2 movdqu [toCmpStrDes], xmm0 mov rbx, [toCmpStrDes+0x00] cmp rbx, 0xffffffff je loop3end mov rbx, [toCmpStrDes+0x08] cmp rbx, 0xffffffff je loop3end movdqu xmm1, [rsi] movdqu xmm2, [rdi] pcmpgtb xmm1, xmm2 movdqu [toCmpStrDet], xmm1 mov rbx, [toCmpStrDet+0x00] ; cmp rbx, 0x00000000 cmp rbx, 0xffffffff jge cond1 mov rbx, [toCmpStrDet+0x08] ; cmp rbx, 0x00000000 cmp rbx, 0xffffffff jge cond1 movdqu xmm1, [rsi] movdqu xmm2, [rdi] movdqu [rsi], xmm2 movdqu [rdi], xmm1 cond1: jmp loop3 loop3end: add rsi, 0x10 jmp loop2 loop2end: mov rsi, toSortStr loop4: movdqu xmm1, [rsi] movdqu xmm0, [toCmpStrSrc] pcmpeqb xmm0, xmm1 movdqu [toCmpStrDes], xmm0 mov rbx, [toCmpStrDes+0x00] cmp rbx, 0xffffffff je loop4end mov rbx, [toCmpStrDes+0x08] cmp rbx, 0xffffffff je loop4end movdqu xmm1, [rsi] movdqu [toOutPutStr], xmm1 mov rdx, 0x12 mov rcx, toOutPutStr mov rax, 0x04 mov rbx, 0x01 int 0x80 add rsi, 0x10 jmp loop4 loop4end: mov rsi, toSortStr mov rax, 0x01 mov rbx, 0x00 int 0x80