.intel_syntax noprefix
.globl main
main:
sub esp, 16 # allocate space for i, sum and fmt
mov dword ptr [esp+4], -1 # i
fild dword ptr [limit] # limit
fldz # sum
1:
inc dword ptr [esp+4] # i += 1
fild dword ptr [esp+4] # i
fmul qword ptr [factor] # i * factor
fsin
faddp # add to sum
fcomi st, st(1) # check if below limit
jb 1b
fstp qword ptr [esp+8] # store on stack for printf
fstp st(0) # remove limit from fpu stack
mov dword ptr [esp], offset fmt
add esp, 16 # clean up stack
xor eax, eax # return value
ret
.data
factor: .double .08726646259971647884 # 5 * PI / 180
limit: .int 3
fmt: .string "i=%d sum=%g\n"
LmludGVsX3N5bnRheCBub3ByZWZpeAouZ2xvYmwgbWFpbgptYWluOgogICAgc3ViIGVzcCwgMTYgICAgICAgICAgICAgICAjIGFsbG9jYXRlIHNwYWNlIGZvciBpLCBzdW0gYW5kIGZtdAogICAgbW92IGR3b3JkIHB0ciBbZXNwKzRdLCAtMSAjIGkKICAgIGZpbGQgZHdvcmQgcHRyIFtsaW1pdF0gICAgIyBsaW1pdAogICAgZmxkeiAgICAgICAgICAgICAgICAgICAgICAjIHN1bQoxOgogICAgaW5jIGR3b3JkIHB0ciBbZXNwKzRdICAgICAjIGkgKz0gMQogICAgZmlsZCBkd29yZCBwdHIgW2VzcCs0XSAgICAjIGkKICAgIGZtdWwgcXdvcmQgcHRyIFtmYWN0b3JdICAgIyBpICogZmFjdG9yCiAgICBmc2luCiAgICBmYWRkcCAgICAgICAgICAgICAgICAgICAgICMgYWRkIHRvIHN1bQogICAgZmNvbWkgc3QsIHN0KDEpICAgICAgICAgICAjIGNoZWNrIGlmIGJlbG93IGxpbWl0CiAgICBqYiAxYgogICAgZnN0cCBxd29yZCBwdHIgW2VzcCs4XSAgICAjIHN0b3JlIG9uIHN0YWNrIGZvciBwcmludGYKICAgIGZzdHAgc3QoMCkgICAgICAgICAgICAgICAgIyByZW1vdmUgbGltaXQgZnJvbSBmcHUgc3RhY2sKICAgIG1vdiBkd29yZCBwdHIgW2VzcF0sIG9mZnNldCBmbXQKICAgIGNhbGwgcHJpbnRmCiAgICBhZGQgZXNwLCAxNiAgICAgICAgICAgICAgICMgY2xlYW4gdXAgc3RhY2sKICAgIHhvciBlYXgsIGVheCAgICAgICAgICAgICAgIyByZXR1cm4gdmFsdWUKICAgIHJldAoKLmRhdGEKZmFjdG9yOiAuZG91YmxlIC4wODcyNjY0NjI1OTk3MTY0Nzg4NCAjIDUgKiBQSSAvIDE4MApsaW1pdDogLmludCAzCmZtdDogLnN0cmluZyAiaT0lZCBzdW09JWdcbiIK