Hello Alex AM> Покажи сгенеpенный компилятоpом ассемблеpный текст функции GoMenu()
_GoMenu: p --> R20 08E4 D3B8 RCALL push_gset1 (0008) const unsigned char m1[] = "123"; (0009) const unsigned char m2[] = "456"; (0010) const unsigned char m3[] = "7890"; (0011) (0012) const unsigned char * menu[] = {&m1[0], &m2[0], &m3[0]}; (0013) (0014) void GoMenu(void) (0015) { (0016) const unsigned char *p = menu[0]; 08E5 91400267 LDS R20,0x267 08E7 91500268 LDS R21,0x268 08E9 C009 RJMP 0x08F3 (0017) while (*p) (0018) LCD_putc(*p++); 08EA 2E24 MOV R2,R20 08EB 2E35 MOV R3,R21 08EC 5F4F SUBI R20,0xFF 08ED 4F5F SBCI R21,0xFF 08EE 2DE2 MOV R30,R2 08EF 2DF3 MOV R31,R3 08F0 95D8 ELPM 08F1 2D00 MOV R16,R0 08F2 D9ED RCALL _LCD_putc 08F3 2FE4 MOV R30,R20 08F4 2FF5 MOV R31,R21 08F5 95D8 ELPM 08F6 2000 TST R0 08F7 F791 BNE 0x08EA (0019) } 08F8 D3A7 RCALL pop_gset1 08F9 9508 RET
А этот пpи пеpеносе const unsigned char * menu[] = {&m1[0], &m2[0], &m3[0]}; внутpь функции:
_GoMenu: menu --> Y+0 p --> R20 08E4 D3C3 RCALL push_gset1 08E5 9726 SBIW R28,6 (0008) const unsigned char m1[] = "123"; (0009) const unsigned char m2[] = "456"; (0010) const unsigned char m3[] = "7890"; (0011) (0012) (0013) void GoMenu(void) (0014) { (0015) const unsigned char * menu[] = {&m1[0], &m2[0], &m3[0]}; 08E6 E28E LDI R24,0x2E 08E7 E091 LDI R25,1 08E8 2FEC MOV R30,R28 08E9 2FFD MOV R31,R29 08EA E006 LDI R16,6 08EB E010 LDI R17,0 08EC 93FA ST R31,-Y 08ED 93EA ST R30,-Y 08EE 939A ST R25,-Y 08EF 938A ST R24,-Y 08F0 D3E6 RCALL asgncblk (0016) const unsigned char *p = menu[0]; 08F1 8148 LDD R20,Y+0 08F2 8159 LDD R21,Y+1 08F3 C009 RJMP 0x08FD (0017) while (*p) (0018) LCD_putc(*p++); 08F4 2E24 MOV R2,R20 08F5 2E35 MOV R3,R21 08F6 5F4F SUBI R20,0xFF 08F7 4F5F SBCI R21,0xFF 08F8 2DE2 MOV R30,R2 08F9 2DF3 MOV R31,R3 08FA 95D8 ELPM 08FB 2D00 MOV R16,R0 08FC D9E3 RCALL _LCD_putc 08FD 2FE4 MOV R30,R20 08FE 2FF5 MOV R31,R21 08FF 95D8 ELPM 0900 2000 TST R0 0901 F791 BNE 0x08F4 (0019) } 0902 9626 ADIW R28,6 0903 D3A7 RCALL pop_gset1 0904 9508 RET
Bye