我很难理解这段代码的作用
ldi r20, 80
loop: asr r20
brsh loop
nop
此代码执行的是什么以及此代码执行了多少个时钟周期?
答案 0 :(得分:0)
这似乎是Atmel AVR汇编代码。在一个循环中,一直持续到状态寄存器的进位位置位,它会将十六进制80
算术右移一个位置,以便r20
取80
的连续值,然后{{ 1}},然后是c0
,然后是e0
,f0
,f8
,fc
,fe
。到目前为止,低位已为ff
,并且该值已移入状态寄存器的进位位。但是在下一个班次中,0
的低位被移位,这是ff
。这会导致循环退出。
请参阅ASR指令的http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_ASR.html。
净效应是造成小延迟。
答案 1 :(得分:0)
对于时钟周期:
基因似乎在他的回答中是正确的,所以如果我的计数是正确的,总共17(不要赌任何钱)。
时钟周期的来源是: http://www.avr-asm-tutorial.net/avr_en/beginner/COMMANDS.html#Functions