итерации, оставшейся до крайнего срока, оставайтесь в очень маленькой петле задержки на оставшееся время. Большинство проблем петель задержки устраняются, если они очень короткие.

по этой ссылкезадержка в сборке добавить задержку в сборке. Я хочу провести некоторый эксперимент, добавив другое значение задержки.

Полезный код для генерации задержки

; start delay

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

Как я понял из кода, задержка пропорциональна времени, которое она тратит на выполнение инструкций nop (43690x43690). Так что в разных системах и разных версиях ОС задержка будет разной. Я прав?

Может кто-нибудь объяснить мне, как рассчитать величину задержки в нсек, генерируется следующий код сборки, чтобы я мог завершить свой эксперимент в отношении задержки, которую я добавил в свою экспериментальную установку?

Это код, который я использую для генерации задержки, без понимания логики использования значения 43690 (я использовал только один цикл против двух циклов в исходном исходном коде). Чтобы сгенерировать другую задержку (не зная ее значения), я просто изменил число от 43690 до 403690 или другое значение.

Код в 32-битной ОС

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

Сколько задержки генерируется этим ассемблерным кодом?

Если я хочу сгенерировать 100 нсек или 1000 нсек или любую другую задержку в микросекундах, какое начальное значение мне нужно загрузить в регистр?

Я использую Ubuntu 16.04 (как 32-битные, так и 64-битные), в процессорах Intel® Core Core ™ TM5 i5-7200U с тактовой частотой 2,50 ГГц и Core-i3 CPU 3470 с тактовой частотой 3,20 ГГц.

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос