gpt4 book ai didi

assembly - 计算值以输入 assembly 程序中的声音延迟

转载 作者:行者123 更新时间:2023-12-03 01:33:02 25 4
gpt4 key购买 nike

我正在查看一个与音符音序器有关的程序,该音序器播放具有不同持续时间的不同音符,在某些音符中间会有0.5s或0.25s的延迟,因此我无法找出一种方法来计算要加载到寄存器中的值,以实现所需的持续时间。

我搜索了Wiki和其他一些在线资源,例如从此网站:https://www.avr-tutorials.com/assembly/calculating-execution-time-sequential-code,以查找如何计算功能的执行时间。

delay:
push {lr}
ldr r10, =12000 @ in fact this function will result in a delay of 0.25s
b loop
loop:
..... @ some instructions to play sound
subs r10, #1 @ in each loop the time counter is subtracted by 1
cmp r10, #0 @ when time counter reaches zero, branch to a end function
beq end
b loop @ loop the function until time counter hits zero

例如,上面的函数以 r10寄存器作为时间计数器,在另一个 loop函数中,添加了 0值(意味着将0 Hz声音输入到 register中以在音符之间产生延迟),并通过 r0寄存器 mov r0, #0,并且我想找出需要加载到时间计数器 r10中的值,以便让我像 0.5s0.25s一样播放0 Hz声音,以及如何计算要加载的值。知道确切的说法是什么,但是也许我将其表述为“计算程序中的延迟时间”?

我在其他地方找到的 delay函数实际上确实会导致 0.25s延迟,但我不知道它是如何工作的。我猜测时间计数器 r10在每个循环中从中减去1需0.25秒。但是我真的无法弄清楚这种计算是如何产生的。

谢谢。

最佳答案

只需回答..in fact really result in a 0.25s delay but I don't understand how does it work部分(实际上,这是我可以识别为一个问题的唯一问题):

CPU指令需要一定的固定时间才能在以给定频率时钟的给定CPU上执行(*)。知道了这些数据,您就可以计算出获得所需延迟所需的循环迭代次数。这只是一个简单的算术任务。

(*)这不适用于大多数现代CPU,出于多种原因,强烈建议不要采用这种实现延迟的方法。

关于assembly - 计算值以输入 assembly 程序中的声音延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55963877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com