Well the assembly language is harder to read by humans. It does not consist of visible hierarchical code structures that we can read easily. But on the other hand the limits of assembly is only the skies of its architecture, I mean it powerful and flexible.
The following C implementation of that loop will help new assembly people to understand how that loop works and give them some aspect. In fact, if you write the C code below and have look at its disassembly, you will see the similar assembly code.
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--) {
}
}
}
}
As others said, you will have a 0x44 * 0x33 * 0x44 iterations that is equal to 235,824 iterations unless we don't count for CALL
and RETURN
instructions.