итерации, оставшейся до крайнего срока, оставайтесь в очень маленькой петле задержки на оставшееся время. Большинство проблем петель задержки устраняются, если они очень короткие.
по этой ссылкезадержка в сборке добавить задержку в сборке. Я хочу провести некоторый эксперимент, добавив другое значение задержки.
Полезный код для генерации задержки
; 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 ГГц.
Заранее спасибо.