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

Respuestas a la pregunta(2)

Su respuesta a la pregunta