Quanto atraso é gerado por este código de montagem no linux

Eu estava passando por esse linkatraso na montagem para adicionar atraso na montagem. Quero realizar algumas experiências adicionando um valor de atraso diferente.

O código útil para gerar atraso

; start delay

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

Pelo que entendi pelo código, o atraso é proporcional ao tempo gasto para executar as instruções nop (43690x43690). Portanto, no sistema diferente e na versão diferente do sistema operacional, o atraso será diferente. Estou certo?

Alguém pode me explicar como calcular a quantidade de atraso no nsec, o código de montagem a seguir está sendo gerado para que eu possa concluir meu experimento com relação ao atraso adicionado na minha configuração experimental?

Este é o código que estou usando para gerar atraso wi, sem entender a lógica por trás do uso do valor 43690 (usei apenas um loop contra dois loops no código-fonte original). Para gerar um atraso diferente (sem saber seu valor), apenas variei o número 43690 a 403690 ou outro valor.

Código no SO de 32 bits

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

Quanto atraso é gerado por esse código de montagem?

Se eu quiser gerar 100nsec ou 1000nsec ou qualquer outro atraso no microsseg, qual será o valor inicial que preciso carregar no registro?

Estou usando o ubuntu 16.04 (tanto de 32 bits quanto de 64 bits), no processador Intel (R) Core (TM) i5-7200U a 2.50GHz e no processador Core-i3 CPU 3470 a 3.20GHz.

Agradeço antecipadamente.

questionAnswers(1)

yourAnswerToTheQuestion