Ensamblaje: ¿Cómo multiplicar / dividir una constante por otra constante en el ensamblaje?
Entonces, tengo una función de ensamblaje, que se llama en C. Se compila y no me da advertencias, pero cuando intento ejecutarla, me da un error de segmentación. Creo que es porque no puedo mover una constante a un registro, pero para usar el comando mul / div se requiere un valor para estar en el registro EAX. ¿Cómo puedo multiplicar o dividir dos constantes en el ensamblaje?
Aquí está el código hasta ahora ...
.section .data
.global n
.equ A, 50
.equ B, 5
.section .text
.global loop_function
loop_function:
# prologue
pushl %ebp # save previous stack frame pointer
movl %esp, %ebp # the stack frame pointer for sum function
# beginning
movl i, %ebx # place i (declared in c) in ebx
movl A, %eax # place A in eax
movl B, %ecx # place B in ecx
jmp loop
loop:
movl $0, %edx # clean edx register
cdq
idivl %ecx # A / B, result in eax
imull %ebx # i * A / B, result in eax
incl %ebx
cmpl %ebx, n # if i <= n
jle loop # then jumps to loop
jmp end # else jumps to end
end:
# epilogue
movl %ebp, %esp # restore the previous stack pointer ("clear" the stack)
popl %ebp # restore the previous stack frame pointer
ret