cpu 8086 bits 16 section .text global memset memset: push bp mov bp, sp push di mov di, [bp + 4] mov ax, [bp + 6] mov ah, al mov cx, [bp + 8] test di, 1 jz .skip_odd_addr stosb dec cx .skip_odd_addr: test cx, 1 jz .skip_odd_cx push bx mov bx, cx mov [bx + di], al inc di pop bx .skip_odd_cx: shr cx, 1 ; count words rep stosw pop di pop bp ret global fmemset fmemset: push bp mov bp, sp push di push es mov di, [bp + 4] mov ax, [bp + 6] mov es, ax mov ax, [bp + 8] mov ah, al mov cx, [bp + 10] test di, 1 jz .skip_odd_addr stosb dec cx .skip_odd_addr: test cx, 1 jz .skip_odd_cx push bx mov bx, cx mov [es:bx + di], al inc di pop bx .skip_odd_cx: shr cx, 1 ; count words rep stosw pop es pop di pop bp ret ; vi:ts=8 sts=8 sw=8 ft=nasm: