从 3 个嵌套循环计算延迟
Calculating delay from 3 nested loops
我的练习: •计算在 1 MHz 时钟频率下使用三个循环可能的最大延迟。 (回答 49.94 秒)
delay: ldi r23,$FF ;Initialise 3rd loop counter
loop3: ldi r24,$FF ;Initialise 2nd loop counter
loop2: ldi r25,$FF ;Initialise 1st loop counter
loop1: dec r25 ;Decrement the 1st loop counter
brne loop1 ;and continue to decrement until 1st loop counter = 0
dec r24 ;Decrement the 2nd loop counter
brne loop2 ;If the 2nd loop counter is not equal to zero repeat the 1st loop, else continue
dec r23
brne loop3
ret ;Return
我正在尝试使用这 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 次退出。
通用公式是 1
for ldi
,(n-1) * (body + 3)
for full iterations (1
for dec
and 2
for 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
这是预期的答案。
我的练习: •计算在 1 MHz 时钟频率下使用三个循环可能的最大延迟。 (回答 49.94 秒)
delay: ldi r23,$FF ;Initialise 3rd loop counter
loop3: ldi r24,$FF ;Initialise 2nd loop counter
loop2: ldi r25,$FF ;Initialise 1st loop counter
loop1: dec r25 ;Decrement the 1st loop counter
brne loop1 ;and continue to decrement until 1st loop counter = 0
dec r24 ;Decrement the 2nd loop counter
brne loop2 ;If the 2nd loop counter is not equal to zero repeat the 1st loop, else continue
dec r23
brne loop3
ret ;Return
我正在尝试使用这 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 次退出。
通用公式是 1
for ldi
,(n-1) * (body + 3)
for full iterations (1
for dec
and 2
for 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
这是预期的答案。