BRNE命令を使ったn重ループ

pp.78-80

.org 0
;
    ldi r30, 0
    ldi r31, 1
;
    ldi r18, 2 ; r18を最外ループカウンターとして使う。
loop3:
    ldi r17, 3 ; r17を中間ループカウンターとして使う。
loop2:
    ldi r16, 4 ; r16を最内ループカウンターとして使う。
loop1:
    add r30, r31 ; 何かに何かを加算して、
    dec r16
    brne loop1
    dec r17
    brne loop2
    dec r18
    brne loop3
;
    out PORTB, r30

f:id:ti-nspire:20200319071322p:plain
これと同じ。

#include <stdio.h>
int main(){
    int r30 = 0;
    int r31 = 1;

    int r18 = 2;
    do{int r17 = 3;
        do{int r16 = 4;
            do{r30 += r31;
            }while(--r16);
        }while(--r17);
    }while(--r18);

    printf("0x%x\n", r30);
    return 0;
}