汇编语言,奇怪的循环

时间:2014-06-24 02:16:16

标签: assembly

我很难理解这段代码的作用

ldi r20, 80
loop: asr r20
     brsh loop
      nop

此代码执行的是什么以及此代码执行了多少个时钟周期?

2 个答案:

答案 0 :(得分:0)

这似乎是Atmel AVR汇编代码。在一个循环中,一直持续到状态寄存器的进位位置位,它会将十六进制80算术右移一个位置,以便r2080的连续值,然后{{ 1}},然后是c0,然后是e0f0f8fcfe。到目前为止,低位已为ff,并且该值已移入状态寄存器的进位位。但是在下一个班次中,0的低位被移位,这是ff。这会导致循环退出。

请参阅ASR指令的http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_ASR.html

净效应是造成小延迟。

答案 1 :(得分:0)

对于时钟周期:

  • ldi = 1,
  • asr = 1,
  • brsh =记录在1/2我认为1表示错误状态,2表示真实。
  • nop = 1

基因似乎在他的回答中是正确的,所以如果我的计数是正确的,总共17(不要赌任何钱)。

时钟周期的来源是: http://www.avr-asm-tutorial.net/avr_en/beginner/COMMANDS.html#Functions