Delays in C


Looking at compiled code to determine how many loops to execute to make a 1 ms delay


Here is the delay function:

void delay(int num)
{
    int i;

    while (num>0)       /* Out loop delays num ms */
    {
        i = 1333;       /* Inner loop takes 6 cycles */
        while (i > 0)   /* 1333 times 6 = 1 ms */
        {
            i = i-1;
        }
        num = num - 1;
    }
}
Here is the mahcine code:
                ; 27 void delay(int num)
                0851            _delay:
                0851 3b             pshd
                0852 3b             pshd
                00000002   OFST:   set 2
                0853 200d           bra L55
                0855         L35:
                0855 cd0535         ldy #1333
                0858         L16:
                0858 03             dey           <-----    1
                0859 6d80           sty OFST-2,s       |    2
                085b 2efb           bgt L16       ------    3/1
                085d ed82           ldy OFST+0,s
                085f 03             dey
                0860 6d82           sty OFST+0,s
                0862         L55:
                0862 ec82           ldd OFST+0,s
                0864 2eef           bgt L35
                0866 1b84           leas    4,s
                0868 3d             rts
The inner loop consists of the three instructions:
                0858         L16:       dey 
                0859 6d80               sty OFST-2,s
                085b 2efb               bgt L16
This takes 6 cycles. 1 ms is 8000 cycles, so to wait for 1 ms, execute this loop 8000/6 = 1333 times.