Skip to content

Instantly share code, notes, and snippets.

@ptrcarta
Created January 27, 2016 16:31
Show Gist options
  • Save ptrcarta/a3a9489331db58c1b19d to your computer and use it in GitHub Desktop.
Save ptrcarta/a3a9489331db58c1b19d to your computer and use it in GitHub Desktop.
compile: `as --32 fizzbuzz.s -o fizzbuzz.o; ld -melf_i386 -o fizzbuzz fizzbuzz.o`
.text
.global _start
_start:
#initialize
#can ignore maybe
xor %bh, %bh
sub $0xffff, %esp
movl %esp, %ebp
loop:
movb $0xa, (%esp)
inc %esp
inc %bh
cmpb $101, %bh
je fin
movw $0xFFFF, %dx
fizz_:
movzbw %bh, %ax
movb $3, %bl
divb %bl
movb %ah, %dl
buzz_:
movzbw %bh, %ax
movb $5, %bl
divb %bl
movb %ah, %dh
test:
test %dx, %dx
je fizzbuzz
test %dl, %dl
je fizz
test %dh, %dh
je buzz
jmp num
fizzbuzz:
movl $0x7a7a6946, (%esp)
movl $0x7a7a7542, 4(%esp)
add $8, %esp
jmp loop
fizz:
movl $0x7a7a6946, (%esp)
add $4, %esp
jmp loop
buzz:
movl $0x7a7a7542, (%esp)
add $4, %esp
jmp loop
num: #write number to buffer
cmp $10, %bh
jl sing_dig
dub_dig:
movzbw %bh, %ax
movb $10, %bl
divb %bl
movb %ah, %dl #reminder
movb %al, %dh #quotient
add $0x3030, %ax
movw %ax, (%esp)
inc %esp
inc %esp
jmp loop
sing_dig:
movb %bh, %ch
add $0x30, %ch
movb %ch, (%esp)
inc %esp
jmp loop
fin:
movl $4, %eax
movl $1, %ebx
inc %ebp
movl %ebp, %ecx
movl %esp, %edx
subl %ebp, %edx
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment