assembly 嵌套循环-有人能解释一下这个循环吗?

p4tfgftt  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(125)

有人能解释一下这种类型的循环是如何工作的吗,我从一个总延迟为1秒的代码中提取了它,我不明白LOOP 2和3的功能。

DELAY:
        MOVLW 0X44
        MOVWF C1
LOOP3:
        MOVLW 0X33
        MOVWF C2
LOOP2:  
        MOVLW 0X44
        MOVWF C3
LOOP1: 
        DECFSZ C3
        GOTO LOOP1
        DECFSZ C2
        GOTO LOOP2
        DECFSZ C1
        GOTO LOOP3
        RETURN
END
nwnhqdif

nwnhqdif1#

汇编语言是很难被人类阅读的。它没有我们可以轻易阅读的可见的层次代码结构。但另一方面,汇编语言的局限性只是它的架构的天空,我的意思是它的强大和灵活。
下面这个循环的C实现将帮助初学汇编的人理解这个循环是如何工作的,并给予他们一些启示。实际上,如果你写下面的C代码并看一下它的反汇编,你会看到类似的汇编代码。

unsigned char C1, C2, C3;

void DELAY(void) {
  // This loop corresponds to LOOP3 label which is outermost loop entry
  for(C1 = 0x44; C1 > 0; C1--){
    // This loop corresponds to LOOP2 label which is the medium loop entry
    for(C2 = 0x33; C2 > 0; C2--) {
      // This loop corresponds to LOOP1 label which is the innermost loop entry
      for(C3 = 0x44; C3 > 0; C3--) {

      }
    }
  }
}

正如其他人所说,您将有一个 0x44 * 0x33 * 0x44 迭代,等于 * 235,824 * 迭代,除非我们不计算CALLRETURN指令。

相关问题