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
これと同じ。
#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; }