Mercurial > hg-old > index.cgi
annotate doc/internals.txt @ 407:b2e007c28b8f
Changed ENDS to be ENDSTRUCT instead of ENDSECTION since ENDSTRUCT is required but ENDSECTION is not; updated docs to reflect change
author | lost@l-w.ca |
---|---|
date | Fri, 23 Jul 2010 19:53:43 -0600 |
parents | 656630007668 |
children |
rev | line source |
---|---|
331 | 1 LWASM Internals |
2 =============== | |
3 | |
4 LWASM is a table-driven assembler that notionally uses two passes. However, | |
5 it implements its assembly in several passes as follows. | |
6 | |
333
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
7 Pass 1 |
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
8 ------ |
331 | 9 |
333
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
10 This pass reads the entire source code and parses each line into an internal |
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
11 representation. Macros, file inclusions, and conditional assembly |
363
d96c30e60ddf
Added pass2 and various supporting logic including symbol lookups
lost@starbug
parents:
338
diff
changeset
|
12 instructions are resolved at this point as well. Instructions with known |
d96c30e60ddf
Added pass2 and various supporting logic including symbol lookups
lost@starbug
parents:
338
diff
changeset
|
13 sizes will have their sizes resolved at this point. |
333
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
14 |
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
15 Pass 2 |
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
16 ------ |
331 | 17 |
363
d96c30e60ddf
Added pass2 and various supporting logic including symbol lookups
lost@starbug
parents:
338
diff
changeset
|
18 Check all exported symbols for validity and set them as imports if the |
d96c30e60ddf
Added pass2 and various supporting logic including symbol lookups
lost@starbug
parents:
338
diff
changeset
|
19 assembler state says so. Also resolve all symbol references in all |
d96c30e60ddf
Added pass2 and various supporting logic including symbol lookups
lost@starbug
parents:
338
diff
changeset
|
20 expressions to be direct references either to the symbol table or |
d96c30e60ddf
Added pass2 and various supporting logic including symbol lookups
lost@starbug
parents:
338
diff
changeset
|
21 to the import list. |
331 | 22 |
333
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
23 Pass 3 |
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
24 ------ |
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
25 |
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
26 This pass resolves all instruction sizes that can be resolved without |
365 | 27 forcing any instruction sizes. This pass will run repeatedly until no |
28 no new resolution occurs. | |
331 | 29 |
333
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
30 Pass 4 |
ebff3a3e8fa6
Updated internals to describe the multi-pass architecture
lost
parents:
331
diff
changeset
|
31 ------ |
331 | 32 |
365 | 33 Work through all un-resolved instructions and force sizes. After each size |
34 is forced, try re-resolving all other instructions. This is done starting | |
35 at the beginning of the source and working forward. If any instruction does | |
36 not resolve when forced, an error will be thrown. | |
367 | 37 |
38 Pass 5 | |
39 ------ | |
40 | |
41 Constantize all line addresses and throw errors if any cannot be. This | |
42 pass will repeat until no further lines addresses are reduced to constants | |
43 at which time all lines will be checked for constant-ness. | |
44 | |
45 Pass 6 | |
46 ------ | |
47 | |
48 Finalize all expressions related to instructions. Carp about any that | |
49 cannot be reduced to a usable form. That means, for the non-object target | |
50 all expressions must resolve to a constant. For the object form, all | |
51 expressions must resolve to symbol references and constants. Those symbol | |
52 references may be internal or external. | |
368 | 53 |
54 Pass 7 | |
55 ------ | |
56 | |
57 Emit object code for each line for later output. |