.word expressions
This directive expects zero or more expressions, of any section, separated by commas.
In order to assemble compiler output into something that works,
occasionlly does strange things to `.word' directives.
Directives of the form `.word sym1-sym2' are often emitted by
compilers as part of jump tables. Therefore, when
assembles a
directive of the form `.word sym1-sym2', and the difference between
sym1
and sym2
does not fit in 16 bits,
creates a secondary jump table, immediately before the next label.
This secondary jump table is preceded by a short-jump to the
first byte after the secondary table. This short-jump prevents the flow
of control from accidentally falling into the new table. Inside the
table is a long-jump to
sym2
. The original `.word'
contains sym1
minus the address of the long-jump to
sym2
.
If there were several occurrences of `.word sym1-sym2' before the
secondary jump table, all of them are adjusted. If there was a
`.word sym3-sym4', that also did not fit in sixteen bits, a
long-jump to sym4
is included in the secondary jump table,
and the .word
directives are adjusted to contain sym3
minus the address of the long-jump to sym4
; and so on, for as many
entries in the original jump table as necessary.
Go to the first, previous, next, last section, table of contents.