;; (C) David Vajda
;; nasm i586/amd64 assembler uebung
;; 2025-04-25
global _start
section .data
mmx1op: db "00000000", 0, 0
mmx2op: db "12345678", 10, 13
cpuidop: db "0000", "0000", "0000", 10, 13
tosortstr: db "aber ", 10, 13, "hallo ", 10, 13, "sagt ", 10, 13, "david ", 10, 13, "vajda ", 10, 13
section .text
_start:
mov eax, 0x00
cpuid
mov [cpuidop + 0], ebx
mov [cpuidop + 4], edx
mov [cpuidop + 8], ecx
mov ecx, cpuidop
mov edx, 14
mov eax, 0x04
mov ebx, 0x01
int 0x80
movq xmm1, [mmx1op]
movq xmm2, [mmx2op]
paddb xmm1, xmm2
movq xmm3, xmm1
movq xmm1, [mmx1op]
movq xmm2, [mmx2op]
paddq xmm1, xmm2
movq xmm4, xmm1
movq [mmx1op], xmm3
movq [mmx2op], xmm4
mov ecx, mmx1op
mov edx, 20
mov eax, 0x04
mov ebx, 0x01
int 0x80
mov esi, tosortstr
sortloop1:
cmp esi, tosortstr + 8 * 5
jge sortloop1end
mov edi, esi
sortloop2:
add edi, 8
cmp edi, tosortstr + 8 * 5
jge sortloop2end
;; pcmpeqd - compare packed doublewords for equality
;; sind die gepackt? wir probieren es einfach mal aus
movq xmm1, [esi]
movq xmm2, [edi]
pcmpeqd xmm1, xmm2
jle noxchng
movq [esi], xmm2
movq [edi], xmm1
noxchng:
jmp sortloop2
sortloop2end:
add esi, 8
jmp sortloop1
sortloop1end:
mov edx, 5*8
mov ecx, tosortstr
mov eax, 0x04
mov ebx, 0x01
int 0x80
mov ebx, 0x00
mov eax, 0x01
int 0x80
|