Assembly 从3个嵌套循环计算延迟

Assembly 从3个嵌套循环计算延迟,assembly,avr,timing,Assembly,Avr,Timing,我的练习:•在1 MHz时钟频率下,使用三个环路计算可能的最大延迟。(答复49.94 s) 我试着用这3个循环来计算最大延迟,答案显然是49.94秒,我真的很难用2个嵌套循环来计算 这是我尝试过的,但答案远非如此 33*((255*3)-1) + 17*((33*3)-1) + 11*3 ldi-1个时钟周期,brne1或2个时钟周期 架构:ATmega8535对于初学者,最长的循环将加载0而不是FF到计数器,但让我们坚持FF,以便得到预期的答案。使用FF循环运行254次,并在第255次退出

我的练习:•在1 MHz时钟频率下,使用三个环路计算可能的最大延迟。(答复49.94 s)

我试着用这3个循环来计算最大延迟,答案显然是49.94秒,我真的很难用2个嵌套循环来计算

这是我尝试过的,但答案远非如此

33*((255*3)-1) + 17*((33*3)-1) + 11*3
ldi
-1个时钟周期,
brne
1或2个时钟周期


架构:ATmega8535

对于初学者,最长的循环将加载
0
而不是
FF
到计数器,但让我们坚持
FF
,以便得到预期的答案。使用
FF
循环运行254次,并在第255次退出

一般公式为
ldi
1
(n-1)*(body+3)
的完整迭代(
1
dec
2
brne
)和
(body+2)
的最后一次(
1
dec
1
brne
body
表示循环体中的任何内容,对于
0
为空的最内层循环而言

因此,对于最里面的循环:
1+254*(0+3)+(0+2)=765
。 对于中间的循环,
body
是来自最里面循环的
765
,因此我们有:
1+254*(765+3)+(765+2)=195840
。 对于最外层的环,
body
是来自中间环的
195840
,因此
我们有:
1+254*(195840+3)+(195840+2)=49939965
,这是期望的答案。

对于初学者来说,最长的循环将加载
0
而不是
FF
到计数器,但让我们继续使用
FF
来获得期望的答案。使用
FF
循环运行254次,并在第255次退出

一般公式为
ldi
1
(n-1)*(body+3)
的完整迭代(
1
dec
2
brne
)和
(body+2)
的最后一次(
1
dec
1
brne
body
表示循环体中的任何内容,对于
0
为空的最内层循环而言

因此,对于最里面的循环:
1+254*(0+3)+(0+2)=765
。 对于中间的循环,
body
是来自最里面循环的
765
,因此我们有:
1+254*(765+3)+(765+2)=195840
。 对于最外层的环,
body
是来自中间环的
195840
,因此
我们有:
1+254*(195840+3)+(195840+2)=49939965
,这是预期的答案。

ldi r23,$FF;初始化第三循环计数器17
这是哪种体系结构?将其添加到标签
ldi r23,$FF;初始化第三循环计数器17
这是哪种体系结构?将它添加到tagI我对(body+3)有点困惑,现在ldi运行一次,所以1,然后dec和brne运行254次,所以在最后一个循环上不是2*254吗brne是2,所以整个事情看起来像是1+2*254+2你将时间交换为
brne
,当它跳回时需要2个时钟,也就是在循环中,1个时钟,当它不跳跃时,这是最后一次迭代。我现在得到了它,谢谢:)我不是想给你带来负担,但是你能告诉我延迟是什么,例如循环r23,$06,r24,$FD,r23,$DD;使用相同的数字更难理解我对这些数字的回答是1174836个时钟周期我正试图在Excel中重新创建它,这样我就不必每次得到
1011006
时都计算它,但可能会弄糟:)你说得对,再次感谢!我搞乱了循环的顺序我对(body+3)有点困惑,现在ldi运行一次,所以1,然后dec,brne运行254次,所以在最后一个循环中不是2*254吗brne是2,所以整个事情看起来像是1+2*254+2,你把时间换成了
brne
,当它跳回时需要2个时钟,也就是在循环中,1个时钟,当它不跳跃时,这是最后一次迭代。我现在得到了它,谢谢:)我不是想给你带来负担,但是你能告诉我延迟是什么,例如循环r23,$06,r24,$FD,r23,$DD;使用相同的数字更难理解我对这些数字的回答是1174836个时钟周期我正试图在Excel中重新创建它,这样我就不必每次得到
1011006
时都计算它,但可能会弄糟:)你说得对,再次感谢!我搞乱了循环的顺序
33*((255*3)-1) + 17*((33*3)-1) + 11*3