;; (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
movdqu xmm1, [rsi]
movdqu [toOutPutStr], xmm1
;mov rdx, 0x12
;mov rcx, toOutPutStr
;mov rax, 0x04
;mov rbx, 0x01
;int 0x80
mov rax, 0x01
mov rbx, 0x00
int 0x80
loop1end:
mov rsi, toSortStr
loop2:
movdqu xmm1, [rsi]
movdqu xmm0, [toCmpStrSrc]
pcmpeqb xmm0, xmm1
movdqu [toCmpStrDes], xmm0
mov rbx, [toCmpStrDes+0x00]
cmp rbx, 0x00000000
je loop2end
mov rbx, [toCmpStrDes+0x08]
cmp rbx, 0x00000000
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, 0x00000000
je loop3end
mov rbx, [toCmpStrDes+0x08]
cmp rbx, 0x00000000
je loop3end
movdqu xmm1, [rsi]
movdqu xmm2, [rdi]
pcmpgtb xmm1, xmm2
jle cond1
movdqu [toCmpStrDet], xmm1
mov rbx, [toCmpStrDes+0x00]
cmp rbx, 0x00000000
je cond1
mov rbx, [toCmpStrDes+0x08]
cmp rbx, 0x00000000
je cond1
movdqu xmm1, [rsi]
movdqu xmm2, [rdi]
movdqu [rsi], xmm1
movdqu [rdi], xmm2
cond1:
jmp loop3
loop3end:
add rsi, 0x10
jmp loop2
loop2end:
loop4:
movdqu xmm1, [rsi]
movdqu xmm0, [toCmpStrSrc]
pcmpeqb xmm0, xmm1
movdqu [toCmpStrDes], xmm0
mov rbx, [toCmpStrDes+0x00]
cmp rbx, 0x00000000
je loop4end
mov rbx, [toCmpStrDes+0x08]
cmp rbx, 0x00000000
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 loop4
loop4end:
mov rsi, toSortStr
mov rax, 0x01
mov rbx, 0x00
int 0x80