;; (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 |