;; (C) David Vajda
;; i586/AMD64 CPUID MMX in One
;; 2025-04-21
global _start
section .data
op1mmx: db "aaaa", "aaaa", 10, 13
op2mmx: db 0, 1, 2, 3, 4, 5, 6, 7
cpuidstr: db "0000", "0000", "0000", 10, 13
section .text
_start:
movq xmm1, [op1mmx]
movq xmm2, [op2mmx]
paddb xmm1, xmm2
movq [op1mmx], xmm1
mov ecx, op1mmx
mov edx, 0x0a
mov ebx, 0x01
mov eax, 0x04
int 0x80
paddw xmm1, xmm2
movq [op1mmx], xmm1
mov ecx, op1mmx
mov edx, 0x0a
mov ebx, 0x01
mov eax, 0x04
int 0x80
mov eax, 0x00
cpuid
mov [cpuidstr+0], ebx
mov [cpuidstr+4], edx
mov [cpuidstr+8], ecx
mov ecx, cpuidstr
mov edx, 14
mov ebx, 0x01
mov eax, 0x04
int 0x80
mov eax, 0x01
mov ebx, 0x00
int 0x80