Fr 25. Apr 17:19:27 CEST 2025 - i586nasm20250425 asm


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