.comm x,4,4
.comm y,4,4
.section .rodata
format1: .string "Div : %d / %d = %.2f\n"
format2: .string "Mod : %d %% %d = %d\n"
format3: .string "Multiply : %u * %u = %llu\n"
format4: .string "%d %d"
const100: .int 100
.text
.globl main
.type main, @function
main:
subl $32, %esp # allocate space, preserve alignment
movl $format4, (%esp)
movl $x, 4(%esp)
movl $y, 8(%esp)
# operation divide
fildl x
fimul const100
fidivl y
# truncate to integer
# use this if current FPU rounding mode
# is known to be truncate
# frndint
# otherwise use this
fnclex
fnstcw (%esp) # save a copy to modify
fnstcw 2(%esp) # and a copy to preserve
orw $0x0c00, (%esp) # rounding mode = truncate
fldcw (%esp) # activate
frndint # do the truncate
fldcw 2(%esp) # restore original
# end of truncate code
fidiv const100
fstpl 12(%esp) # x / y
movl $format1, (%esp)
movl x, %eax
movl %eax, 4(%esp)
movl y, %eax
movl %eax, 8(%esp)
# operation modulo
movl x, %eax
cltd
idivl y
movl $format2, (%esp)
movl x, %eax
movl %eax, 4(%esp)
movl y, %eax
movl %eax, 8(%esp)
movl %edx, 12(%esp)
# operation multiply
movl x, %eax
mull y
movl $format3, (%esp)
movl x, %ecx
movl %ecx, 4(%esp)
movl y, %ecx
movl %ecx, 8(%esp)
movl %eax, 12(%esp)
movl %edx, 16(%esp)
addl $32, %esp
xor %eax, %eax
ret
LmNvbW0geCw0LDQKLmNvbW0geSw0LDQKCi5zZWN0aW9uICAgIC5yb2RhdGEKCmZvcm1hdDE6ICAgIC5zdHJpbmcgIkRpdiA6ICVkIC8gJWQgPSAlLjJmXG4iCmZvcm1hdDI6ICAgIC5zdHJpbmcgIk1vZCA6ICVkICUlICVkID0gJWRcbiIKZm9ybWF0MzogICAgLnN0cmluZyAiTXVsdGlwbHkgOiAldSAqICV1ID0gJWxsdVxuIgpmb3JtYXQ0OiAgICAuc3RyaW5nICIlZCAlZCIKY29uc3QxMDA6ICAgLmludCAxMDAKCi50ZXh0Ci5nbG9ibCAgbWFpbgoudHlwZSAgIG1haW4sIEBmdW5jdGlvbgptYWluOgogICAgc3VibCAkMzIsICVlc3AgIyBhbGxvY2F0ZSBzcGFjZSwgcHJlc2VydmUgYWxpZ25tZW50CgogICAgbW92bCAkZm9ybWF0NCwgKCVlc3ApCiAgICBtb3ZsICR4LCA0KCVlc3ApCiAgICBtb3ZsICR5LCA4KCVlc3ApCiAgICBjYWxsIHNjYW5mCgojIG9wZXJhdGlvbiBkaXZpZGUKICAgIGZpbGRsIHgKICAgIGZpbXVsIGNvbnN0MTAwCiAgICBmaWRpdmwgeQojIHRydW5jYXRlIHRvIGludGVnZXIKIyB1c2UgdGhpcyBpZiBjdXJyZW50IEZQVSByb3VuZGluZyBtb2RlCiMgaXMga25vd24gdG8gYmUgdHJ1bmNhdGUKIyAgIGZybmRpbnQKIyBvdGhlcndpc2UgdXNlIHRoaXMKICAgIGZuY2xleAogICAgZm5zdGN3ICglZXNwKSAgICAgICAjIHNhdmUgYSBjb3B5IHRvIG1vZGlmeQogICAgZm5zdGN3IDIoJWVzcCkgICAgICAjIGFuZCBhIGNvcHkgdG8gcHJlc2VydmUKICAgIG9ydyAkMHgwYzAwLCAoJWVzcCkgIyByb3VuZGluZyBtb2RlID0gdHJ1bmNhdGUKICAgIGZsZGN3ICglZXNwKSAgICAgICAgIyBhY3RpdmF0ZQogICAgZnJuZGludCAgICAgICAgICAgICAjIGRvIHRoZSB0cnVuY2F0ZQogICAgZmxkY3cgMiglZXNwKSAgICAgICAjIHJlc3RvcmUgb3JpZ2luYWwKIyBlbmQgb2YgdHJ1bmNhdGUgY29kZQogICAgZmlkaXYgY29uc3QxMDAKICAgIGZzdHBsIDEyKCVlc3ApICMgeCAvIHkKCiAgICBtb3ZsICRmb3JtYXQxLCAoJWVzcCkKICAgIG1vdmwgeCwgJWVheAogICAgbW92bCAlZWF4LCA0KCVlc3ApCiAgICBtb3ZsIHksICVlYXgKICAgIG1vdmwgJWVheCwgOCglZXNwKQogICAgY2FsbCBwcmludGYKCiMgb3BlcmF0aW9uIG1vZHVsbwogICAgbW92bCB4LCAlZWF4CiAgICBjbHRkCiAgICBpZGl2bCB5CiAgICBtb3ZsICRmb3JtYXQyLCAoJWVzcCkKICAgIG1vdmwgeCwgJWVheAogICAgbW92bCAlZWF4LCA0KCVlc3ApCiAgICBtb3ZsIHksICVlYXgKICAgIG1vdmwgJWVheCwgOCglZXNwKQogICAgbW92bCAlZWR4LCAxMiglZXNwKQogICAgY2FsbCBwcmludGYKCiMgb3BlcmF0aW9uIG11bHRpcGx5CiAgICBtb3ZsIHgsICVlYXgKICAgIG11bGwgeQogICAgbW92bCAkZm9ybWF0MywgKCVlc3ApCiAgICBtb3ZsIHgsICVlY3gKICAgIG1vdmwgJWVjeCwgNCglZXNwKQogICAgbW92bCB5LCAlZWN4CiAgICBtb3ZsICVlY3gsIDgoJWVzcCkKICAgIG1vdmwgJWVheCwgMTIoJWVzcCkKICAgIG1vdmwgJWVkeCwgMTYoJWVzcCkKICAgIGNhbGwgcHJpbnRmCgogICAgYWRkbCAkMzIsICVlc3AKICAgIHhvciAlZWF4LCAlZWF4CiAgICByZXQK