Cuánto retraso genera este código de ensamblaje en Linux

Estaba pasando por este enlaceretraso en el montaje para agregar demora en el montaje. Quiero realizar un experimento agregando diferentes valores de retraso.

El código útil para generar retraso

; start delay

mov bp, 43690
mov si, 43690
delay2:
dec bp
nop
jnz delay2
dec si
cmp si,0    
jnz delay2
; end delay

Lo que entendí del código, la demora es proporcional al tiempo que dedica a ejecutar instrucciones nop (43690x43690). Entonces, en diferentes sistemas y diferentes versiones del sistema operativo, el retraso será diferente. Estoy en lo cierto?

¿Alguien puede explicarme cómo calcular la cantidad de retraso en nseg, se genera el siguiente código de ensamblaje para que pueda concluir mi experimento con respecto al retraso que agregué en mi configuración experimental?

Este es el código que estoy usando para generar un retraso sin comprender la lógica detrás del uso del valor 43690 (solo usé un bucle contra dos bucles en el código fuente original). Para generar un retraso diferente (sin conocer su valor), simplemente varié el número 43690 a 403690 u otro valor.

Código en SO de 32 bits

movl  $43690, %esi   ; ---> if I vary this 4003690 then delay value ??
.delay2:
    dec %esi
    nop
    jnz .delay2

¿Cuánto retraso genera este código de ensamblaje?

Si quiero generar 100nsec o 1000nsec o cualquier otro retraso en microsec, ¿cuál será el valor inicial que necesito cargar en el registro?

Estoy usando ubuntu 16.04 (tanto de 32 bits como de 64 bits), en Intel (R) Core (TM) i5-7200U CPU @ 2.50GHz y procesador Core-i3 CPU 3470 @ 3.20GHz.

Gracias de antemano.

Respuestas a la pregunta(1)

Su respuesta a la pregunta