division - i386 Assembly floating exception on div instruction -
i have been playing assembly recently, , when trying use div instruction, coming across floating exception. have searched online past day or 2 , nothing working. saw this question, , because of answer, put in 3 xorq instructions 0 out registers (specifically rdx because high byte of dividend), still didn't help. when compiling c program modulus operation (and creates few variables compiler doesn't optimize away modulus) using gcc -s myprog.c, gcc creates assembly file has cltd (convert signed long signed long double) instruction right before idivl. tried in program well, change anything. have tried using different size values in rax ans rbx, still doesn't work.
question: doing wrong, , weird quirks there using div instruction? this documentation have been using learning assembly.
in code below, function print prints contents of rax. don't care gets printed, printed can see instruction crashes program.
.cstring _format: .asciz "%d\n" .text .globl _main _main: # program setup pushq %rbp movq %rsp, %rbp # program - 16 byte aligned # 0 out registers xorq %rax, %rax xorq %rdx, %rdx xorq %rbx, %rbx # set values use in division movq $5, %rax movq $16, %rbx # cltd # 'gcc -s' command puts in cltd before idivl call print idivl %ebx, %eax ########### crash here call print # program cleanup popq %rbp ret # prints value in %rax (could junk, don't care. long printed) print: subq $8, %rsp # 16 byte alignment lea _format(%rip), %rdi movq %rax, %rsi call _printf addq $8, %rsp ret
Comments
Post a Comment