Bytebeat
; noise.asm -- just fooling around :-)
; mct and leif, ; Sun Feb 19 19:08:13 PST 2012
;
; Build with:
;
; nasm -felf32 noise.asm
; ld -melf_i386 -o noise noise.o
;
; Run with:
;
; ./noise | aplay
global _start
section .data
section .bss
var: resb 1 ; one bye variable
section .text
; f(x) = (x >> 10 ^ x>>((x>>13)%4)) % 256
_start: mov esi, 0
;int 3
.loop:
mov edi, esi
shr edi, 13 ; edi := x >> 13
mov eax, edi
cwd
mov bx, 4
div bx ; dx := (x >> 13) % 4
mov eax, esi
mov cx, dx
shr eax, cl ; eax := x >> ((x >> 13) % 4)
mov edi, esi
shr edi, 10 ; edi := x >> 10
xor eax, edi
mov [var], al
mov eax, 4 ; sys_write
mov ebx, 1 ; stdout
mov ecx, var ; buffer
mov edx, 1 ; length
int 80h ; syscall
inc esi
jmp .loop
python -c'import sys;[sys.stdout.write(chr((t>>10^t>>(t>>13)%4)%256)) for t in xrange(2**20)]' |aplay
### Basic Sierpinski harmony bytebeat t & t >> 8 in as few bytes as possible:
.globl _start
_start: inc %ebx # output fd 1 in %ebx for write()
inc %edx # byte count of 1 in %edx for write()
loop: inc %eax # increment t each time through the loop
push %eax # save it on the stack
and %ah, %al # compute t & t >> 8, our output sample
push %eax # store it on the stack for write()
lea 3(%ebx), %eax # a three-byte way to set %eax to 4 (__NR_write)
mov %esp, %ecx # pass sample pointer to write() (little-endian!)
int $0x80 # invoke system call
pop %eax # discard sample
pop %eax # restore t into %eax
jmp loop # and repeat
### Kragen Javier Sitaker
### 2012-01-10
Compile with gcc -nostdlib and pipe the output to aplay. After stripping, the ELF is 240 bytes; size(1) says it has 18 bytes of code.