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



有人能解释一下这种类型的循环是如何工作的吗?我从一个总延迟为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

汇编语言很难被人类阅读。它不包含我们可以轻松阅读的可见的分层代码结构。但另一方面,组装的限制只是它的建筑的天空,我的意思是它强大而灵活。

下面的循环的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指令。

最新更新