We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
The T_T_HELLOMSG string starts with address 0000H. How can the other variables in the progam ?_MYPUTCHAR?BYTE, ?TST_PRINTF?BYTE, P_A?141, MM_IX?251 have the same address ?? Same story with the following two variables: T_NUM_DATA. . . . . X ADDR 001CH R SEG=?XD?TEST BUF?148 . . . . . . X ADDR 0012H R SEG=?XD?TST_PRINTF?TEST Any help to explain how to interpret symbol table the right way will be appreciated. c code ====== #include <REG66x.H> /* for the intended 8051 derivative */ #include <stdio.h> /* prototype declarations for I/O functions */ #include <stdlib.h> #include <string.h> #include <math.h> sfr T_SBUF = 0x99; char xdata t_helloMsg[] = "Hello World"; char xdata t_msg[16]; char xdata t_buffer[32]; unsigned int xdata t_num_data[32]; char xdata t_msg1[64] = { 0 , 0xfe, 0x10, 0x10, 0x10, 0xfe, 0, 0xfc, 0x12, 0x12, 0x12, 0xfc, 0, 0xfe, 0x08, 0x10, 0x20, 0xfe, 0, 0x02, 0x02, 0xfe, 0x02, 0x02, 0, 0xfe, 0x12, 0x32, 0x52, 0x8c, 0, 0x7c, 0x82, 0x82, 0x82, 0x7c, 0, 0xfe, 0x08, 0x10, 0x20, 0xfe, 0, 0x0 , 0x0 , 0x82, 0xfe, 0x82, 0, 0 , 0xc6, 0x28, 0x10, 0x28, 0xc6, 0, 0 , 0x38, 0x7c, 0xf8, 0x7c, 0x38, 0, 0 }; char myputchar (char mp_c1) { while (!TI); TI = 0; return (T_SBUF = mp_c1); } void tst_printf() { char xdata p_a; int xdata p_b; long xdata c3; unsigned char xdata x; unsigned int xdata y; unsigned long xdata z; float xdata f; char xdata buf[] = "Test String"; char xdata *p = buf; char xdata lcd_y[2]; } void main (void) { int xdata mm_ix; int xdata mm_j; char m_c2; while (1); } test.ls1 selected output ======================== N A M E T Y P E V A L U E ATTRIBUTES T_HELLOMSG. . . . . X ADDR 0000H R SEG=?XD?TEST T_MSG . . . . . . . X ADDR 000CH R SEG=?XD?TEST T_NUM_DATA. . . . . X ADDR 001CH R SEG=?XD?TEST T_MSG1. . . . . . . X ADDR 005CH R SEG=?XD?TEST T_BUFFER. . . . . . X ADDR 009CH R SEG=?XD?TEST MP_C1?040 . . . . . X ADDR 0000H R SEG=?XD?_MYPUTCHAR?TEST ?_MYPUTCHAR?BYTE. . X ADDR 0000H R SEG=?XD?_MYPUTCHAR?TEST ?TST_PRINTF?BYTE. . X ADDR 0000H R SEG=?XD?TST_PRINTF?TEST P_A?141 . . . . . . X ADDR 0000H R SEG=?XD?TST_PRINTF?TEST P_B?142 . . . . . . X ADDR 0001H R SEG=?XD?TST_PRINTF?TEST C3?143. . . . . . . X ADDR 0003H R SEG=?XD?TST_PRINTF?TEST X?144 . . . . . . . X ADDR 0007H R SEG=?XD?TST_PRINTF?TEST Y?145 . . . . . . . X ADDR 0008H R SEG=?XD?TST_PRINTF?TEST Z?146 . . . . . . . X ADDR 000AH R SEG=?XD?TST_PRINTF?TEST F?147 . . . . . . . X ADDR 000EH R SEG=?XD?TST_PRINTF?TEST BUF?148 . . . . . . X ADDR 0012H R SEG=?XD?TST_PRINTF?TEST P?149 . . . . . . . X ADDR 001EH R SEG=?XD?TST_PRINTF?TEST LCD_Y?150 . . . . . X ADDR 0020H R SEG=?XD?TST_PRINTF?TEST ?MAIN?BYTE. . . . . X ADDR 0000H R SEG=?XD?MAIN?TEST ?MAIN?BYTE. . . . . X ADDR 0000H R SEG=?XD?MAIN?TEST MM_IX?251 . . . . . X ADDR 0000H R SEG=?XD?MAIN?TEST MM_J?252. . . . . . X ADDR 0002H R SEG=?XD?MAIN?TEST M_C2?253. . . . . . X ADDR 0004H R SEG=?XD?MAIN?TEST
The T_T_HELLOMSG string starts with address 0000H.... T_HELLOMSG. . . . . X ADDR 0000H R SEG=?XD?TEST The T_T_HELLOMSG string starts with address 0000H in segment ?XD?TEST so the effective address will be ?XD?TEST + 0000H Erik