Guest User

asmfizzbuzz

a guest
Jan 3rd, 2015
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; OMGWTF presents:
  2. ; fizzbuzz up to 100 in x86 asm (32bit)
  3. ;   - no conditional branches
  4. ;   - 110 bytes .text (not counting "nop")
  5. ;   - 49 bytes .data
  6. ; nasm -f elf32 fb.asm && ld -m elf_i386 fb.o -o fb && ./fb
  7.  
  8. section .text
  9. global _start
  10.  
  11. _start:
  12.     xor esi, esi ; counter
  13.     mov ebp, len
  14.     mov edi, [ebp+4]
  15. loop:
  16.     inc esi
  17.  
  18.     xor edx, edx
  19.     mov eax, esi
  20.     lea ecx, [2*edi]
  21.     div ecx
  22.     add eax, '0'
  23.     add edx, '0'
  24.     mov byte [ebp+32], al
  25.     sub eax, '1'
  26.     shr eax, 31
  27.     xor eax,  1
  28.     mov ecx, eax
  29.     mov byte [ecx + ebp+32], dl
  30.     inc ecx
  31.     mov byte [ecx + ebp+32], 10
  32.     inc ecx
  33.     mov dword [ebp], ecx
  34.  
  35.     mov eax, esi
  36.     xor edx, edx
  37.     lea ecx, [edi - 2]
  38.     div ecx
  39.     sub edx, 1
  40.     shr edx, 31
  41.     mov ecx, edx
  42.  
  43.     mov eax, esi
  44.     xor edx, edx
  45.     div edi
  46.     sub edx, 1
  47.     shr edx, 31
  48.     lea ecx, [ecx + 2*edx]
  49.  
  50.     lea eax, [esi-101]
  51.     shr eax, 30
  52.     inc eax
  53.     mov ebx, eax
  54.     shr ebx, 2
  55.  
  56.     mov edx, [ebp + 4*ecx]
  57.     mov ecx, [ebp + 4*ecx + 16]
  58.     int 0x80 ; write(STDOUT, x0, 3);
  59.  
  60.     jmp loop
  61. end:
  62.     nop
  63.  
  64. section .data
  65.     len dd  0,  5,    5,  9
  66.     tab dd x0, x1, x3+4, x3
  67.     x0 db "xxN"
  68.     x1 db "Fizz", 10
  69.     x3 db "FizzBuzz", 10
Advertisement
Add Comment
Please, Sign In to add comment