two symbols with the same address!!

two symbols with the same address!!

This post was updated on .

my code works but i think i did not fully understand!!

what i understant is:
in theimplementation part at stage 2, in first pass:
1) i have saved the predefiend symbols with their addresses (18 addresses in total 0-15 ,16384 and 24576).
2) i have saved the L_COMMANDS associated with the current ROM address in the same symbol table.

its true that in both cases i'v saved the pairs in the same table.. but they demonstrate different things:
1) i save the memory location of the symbol(or variable - pass2) RAM[address] <-> M[address].
2) i save the ROM address of the associated L_COMMAND. which is tottaly different than the above.

and here comes my problem: if the my conclusion is correct why what is written in section 6.1 holds :

""note that the variable allocation assumption implies that the largest program that we can run is 1,024 instructions
long. Since realistic programs (like the operating system) are obviously much larger,
the base address for storing variables will normally be much farther""

its confusing cuz if the L_COMMANDS addresses and the variable addresses can intersect, does it really matter which address do we start saving variables. i think the main thing that they are saved in consecutive memory blocks. right ??!!!

correct me if i'm wrong, i feel that i'm missing something.
----->i got two symbols with the same address value but not the same address (one as a ROM and the other as a RAM)

Your conclusion is correct; it's OK for ROM and RAM symbols with the same address to be stored in the symbol table.

and here comes my problem: if the my conclusion is correct why what is written in section 6.1 holds :

""note that the variable allocation assumption implies that the largest program that we can run is 1,024 instructions
long. Since realistic programs (like the operating system) are obviously much larger,
the base address for storing variables will normally be much farther""

This comment applies to computers that store both program code and data in RAM. In that case, if the variables were allocated at addresses that conflicted with where the program is stored, writing to the variables would change the program.

Since the Hack computer has separate code ROM and data RAM the differentiation between code and data addresses only occurs when they are used.

It is up to the programmer to make sure that he uses the symbol FOO correctly.

its confusing cuz if the L_COMMANDS addresses and the variable addresses can intersect, does it really matter which address do we start saving variables. i think the main thing that they are saved in consecutive memory blocks. right ??!!!

The reason to start allocating allocating RAM variables at 16 is so that RAM addresses 0-15 are reserved for special uses. The SP, LCL, etc. symbols will make more sense when you get to the Virtual Machine chapter.