LeoLabs
Newbie level 4

Why does IAR use pointers for unsigned char instead STS-commands?
(from listing, Optimisation - High)
5 #pragma vector = TIMER2_OVF_vect
\ In segment CODE, align 2, keep-with-next
6 __interrupt void system_timer(void)
\ system_timer:
7 {
\ 00000000 93FA ST -Y, R31
\ 00000002 93EA ST -Y, R30
\ 00000004 931A ST -Y, R17
\ 00000006 930A ST -Y, R16
\ 00000008 B71F IN R17, 0x3F
8 blink_timer++;
\ 0000000A .... LDI R30, LOW(blink_timer)
\ 0000000C .... LDI R31, (blink_timer) >> 8
\ 0000000E 8100 LD R16, Z
\ 00000010 9503 INC R16
\ 00000012 8300 ST Z, R16
9 }
\ 00000014 BF1F OUT 0x3F, R17
\ 00000016 9109 LD R16, Y+
\ 00000018 9119 LD R17, Y+
\ 0000001A 91E9 LD R30, Y+
\ 0000001C 91F9 LD R31, Y+
\ 0000001E 9518 RETI
Do I make a mistake or IAR does?
(from listing, Optimisation - High)
5 #pragma vector = TIMER2_OVF_vect
\ In segment CODE, align 2, keep-with-next
6 __interrupt void system_timer(void)
\ system_timer:
7 {
\ 00000000 93FA ST -Y, R31
\ 00000002 93EA ST -Y, R30
\ 00000004 931A ST -Y, R17
\ 00000006 930A ST -Y, R16
\ 00000008 B71F IN R17, 0x3F
8 blink_timer++;
\ 0000000A .... LDI R30, LOW(blink_timer)
\ 0000000C .... LDI R31, (blink_timer) >> 8
\ 0000000E 8100 LD R16, Z
\ 00000010 9503 INC R16
\ 00000012 8300 ST Z, R16
9 }
\ 00000014 BF1F OUT 0x3F, R17
\ 00000016 9109 LD R16, Y+
\ 00000018 9119 LD R17, Y+
\ 0000001A 91E9 LD R30, Y+
\ 0000001C 91F9 LD R31, Y+
\ 0000001E 9518 RETI
Do I make a mistake or IAR does?