* doc/as.texinfo (M): Mention explicitly that -M changes macro
[deliverable/binutils-gdb.git] / gas / doc / as.texinfo
CommitLineData
66b818fb 1\input texinfo @c -*-Texinfo-*-
71dd3c40 2@c Copyright (c) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
e680d737
RP
3@c UPDATE!! On future updates--
4@c (1) check for new machine-dep cmdline options in
5@c md_parse_option definitions in config/tc-*.c
6@c (2) for platform-specific directives, examine md_pseudo_op
7@c in config/tc-*.c
8@c (3) for object-format specific directives, examine obj_pseudo_op
9@c in config/obj-*.c
10@c (4) portable directives in potable[] in read.c
f009d0ab
RP
11@c %**start of header
12@setfilename as.info
13@c ---config---
14@c defaults, config file may override:
15@set have-stabs
16@c ---
4b9f4409 17@include asconfig.texi
f009d0ab
RP
18@c ---
19@c common OR combinations of conditions
20@ifset AOUT
21@set aout-bout
22@end ifset
23@ifset BOUT
24@set aout-bout
25@end ifset
26@ifset H8/300
27@set H8
28@end ifset
29@ifset H8/500
30@set H8
31@end ifset
f009d0ab
RP
32@ifset SH
33@set H8
34@end ifset
9dcf8057
JL
35@ifset HPPA
36@set abnormal-separator
37@end ifset
f009d0ab
RP
38@c ------------
39@ifset GENERIC
40@settitle Using @value{AS}
41@end ifset
42@ifclear GENERIC
43@settitle Using @value{AS} (@value{TARGET})
44@end ifclear
66b818fb 45@setchapternewpage odd
66b818fb
RP
46@c %**end of header
47
fb5bec49
RP
48@c @smallbook
49@c @set SMALL
50@c WARE! Some of the machine-dependent sections contain tables of machine
51@c instructions. Except in multi-column format, these tables look silly.
52@c Unfortunately, Texinfo doesn't have a general-purpose multi-col format, so
53@c the multi-col format is faked within @example sections.
54@c
55@c Again unfortunately, the natural size that fits on a page, for these tables,
56@c is different depending on whether or not smallbook is turned on.
57@c This matters, because of order: text flow switches columns at each page
58@c break.
59@c
60@c The format faked in this source works reasonably well for smallbook,
61@c not well for the default large-page format. This manual expects that if you
62@c turn on @smallbook, you will also uncomment the "@set SMALL" to enable the
63@c tables in question. You can turn on one without the other at your
64@c discretion, of course.
65@ifinfo
66@set SMALL
67@c the insn tables look just as silly in info files regardless of smallbook,
68@c might as well show 'em anyways.
69@end ifinfo
70
80381063
RP
71@ifinfo
72@format
dd565f85
RP
73START-INFO-DIR-ENTRY
74* As: (as). The GNU assembler.
75END-INFO-DIR-ENTRY
80381063
RP
76@end format
77@end ifinfo
78
66b818fb
RP
79@finalout
80@syncodeindex ky cp
81
47342e8f 82@ifinfo
f009d0ab 83This file documents the GNU Assembler "@value{AS}".
47342e8f 84
71dd3c40 85Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
47342e8f
RP
86
87Permission is granted to make and distribute verbatim copies of
88this manual provided the copyright notice and this permission notice
89are preserved on all copies.
90
91@ignore
92Permission is granted to process this file through Tex and print the
93results, provided the printed document carries copying permission
94notice identical to this one except for the removal of this paragraph
95(this paragraph not being relevant to the printed manual).
96
97@end ignore
81fcb3ff
RP
98Permission is granted to copy and distribute modified versions of this manual
99under the conditions for verbatim copying, provided that the entire resulting
100derived work is distributed under the terms of a permission notice identical to
101this one.
47342e8f
RP
102
103Permission is granted to copy and distribute translations of this manual
81fcb3ff 104into another language, under the above conditions for modified versions.
47342e8f 105@end ifinfo
66b818fb 106
93b45514 107@titlepage
f009d0ab 108@title Using @value{AS}
71dd3c40 109@subtitle The @sc{gnu} Assembler
f009d0ab
RP
110@ifclear GENERIC
111@subtitle for the @value{TARGET} family
112@end ifclear
93b45514 113@sp 1
e680d737 114@subtitle January 1994
0b5b143a 115@sp 1
93b45514
RP
116@sp 13
117The Free Software Foundation Inc. thanks The Nice Computer
118Company of Australia for loaning Dean Elsner to write the
71dd3c40 119first (Vax) version of @code{as} for Project @sc{gnu}.
93b45514
RP
120The proprietors, management and staff of TNCCA thank FSF for
121distracting the boss while they got some work
122done.
123@sp 3
7d7ecbdd 124@author Dean Elsner, Jay Fenlason & friends
47342e8f
RP
125@page
126@tex
47342e8f 127{\parskip=0pt
f009d0ab 128\hfill {\it Using {\tt @value{AS}}}\par
71dd3c40 129\hfill Edited by Cygnus Support\par
47342e8f 130}
b50e59fe
RP
131%"boxit" macro for figures:
132%Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3)
133\gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt
134 \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil
135#2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline
136\gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box
47342e8f 137@end tex
93b45514 138
47342e8f 139@vskip 0pt plus 1filll
71dd3c40 140Copyright @copyright{} 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
93b45514
RP
141
142Permission is granted to make and distribute verbatim copies of
143this manual provided the copyright notice and this permission notice
144are preserved on all copies.
145
81fcb3ff
RP
146Permission is granted to copy and distribute modified versions of this manual
147under the conditions for verbatim copying, provided that the entire resulting
148derived work is distributed under the terms of a permission notice identical to
149this one.
93b45514
RP
150
151Permission is granted to copy and distribute translations of this manual
81fcb3ff 152into another language, under the above conditions for modified versions.
93b45514 153@end titlepage
f009d0ab 154
d0281557 155@ifinfo
242d9c06 156@node Top
f009d0ab 157@top Using @value{AS}
242d9c06 158
8babef85 159This file is a user guide to the @sc{gnu} assembler @code{@value{AS}}.
f009d0ab
RP
160@ifclear GENERIC
161This version of the file describes @code{@value{AS}} configured to generate
162code for @value{TARGET} architectures.
163@end ifclear
7a4c8e5c 164@menu
ba487f3a
RP
165* Overview:: Overview
166* Invoking:: Command-Line Options
167* Syntax:: Syntax
168* Sections:: Sections and Relocation
169* Symbols:: Symbols
170* Expressions:: Expressions
171* Pseudo Ops:: Assembler Directives
f009d0ab 172* Machine Dependencies:: Machine Dependent Features
9a5acea8 173* Reporting Bugs:: Reporting Bugs
9dcf8057 174* Acknowledgements:: Who Did What
66b818fb 175* Index:: Index
7a4c8e5c 176@end menu
242d9c06 177@end ifinfo
7a4c8e5c 178
242d9c06 179@node Overview
b50e59fe 180@chapter Overview
d0281557 181@iftex
8babef85 182This manual is a user guide to the @sc{gnu} assembler @code{@value{AS}}.
f009d0ab
RP
183@ifclear GENERIC
184This version of the manual describes @code{@value{AS}} configured to generate
185code for @value{TARGET} architectures.
186@end ifclear
d0281557 187@end iftex
b50e59fe 188
66b818fb
RP
189@cindex invocation summary
190@cindex option summary
191@cindex summary of options
f009d0ab 192Here is a brief summary of how to invoke @code{@value{AS}}. For details,
7a4c8e5c 193@pxref{Invoking,,Comand-Line Options}.
b50e59fe 194
7d7ecbdd 195@c We don't use deffn and friends for the following because they seem
b50e59fe 196@c to be limited to one line for the header.
d0281557 197@smallexample
71dd3c40
ILT
198@value{AS} [ -a[dhlns][=file] ] [ -D ] [ --defsym @var{sym}=@var{val} ]
199 [ -f ] [ --help ] [ -I @var{dir} ] [ -J ] [ -K ] [ -L ]
200 [ -o @var{objfile} ] [ -R ] [ --statistics ] [ -v ] [ -version ]
201 [ --version ] [ -W ] [ -w ] [ -x ] [ -Z ]
f009d0ab 202@ifset A29K
2d8e0f62 203@c am29k has no machine-dependent assembler options
f009d0ab 204@end ifset
99c4053d
KR
205@c start-sanitize-arc
206@ifset ARC
207 [ -mbig-endian | -mlittle-endian ]
208@end ifset
209@c end-sanitize-arc
9a5acea8
ILT
210@c start-sanitize-d10v
211@ifset D10V
212 [ -O ]
213@end ifset
214@c end-sanitize-d10v
215
f009d0ab
RP
216@ifset H8
217@c Hitachi family chips have no machine-dependent assembler options
218@end ifset
9dcf8057
JL
219@ifset HPPA
220@c HPPA has no machine-dependent assembler options (yet).
221@end ifset
f009d0ab 222@ifset SPARC
71dd3c40
ILT
223@c The order here is important. See c-sparc.texi.
224 [ -Av6 | -Av7 | -Av8 | -Asparclite | -Av9 | -Av9a ]
225 [ -xarch=v8plus | -xarch=v8plusa ] [ -bump ]
f009d0ab
RP
226@end ifset
227@ifset Z8000
2d8e0f62 228@c Z8000 has no machine-dependent assembler options
f009d0ab
RP
229@end ifset
230@ifset I960
9ebc250f 231@c see md_parse_option in tc-i960.c
81fcb3ff 232 [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ]
b3b2623c 233 [ -b ] [ -no-relax ]
f009d0ab
RP
234@end ifset
235@ifset M680X0
81fcb3ff 236 [ -l ] [ -m68000 | -m68010 | -m68020 | ... ]
34214344
KR
237@end ifset
238@ifset MIPS
b3b2623c
KR
239 [ -nocpp ] [ -EL ] [ -EB ] [ -G @var{num} ] [ -mcpu=@var{CPU} ]
240 [ -mips1 ] [ -mips2 ] [ -mips3 ] [ -m4650 ] [ -no-m4650 ]
dd565f85 241 [ --trap ] [ --break ]
ba5ceb30 242 [ --emulation=@var{name} ]
f009d0ab 243@end ifset
81fcb3ff 244 [ -- | @var{files} @dots{} ]
d0281557 245@end smallexample
47342e8f
RP
246
247@table @code
0193302d 248@item -a[dhlns]
05a0e43b
RP
249Turn on listings, in any of a variety of ways:
250
251@table @code
252@item -ad
b3b2623c 253omit debugging directives
05a0e43b
RP
254
255@item -ah
256include high-level source
257
258@item -al
b3b2623c 259include assembly
05a0e43b
RP
260
261@item -an
b3b2623c 262omit forms processing
05a0e43b
RP
263
264@item -as
b3b2623c 265include symbols
85a961c6
ILT
266
267@item =file
268set the name of the listing file
05a0e43b
RP
269@end table
270
271You may combine these options; for example, use @samp{-aln} for assembly
85a961c6
ILT
272listing without forms processing. The @samp{=file} option, if used, must be
273the last one. By itself, @samp{-a} defaults to @samp{-ahls}---that is, all
274listings turned on.
b50e59fe
RP
275
276@item -D
b3b2623c
KR
277Ignored. This option is accepted for script compatibility with calls to
278other assemblers.
b50e59fe 279
71dd3c40
ILT
280@item --defsym @var{sym}=@var{value}
281Define the symbol @var{sym} to be @var{value} before assembling the input file.
282@var{value} must be an integer constant. As in C, a leading @samp{0x}
283indicates a hexadecimal value, and a leading @samp{0} indicates an octal value.
284
47342e8f 285@item -f
9dcf8057 286``fast''---skip whitespace and comment preprocessing (assume source is
b3b2623c 287compiler output).
47342e8f 288
b3b2623c
KR
289@item --help
290Print a summary of the command line options and exit.
291
292@item -I @var{dir}
293Add directory @var{dir} to the search list for @code{.include} directives.
294
295@item -J
296Don't warn about signed overflow.
b50e59fe 297
80381063 298@item -K
f009d0ab
RP
299@ifclear DIFF-TBL-KLUGE
300This option is accepted but has no effect on the @value{TARGET} family.
301@end ifclear
302@ifset DIFF-TBL-KLUGE
0b5b143a 303Issue warnings when difference tables altered for long displacements.
f009d0ab 304@end ifset
47342e8f
RP
305
306@item -L
b3b2623c 307Keep (in the symbol table) local symbols, starting with @samp{L}.
47342e8f
RP
308
309@item -o @var{objfile}
b3b2623c 310Name the object-file output from @code{@value{AS}} @var{objfile}.
47342e8f
RP
311
312@item -R
b3b2623c 313Fold the data section into the text section.
47342e8f 314
62e59d28 315@item --statistics
b3b2623c 316Print the maximum space (in bytes) and total time (in seconds) used by
62e59d28
RP
317assembly.
318
7d7ecbdd 319@item -v
b3b2623c
KR
320@itemx -version
321Print the @code{as} version.
322
323@item --version
324Print the @code{as} version and exit.
7d7ecbdd 325
47342e8f 326@item -W
b3b2623c
KR
327Suppress warning messages.
328
329@item -w
330Ignored.
331
332@item -x
333Ignored.
47342e8f 334
62e59d28 335@item -Z
b3b2623c 336Generate an object file even after errors.
62e59d28 337
9ebc250f
KR
338@item -- | @var{files} @dots{}
339Standard input, or source files to assemble.
9ebc250f
KR
340
341@end table
342
99c4053d
KR
343@ifset ARC
344The following options are available when @value{AS} is configured for
345an ARC processor.
346
347@table @code
348
349@cindex ARC endianness
350@cindex endianness, ARC
351@cindex big endian output, ARC
352@item -mbig-endian
353Generate ``big endian'' format output.
354
355@cindex little endian output, ARC
356@item -mlittle-endian
357Generate ``little endian'' format output.
358
359@end table
360@end ifset
361
9a5acea8
ILT
362@c start-sanitize-d10v
363@ifset D10V
364The following options are available when @value{AS} is configured for
365a D10V processor.
366@table @code
367@cindex D10V optimization
368@cindex optimization, D10V
369@item -O
370Optimize output by parallelizing instructions.
371@end table
372@end ifset
373@c end-sanitize-d10v
374
f009d0ab
RP
375@ifset I960
376The following options are available when @value{AS} is configured for the
9ebc250f
KR
377Intel 80960 processor.
378
379@table @code
d0281557
RP
380@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
381Specify which variant of the 960 architecture is the target.
382
383@item -b
384Add code to collect statistics about branches taken.
385
b3b2623c 386@item -no-relax
66b818fb 387Do not alter compare-and-branch instructions for long displacements;
d0281557 388error if necessary.
9ebc250f
KR
389
390@end table
f009d0ab 391@end ifset
d0281557 392
f009d0ab
RP
393@ifset M680X0
394The following options are available when @value{AS} is configured for the
9ebc250f
KR
395Motorola 68000 series.
396
397@table @code
398
09352a5d 399@item -l
9ebc250f 400Shorten references to undefined symbols, to one word instead of two.
09352a5d 401
910d7df2
C
402@item -m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040 | -m68060
403@itemx | -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -mcpu32 | -m5200
9ebc250f
KR
404Specify what processor in the 68000 family is the target. The default
405is normally the 68020, but this can be changed at configuration time.
406
407@item -m68881 | -m68882 | -mno-68881 | -mno-68882
408The target machine does (or does not) have a floating-point coprocessor.
409The default is to assume a coprocessor for 68020, 68030, and cpu32. Although
410the basic 68000 is not compatible with the 68881, a combination of the
411two can be specified, since it's possible to do emulation of the
412coprocessor instructions with the main processor.
413
414@item -m68851 | -mno-68851
415The target machine does (or does not) have a memory-management
416unit coprocessor. The default is to assume an MMU for 68020 and up.
47342e8f 417
47342e8f 418@end table
f009d0ab
RP
419@end ifset
420
421@ifset SPARC
422The following options are available when @code{@value{AS}} is configured
423for the SPARC architecture:
424
425@table @code
71dd3c40 426@item -Av6 | -Av7 | -Av8 | -Asparclite | -Av9 | -Av9a
f009d0ab
RP
427Explicitly select a variant of the SPARC architecture.
428
71dd3c40
ILT
429@item -xarch=v8plus | -xarch=v8plusa
430For compatibility with the Solaris v9 assembler. These options are
431equivalent to -Av9 and -Av9a, respectively.
432
f009d0ab
RP
433@item -bump
434Warn when the assembler switches to another architecture.
435@end table
436@end ifset
47342e8f 437
34214344
KR
438@ifset MIPS
439The following options are available when @value{AS} is configured for
dd565f85 440a MIPS processor.
34214344
KR
441
442@table @code
34214344 443@item -G @var{num}
05a0e43b 444This option sets the largest size of an object that can be referenced
dd565f85
RP
445implicitly with the @code{gp} register. It is only accepted for targets that
446use ECOFF format, such as a DECstation running Ultrix. The default value is 8.
34214344 447
05a0e43b
RP
448@cindex MIPS endianness
449@cindex endianness, MIPS
05a0e43b 450@cindex big endian output, MIPS
dd565f85 451@item -EB
05a0e43b
RP
452Generate ``big endian'' format output.
453
05a0e43b 454@cindex little endian output, MIPS
dd565f85 455@item -EL
05a0e43b 456Generate ``little endian'' format output.
34214344 457
1051c97f
ILT
458@cindex MIPS ISA
459@item -mips1
dd565f85
RP
460@itemx -mips2
461@itemx -mips3
462Generate code for a particular MIPS Instruction Set Architecture level.
463@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors,
464@samp{-mips2} to the @sc{r6000} processor, and @samp{-mips3} to the @sc{r4000}
465processor.
1051c97f 466
b3b2623c
KR
467@item -m4650
468@item -no-m4650
469Generate code for the MIPS @sc{r4650} chip. This tells the assembler to accept
470the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
471instructions around accesses to the @samp{HI} and @samp{LO} registers.
472@samp{-no-m4650} turns off this option.
473
474@item -mcpu=@var{CPU}
475Generate code for a particular MIPS cpu. This has little effect on the
476assembler, but it is passed by @code{@value{GCC}}.
477
ba5ceb30
KR
478@cindex emulation
479@item --emulation=@var{name}
480This option causes @code{@value{AS}} to emulated @code{@value{AS}} configured
481for some other target, in all respects, including output format (choosing
482between ELF and ECOFF only), handling of pseudo-opcodes which may generate
483debugging information or store symbol table information, and default
484endianness. The available configuration names are: @samp{mipsecoff},
485@samp{mipself}, @samp{mipslecoff}, @samp{mipsbecoff}, @samp{mipslelf},
486@samp{mipsbelf}. The first two do not alter the default endianness from that
487of the primary target for which the assembler was configured; the others change
488the default to little- or big-endian as indicated by the @samp{b} or @samp{l}
489in the name. Using @samp{-EB} or @samp{-EL} will override the endianness
490selection in any case.
491
492This option is currently supported only when the primary target
493@code{@value{AS}} is configured for is a MIPS ELF or ECOFF target.
494Furthermore, the primary target or others specified with
495@samp{--enable-targets=@dots{}} at configuration time must include support for
496the other format, if both are to be available. For example, the Irix 5
497configuration includes support for both.
498
499Eventually, this option will support more configurations, with more
500fine-grained control over the assembler's behavior, and will be supported for
501more processors.
502
05a0e43b 503@item -nocpp
dd565f85
RP
504@code{@value{AS}} ignores this option. It is accepted for compatibility with
505the native tools.
506
71dd3c40 507@need 900
dd565f85
RP
508@item --trap
509@itemx --no-trap
510@itemx --break
511@itemx --no-break
512Control how to deal with multiplication overflow and division by zero.
513@samp{--trap} or @samp{--no-break} (which are synonyms) take a trap exception
514(and only work for Instruction Set Architecture level 2 and higher);
515@samp{--break} or @samp{--no-trap} (also synonyms, and the default) take a
516break exception.
34214344
KR
517@end table
518@end ifset
519
7a4c8e5c 520@menu
ba487f3a 521* Manual:: Structure of this Manual
f009d0ab 522* GNU Assembler:: @value{AS}, the GNU Assembler
ba487f3a
RP
523* Object Formats:: Object File Formats
524* Command Line:: Command Line
525* Input Files:: Input Files
526* Object:: Output (Object) File
527* Errors:: Error and Warning Messages
7a4c8e5c
RP
528@end menu
529
242d9c06 530@node Manual
d0281557 531@section Structure of this Manual
66b818fb
RP
532
533@cindex manual, structure and purpose
534This manual is intended to describe what you need to know to use
f009d0ab 535@sc{gnu} @code{@value{AS}}. We cover the syntax expected in source files, including
47342e8f 536notation for symbols, constants, and expressions; the directives that
f009d0ab 537@code{@value{AS}} understands; and of course how to invoke @code{@value{AS}}.
47342e8f 538
f009d0ab
RP
539@ifclear GENERIC
540We also cover special features in the @value{TARGET}
541configuration of @code{@value{AS}}, including assembler directives.
542@end ifclear
543@ifset GENERIC
66b818fb 544This manual also describes some of the machine-dependent features of
09352a5d 545various flavors of the assembler.
f009d0ab 546@end ifset
93b45514 547
66b818fb 548@cindex machine instructions (not covered)
47342e8f 549On the other hand, this manual is @emph{not} intended as an introduction
b50e59fe
RP
550to programming in assembly language---let alone programming in general!
551In a similar vein, we make no attempt to introduce the machine
47342e8f
RP
552architecture; we do @emph{not} describe the instruction set, standard
553mnemonics, registers or addressing modes that are standard to a
f009d0ab
RP
554particular architecture.
555@ifset GENERIC
66b818fb 556You may want to consult the manufacturer's
b50e59fe 557machine architecture manual for this information.
f009d0ab
RP
558@end ifset
559@ifclear GENERIC
560@ifset H8/300
66b818fb 561For information on the H8/300 machine instruction set, see @cite{H8/300
8d8ddccb
RP
562Series Programming Manual} (Hitachi ADE--602--025). For the H8/300H,
563see @cite{H8/300H Series Programming Manual} (Hitachi).
f009d0ab
RP
564@end ifset
565@ifset H8/500
566For information on the H8/500 machine instruction set, see @cite{H8/500
567Series Programming Manual} (Hitachi M21T001).
568@end ifset
f009d0ab
RP
569@ifset SH
570For information on the Hitachi SH machine instruction set, see
571@cite{SH-Microcomputer User's Manual} (Hitachi Micro Systems, Inc.).
572@end ifset
f009d0ab 573@ifset Z8000
2d8e0f62 574For information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual}
f009d0ab
RP
575@end ifset
576@end ifclear
93b45514 577
71dd3c40 578@c I think this is premature---doc@cygnus.com, 17jan1991
47342e8f 579@ignore
66b818fb 580Throughout this manual, we assume that you are running @dfn{GNU},
93b45514
RP
581the portable operating system from the @dfn{Free Software
582Foundation, Inc.}. This restricts our attention to certain kinds of
8babef85 583computer (in particular, the kinds of computers that @sc{gnu} can run on);
93b45514
RP
584once this assumption is granted examples and definitions need less
585qualification.
586
f009d0ab 587@code{@value{AS}} is part of a team of programs that turn a high-level
93b45514
RP
588human-readable series of instructions into a low-level
589computer-readable series of instructions. Different versions of
f009d0ab 590@code{@value{AS}} are used for different kinds of computer.
47342e8f 591@end ignore
93b45514 592
b50e59fe
RP
593@c There used to be a section "Terminology" here, which defined
594@c "contents", "byte", "word", and "long". Defining "word" to any
595@c particular size is confusing when the .word directive may generate 16
596@c bits on one machine and 32 bits on another; in general, for the user
597@c version of this manual, none of these terms seem essential to define.
598@c They were used very little even in the former draft of the manual;
599@c this draft makes an effort to avoid them (except in names of
d0281557
RP
600@c directives).
601
242d9c06 602@node GNU Assembler
f009d0ab 603@section @value{AS}, the GNU Assembler
66b818fb 604
8babef85 605@sc{gnu} @code{as} is really a family of assemblers.
f009d0ab
RP
606@ifclear GENERIC
607This manual describes @code{@value{AS}}, a member of that family which is
608configured for the @value{TARGET} architectures.
609@end ifclear
8babef85 610If you use (or have used) the @sc{gnu} assembler on one architecture, you
7a4c8e5c
RP
611should find a fairly similar environment when you use it on another
612architecture. Each version has much in common with the others,
613including object file formats, most assembler directives (often called
9ebc250f 614@dfn{pseudo-ops}) and assembler syntax.@refill
d0281557 615
f009d0ab
RP
616@cindex purpose of @sc{gnu} @code{@value{AS}}
617@code{@value{AS}} is primarily intended to assemble the output of the
8babef85 618@sc{gnu} C compiler @code{@value{GCC}} for use by the linker
f009d0ab
RP
619@code{@value{LD}}. Nevertheless, we've tried to make @code{@value{AS}}
620assemble correctly everything that other assemblers for the same
621machine would assemble.
622@ifset VAX
623Any exceptions are documented explicitly (@pxref{Machine Dependencies}).
624@end ifset
625@ifset M680X0
626@c This remark should appear in generic version of manual; assumption
627@c here is that generic version sets M680x0.
628This doesn't mean @code{@value{AS}} always uses the same syntax as another
b50e59fe
RP
629assembler for the same architecture; for example, we know of several
630incompatible versions of 680x0 assembly language syntax.
f009d0ab 631@end ifset
47342e8f 632
f009d0ab 633Unlike older assemblers, @code{@value{AS}} is designed to assemble a source
b50e59fe 634program in one pass of the source file. This has a subtle impact on the
7a4c8e5c 635@kbd{.org} directive (@pxref{Org,,@code{.org}}).
93b45514 636
242d9c06 637@node Object Formats
d0281557 638@section Object File Formats
66b818fb
RP
639
640@cindex object file format
8babef85 641The @sc{gnu} assembler can be configured to produce several alternative
7d7ecbdd
RP
642object file formats. For the most part, this does not affect how you
643write assembly language programs; but directives for debugging symbols
644are typically different in different file formats. @xref{Symbol
645Attributes,,Symbol Attributes}.
f009d0ab
RP
646@ifclear GENERIC
647@ifclear MULTI-OBJ
648On the @value{TARGET}, @code{@value{AS}} is configured to produce
649@value{OBJ-NAME} format object files.
650@end ifclear
651@c The following should exhaust all configs that set MULTI-OBJ, ideally
652@ifset A29K
653On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
24b1493d 654@code{a.out} or COFF format object files.
f009d0ab
RP
655@end ifset
656@ifset I960
657On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
658@code{b.out} or COFF format object files.
659@end ifset
9dcf8057
JL
660@ifset HPPA
661On the @value{TARGET}, @code{@value{AS}} can be configured to produce either
662SOM or ELF format object files.
663@end ifset
f009d0ab 664@end ifclear
d0281557 665
242d9c06 666@node Command Line
b50e59fe 667@section Command Line
93b45514 668
66b818fb 669@cindex command line conventions
f009d0ab 670After the program name @code{@value{AS}}, the command line may contain
66b818fb 671options and file names. Options may appear in any order, and may be
93b45514
RP
672before, after, or between file names. The order of file names is
673significant.
674
66b818fb
RP
675@cindex standard input, as input file
676@kindex --
47342e8f 677@file{--} (two hyphens) by itself names the standard input file
f009d0ab 678explicitly, as one of the files for @code{@value{AS}} to assemble.
47342e8f 679
66b818fb 680@cindex options, command line
93b45514
RP
681Except for @samp{--} any command line argument that begins with a
682hyphen (@samp{-}) is an option. Each option changes the behavior of
f009d0ab 683@code{@value{AS}}. No option changes the way another option works. An
47342e8f 684option is a @samp{-} followed by one or more letters; the case of
b50e59fe 685the letter is important. All options are optional.
93b45514
RP
686
687Some options expect exactly one file name to follow them. The file
688name may either immediately follow the option's letter (compatible
8babef85 689with older assemblers) or it may be the next command argument (@sc{gnu}
93b45514
RP
690standard). These two command lines are equivalent:
691
d0281557 692@smallexample
f009d0ab
RP
693@value{AS} -o my-object-file.o mumble.s
694@value{AS} -omy-object-file.o mumble.s
d0281557 695@end smallexample
93b45514 696
242d9c06 697@node Input Files
47342e8f 698@section Input Files
93b45514 699
66b818fb
RP
700@cindex input
701@cindex source program
702@cindex files, input
47342e8f 703We use the phrase @dfn{source program}, abbreviated @dfn{source}, to
f009d0ab 704describe the program input to one run of @code{@value{AS}}. The program may
93b45514
RP
705be in one or more files; how the source is partitioned into files
706doesn't change the meaning of the source.
707
b50e59fe 708@c I added "con" prefix to "catenation" just to prove I can overcome my
71dd3c40 709@c APL training... doc@cygnus.com
b50e59fe 710The source program is a concatenation of the text in all the files, in the
47342e8f 711order specified.
93b45514 712
f009d0ab 713Each time you run @code{@value{AS}} it assembles exactly one source
47342e8f 714program. The source program is made up of one or more files.
93b45514
RP
715(The standard input is also a file.)
716
f009d0ab 717You give @code{@value{AS}} a command line that has zero or more input file
93b45514
RP
718names. The input files are read (from left file name to right). A
719command line argument (in any position) that has no special meaning
d0281557 720is taken to be an input file name.
93b45514 721
f009d0ab
RP
722If you give @code{@value{AS}} no file names it attempts to read one input file
723from the @code{@value{AS}} standard input, which is normally your terminal. You
724may have to type @key{ctl-D} to tell @code{@value{AS}} there is no more program
d0281557 725to assemble.
93b45514 726
47342e8f
RP
727Use @samp{--} if you need to explicitly name the standard input file
728in your command line.
93b45514 729
05a0e43b 730If the source is empty, @code{@value{AS}} produces a small, empty object
d0281557 731file.
b50e59fe 732
7a4c8e5c 733@subheading Filenames and Line-numbers
66b818fb
RP
734
735@cindex input file linenumbers
736@cindex line numbers, in input files
737There are two ways of locating a line in the input file (or files) and
738either may be used in reporting error messages. One way refers to a line
93b45514 739number in a physical file; the other refers to a line number in a
66b818fb 740``logical'' file. @xref{Errors, ,Error and Warning Messages}.
93b45514
RP
741
742@dfn{Physical files} are those files named in the command line given
f009d0ab 743to @code{@value{AS}}.
93b45514 744
47342e8f
RP
745@dfn{Logical files} are simply names declared explicitly by assembler
746directives; they bear no relation to physical files. Logical file names
f009d0ab 747help error messages reflect the original source file, when @code{@value{AS}}
7a4c8e5c 748source is itself synthesized from other files.
f009d0ab 749@xref{App-File,,@code{.app-file}}.
93b45514 750
242d9c06 751@node Object
93b45514 752@section Output (Object) File
66b818fb
RP
753
754@cindex object file
755@cindex output file
756@kindex a.out
757@kindex .o
f009d0ab 758Every time you run @code{@value{AS}} it produces an output file, which is
93b45514 759your assembly language program translated into numbers. This file
65fbb2d7
RP
760is the object file. Its default name is
761@ifclear BOUT
762@code{a.out}.
763@end ifclear
f009d0ab 764@ifset BOUT
f009d0ab 765@ifset GENERIC
65fbb2d7 766@code{a.out}, or
f009d0ab 767@end ifset
65fbb2d7 768@code{b.out} when @code{@value{AS}} is configured for the Intel 80960.
f009d0ab 769@end ifset
65fbb2d7
RP
770You can give it another name by using the @code{-o} option. Conventionally,
771object file names end with @file{.o}. The default name is used for historical
772reasons: older assemblers were capable of assembling self-contained programs
773directly into a runnable program. (For some formats, this isn't currently
774possible, but it can be done for the @code{a.out} format.)
93b45514 775
66b818fb
RP
776@cindex linker
777@kindex ld
f009d0ab
RP
778The object file is meant for input to the linker @code{@value{LD}}. It contains
779assembled program code, information to help @code{@value{LD}} integrate
b50e59fe 780the assembled program into a runnable file, and (optionally) symbolic
d0281557 781information for the debugger.
93b45514 782
66b818fb 783@c link above to some info file(s) like the description of a.out.
71dd3c40 784@c don't forget to describe @sc{gnu} info as well as Unix lossage.
93b45514 785
242d9c06 786@node Errors
93b45514
RP
787@section Error and Warning Messages
788
66b818fb
RP
789@cindex error messsages
790@cindex warning messages
f009d0ab
RP
791@cindex messages from @code{@value{AS}}
792@code{@value{AS}} may write warnings and error messages to the standard error
66b818fb 793file (usually your terminal). This should not happen when a compiler
f009d0ab
RP
794runs @code{@value{AS}} automatically. Warnings report an assumption made so
795that @code{@value{AS}} could keep assembling a flawed program; errors report a
b50e59fe 796grave problem that stops the assembly.
93b45514 797
66b818fb 798@cindex format of warning messages
93b45514 799Warning messages have the format
66b818fb 800
d0281557 801@smallexample
b50e59fe 802file_name:@b{NNN}:Warning Message Text
d0281557 803@end smallexample
66b818fb 804
0b5b143a 805@noindent
66b818fb 806@cindex line numbers, in warnings/errors
f009d0ab
RP
807(where @b{NNN} is a line number). If a logical file name has been given
808(@pxref{App-File,,@code{.app-file}}) it is used for the filename,
809otherwise the name of the current input file is used. If a logical line
810number was given
811@ifset GENERIC
812(@pxref{Line,,@code{.line}})
813@end ifset
814@ifclear GENERIC
815@ifclear A29K
7a4c8e5c 816(@pxref{Line,,@code{.line}})
f009d0ab
RP
817@end ifclear
818@ifset A29K
7a4c8e5c 819(@pxref{Ln,,@code{.ln}})
f009d0ab
RP
820@end ifset
821@end ifclear
63f5d795 822then it is used to calculate the number printed,
b50e59fe
RP
823otherwise the actual line in the current source file is printed. The
824message text is intended to be self explanatory (in the grand Unix
f009d0ab 825tradition).
93b45514 826
66b818fb 827@cindex format of error messages
93b45514 828Error messages have the format
d0281557 829@smallexample
b50e59fe 830file_name:@b{NNN}:FATAL:Error Message Text
d0281557 831@end smallexample
47342e8f 832The file name and line number are derived as for warning
93b45514
RP
833messages. The actual message text may be rather less explanatory
834because many of them aren't supposed to happen.
835
242d9c06 836@node Invoking
7a4c8e5c 837@chapter Command-Line Options
66b818fb 838
f009d0ab 839@cindex options, all versions of @code{@value{AS}}
66b818fb 840This chapter describes command-line options available in @emph{all}
8babef85 841versions of the @sc{gnu} assembler; @pxref{Machine Dependencies}, for options specific
f009d0ab
RP
842@ifclear GENERIC
843to the @value{TARGET}.
844@end ifclear
845@ifset GENERIC
0b5b143a 846to particular machine architectures.
f009d0ab 847@end ifset
0193302d 848
8babef85 849If you are invoking @code{@value{AS}} via the @sc{gnu} C compiler (version 2), you
0193302d
KR
850can use the @samp{-Wa} option to pass arguments through to the
851assembler. The assembler arguments must be separated from each other
852(and the @samp{-Wa}) by commas. For example:
853
854@smallexample
855gcc -c -g -O -Wa,-alh,-L file.c
856@end smallexample
857
05a0e43b
RP
858@noindent
859emits a listing to standard output with high-level
0193302d
KR
860and assembly source.
861
81fcb3ff
RP
862Usually you do not need to use this @samp{-Wa} mechanism, since many compiler
863command-line options are automatically passed to the assembler by the compiler.
8babef85 864(You can call the @sc{gnu} compiler driver with the @samp{-v} option to see
81fcb3ff
RP
865precisely what options it passes to each compilation pass, including the
866assembler.)
d0281557 867
f009d0ab
RP
868@menu
869* a:: -a[dhlns] enable listings
870* D:: -D for compatibility
871* f:: -f to work faster
872* I:: -I for .include search path
873@ifclear DIFF-TBL-KLUGE
874* K:: -K for compatibility
875@end ifclear
876@ifset DIFF-TBL-KLUGE
877* K:: -K for difference tables
878@end ifset
879
880* L:: -L to retain local labels
79e15b8a 881* M:: -M or --mri to assemble in MRI compatibility mode
f009d0ab
RP
882* o:: -o to name the object file
883* R:: -R to join data and text sections
62e59d28 884* statistics:: --statistics to see statistics about assembly
f009d0ab
RP
885* v:: -v to announce version
886* W:: -W to suppress warnings
62e59d28 887* Z:: -Z to make object file even after errors
f009d0ab
RP
888@end menu
889
890@node a
0193302d 891@section Enable Listings: @code{-a[dhlns]}
66b818fb
RP
892
893@kindex -a
0193302d
KR
894@kindex -ad
895@kindex -ah
66b818fb 896@kindex -al
0193302d 897@kindex -an
66b818fb
RP
898@kindex -as
899@cindex listings, enabling
900@cindex assembly listings, enabling
0193302d
KR
901
902These options enable listing output from the assembler. By itself,
903@samp{-a} requests high-level, assembly, and symbols listing.
dd565f85 904You can use other letters to select specific options for the list:
0193302d
KR
905@samp{-ah} requests a high-level language listing,
906@samp{-al} requests an output-program assembly listing, and
907@samp{-as} requests a symbol table listing.
908High-level listings require that a compiler debugging option like
909@samp{-g} be used, and that assembly listings (@samp{-al}) be requested
910also.
911
dd565f85 912Use the @samp{-ad} option to omit debugging directives from the
0193302d 913listing.
66b818fb
RP
914
915Once you have specified one of these options, you can further control
916listing output and its appearance using the directives @code{.list},
917@code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and
918@code{.sbttl}.
0193302d 919The @samp{-an} option turns off all forms processing.
66b818fb
RP
920If you do not request listing output with one of the @samp{-a} options, the
921listing-control directives have no effect.
922
0193302d
KR
923The letters after @samp{-a} may be combined into one option,
924@emph{e.g.}, @samp{-aln}.
925
f009d0ab 926@node D
66b818fb
RP
927@section @code{-D}
928
929@kindex -D
b50e59fe 930This option has no effect whatsoever, but it is accepted to make it more
05a0e43b 931likely that scripts written for other assemblers also work with
f009d0ab 932@code{@value{AS}}.
b50e59fe 933
f009d0ab 934@node f
66b818fb
RP
935@section Work Faster: @code{-f}
936
937@kindex -f
938@cindex trusted compiler
939@cindex faster processing (@code{-f})
93b45514 940@samp{-f} should only be used when assembling programs written by a
9dcf8057 941(trusted) compiler. @samp{-f} stops the assembler from doing whitespace
05a0e43b
RP
942and comment preprocessing on
943the input file(s) before assembling them. @xref{Preprocessing,
944,Preprocessing}.
66b818fb 945
b50e59fe 946@quotation
05a0e43b
RP
947@emph{Warning:} if you use @samp{-f} when the files actually need to be
948preprocessed (if they contain comments, for example), @code{@value{AS}} does
949not work correctly.
b50e59fe
RP
950@end quotation
951
f009d0ab 952@node I
66b818fb
RP
953@section @code{.include} search path: @code{-I} @var{path}
954
955@kindex -I @var{path}
956@cindex paths for @code{.include}
957@cindex search path for @code{.include}
958@cindex @code{include} directive search path
d0281557 959Use this option to add a @var{path} to the list of directories
05a0e43b 960@code{@value{AS}} searches for files specified in @code{.include}
7a4c8e5c
RP
961directives (@pxref{Include,,@code{.include}}). You may use @code{-I} as
962many times as necessary to include a variety of paths. The current
f009d0ab 963working directory is always searched first; after that, @code{@value{AS}}
7a4c8e5c
RP
964searches any @samp{-I} directories in the same order as they were
965specified (left to right) on the command line.
d0281557 966
f009d0ab 967@node K
80381063 968@section Difference Tables: @code{-K}
66b818fb 969
80381063 970@kindex -K
f009d0ab
RP
971@ifclear DIFF-TBL-KLUGE
972On the @value{TARGET} family, this option is allowed, but has no effect. It is
8babef85 973permitted for compatibility with the @sc{gnu} assembler on other platforms,
d0281557 974where it can be used to warn when the assembler alters the machine code
f009d0ab 975generated for @samp{.word} directives in difference tables. The @value{TARGET}
b50e59fe
RP
976family does not have the addressing limitations that sometimes lead to this
977alteration on other platforms.
f009d0ab 978@end ifclear
b50e59fe 979
f009d0ab 980@ifset DIFF-TBL-KLUGE
66b818fb
RP
981@cindex difference tables, warning
982@cindex warning for altered difference tables
f009d0ab 983@code{@value{AS}} sometimes alters the code emitted for directives of the form
7a4c8e5c 984@samp{.word @var{sym1}-@var{sym2}}; @pxref{Word,,@code{.word}}.
80381063 985You can use the @samp{-K} option if you want a warning issued when this
d0281557 986is done.
f009d0ab 987@end ifset
47342e8f 988
f009d0ab 989@node L
66b818fb
RP
990@section Include Local Labels: @code{-L}
991
992@kindex -L
993@cindex local labels, retaining in output
b50e59fe 994Labels beginning with @samp{L} (upper case only) are called @dfn{local
05a0e43b 995labels}. @xref{Symbol Names}. Normally you do not see such labels when
47342e8f 996debugging, because they are intended for the use of programs (like
b50e59fe 997compilers) that compose assembler programs, not for your notice.
05a0e43b 998Normally both @code{@value{AS}} and @code{@value{LD}} discard such labels, so you do not
b50e59fe 999normally debug with them.
93b45514 1000
f009d0ab 1001This option tells @code{@value{AS}} to retain those @samp{L@dots{}} symbols
93b45514 1002in the object file. Usually if you do this you also tell the linker
f009d0ab 1003@code{@value{LD}} to preserve symbols whose names begin with @samp{L}.
93b45514 1004
9dcf8057
JL
1005By default, a local label is any label beginning with @samp{L}, but each
1006target is allowed to redefine the local label prefix.
509d5555
JL
1007@ifset HPPA
1008On the HPPA local labels begin with @samp{L$}.
1009@end ifset
99c4053d
KR
1010@c start-sanitize-arc
1011@ifset ARC
1012On the ARC local labels begin with @samp{.L}.
1013@end ifset
1014@c end-sanitize-arc
9dcf8057 1015
79e15b8a
ILT
1016@node M
1017@section Assemble in MRI Compatibility Mode: @code{-M}
1018
1019@kindex -M
1020@cindex MRI compatibility mode
1021The @code{-M} or @code{--mri} option selects MRI compatibility mode. This
1022changes the syntax and pseudo-op handling of @code{@value{AS}} to make it
71dd3c40
ILT
1023compatible with the @code{ASM68K} or the @code{ASM960} (depending upon the
1024configured target) assembler from Microtec Research. The exact nature of the
1025MRI syntax will not be documented here; see the MRI manuals for more
7d99e8af
ILT
1026information. Note in particular that the handling of macros and macro
1027arguments is somewhat different. The purpose of this option is to permit
1028assembling existing MRI assembler code using @code{@value{AS}}.
79e15b8a
ILT
1029
1030The MRI compatibility is not complete. Certain operations of the MRI assembler
1031depend upon its object file format, and can not be supported using other object
1032file formats. Supporting these would require enhancing each object file format
1033individually. These are:
1034
1035@itemize @bullet
1036@item global symbols in common section
1037
71dd3c40 1038The m68k MRI assembler supports common sections which are merged by the linker.
79e15b8a
ILT
1039Other object file formats do not support this. @code{@value{AS}} handles
1040common sections by treating them as a single common symbol. It permits local
1041symbols to be defined within a common section, but it can not support global
1042symbols, since it has no way to describe them.
1043
1044@item complex relocations
1045
71dd3c40 1046The MRI assemblers support relocations against a negated section address, and
79e15b8a
ILT
1047relocations which combine the start addresses of two or more sections. These
1048are not support by other object file formats.
1049
1050@item @code{END} pseudo-op specifying start address
1051
1052The MRI @code{END} pseudo-op permits the specification of a start address.
1053This is not supported by other object file formats. The start address may
1054instead be specified using the @code{-e} option to the linker, or in a linker
1055script.
1056
71dd3c40 1057@item @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops
79e15b8a 1058
71dd3c40
ILT
1059The MRI @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops assign a module
1060name to the output file. This is not supported by other object file formats.
79e15b8a
ILT
1061
1062@item @code{ORG} pseudo-op
1063
71dd3c40
ILT
1064The m68k MRI @code{ORG} pseudo-op begins an absolute section at a given
1065address. This differs from the usual @code{@value{AS}} @code{.org} pseudo-op,
1066which changes the location within the current section. Absolute sections are
1067not supported by other object file formats. The address of a section may be
79e15b8a
ILT
1068assigned within a linker script.
1069@end itemize
1070
1071There are some other features of the MRI assembler which are not supported by
1072@code{@value{AS}}, typically either because they are difficult or because they
1073seem of little consequence. Some of these may be supported in future releases.
1074
1075@itemize @bullet
1076
79e15b8a
ILT
1077@item EBCDIC strings
1078
1079EBCDIC strings are not supported.
1080
1081@item packed binary coded decimal
1082
1083Packed binary coded decimal is not supported. This means that the @code{DC.P}
1084and @code{DCB.P} pseudo-ops are not supported.
1085
1086@item @code{FEQU} pseudo-op
1087
71dd3c40 1088The m68k @code{FEQU} pseudo-op is not supported.
79e15b8a
ILT
1089
1090@item @code{NOOBJ} pseudo-op
1091
71dd3c40 1092The m68k @code{NOOBJ} pseudo-op is not supported.
79e15b8a
ILT
1093
1094@item @code{OPT} branch control options
1095
71dd3c40 1096The m68k @code{OPT} branch control options---@code{B}, @code{BRS}, @code{BRB},
79e15b8a
ILT
1097@code{BRL}, and @code{BRW}---are ignored. @code{@value{AS}} automatically
1098relaxes all branches, whether forward or backward, to an appropriate size, so
1099these options serve no purpose.
1100
1101@item @code{OPT} list control options
1102
71dd3c40 1103The following m68k @code{OPT} list control options are ignored: @code{C},
79e15b8a
ILT
1104@code{CEX}, @code{CL}, @code{CRE}, @code{E}, @code{G}, @code{I}, @code{M},
1105@code{MEX}, @code{MC}, @code{MD}, @code{X}.
1106
1107@item other @code{OPT} options
1108
71dd3c40 1109The following m68k @code{OPT} options are ignored: @code{NEST}, @code{O},
79e15b8a
ILT
1110@code{OLD}, @code{OP}, @code{P}, @code{PCO}, @code{PCR}, @code{PCS}, @code{R}.
1111
1112@item @code{OPT} @code{D} option is default
1113
71dd3c40 1114The m68k @code{OPT} @code{D} option is the default, unlike the MRI assembler.
79e15b8a
ILT
1115@code{OPT NOD} may be used to turn it off.
1116
1117@item @code{XREF} pseudo-op.
1118
71dd3c40
ILT
1119The m68k @code{XREF} pseudo-op is ignored.
1120
1121@item @code{.debug} pseudo-op
1122
1123The i960 @code{.debug} pseudo-op is not supported.
1124
1125@item @code{.extended} pseudo-op
1126
1127The i960 @code{.extended} pseudo-op is not supported.
1128
1129@item @code{.list} pseudo-op.
1130
1131The various options of the i960 @code{.list} pseudo-op are not supported.
1132
1133@item @code{.optimize} pseudo-op
1134
1135The i960 @code{.optimize} pseudo-op is not supported.
1136
1137@item @code{.output} pseudo-op
1138
1139The i960 @code{.output} pseudo-op is not supported.
1140
1141@item @code{.setreal} pseudo-op
1142
1143The i960 @code{.setreal} pseudo-op is not supported.
79e15b8a 1144
79e15b8a
ILT
1145@end itemize
1146
f009d0ab 1147@node o
66b818fb
RP
1148@section Name the Object File: @code{-o}
1149
1150@kindex -o
1151@cindex naming object file
1152@cindex object file name
f009d0ab 1153There is always one object file output when you run @code{@value{AS}}. By
9ebc250f 1154default it has the name
f009d0ab
RP
1155@ifset GENERIC
1156@ifset I960
1157@file{a.out} (or @file{b.out}, for Intel 960 targets only).
1158@end ifset
1159@ifclear I960
9ebc250f 1160@file{a.out}.
f009d0ab
RP
1161@end ifclear
1162@end ifset
1163@ifclear GENERIC
1164@ifset I960
9ebc250f 1165@file{b.out}.
f009d0ab
RP
1166@end ifset
1167@ifclear I960
9ebc250f 1168@file{a.out}.
f009d0ab
RP
1169@end ifclear
1170@end ifclear
1171You use this option (which takes exactly one filename) to give the
1172object file a different name.
93b45514 1173
05a0e43b 1174Whatever the object file is called, @code{@value{AS}} overwrites any
93b45514
RP
1175existing file of the same name.
1176
f009d0ab 1177@node R
66b818fb
RP
1178@section Join Data and Text Sections: @code{-R}
1179
1180@kindex -R
1181@cindex data and text sections, joining
1182@cindex text and data sections, joining
1183@cindex joining text and data sections
1184@cindex merging text and data sections
f009d0ab 1185@code{-R} tells @code{@value{AS}} to write the object file as if all
24b1493d 1186data-section data lives in the text section. This is only done at
93b45514 1187the very last moment: your binary data are the same, but data
24b1493d 1188section parts are relocated differently. The data section part of
9ebc250f 1189your object file is zero bytes long because all its bytes are
24b1493d 1190appended to the text section. (@xref{Sections,,Sections and Relocation}.)
93b45514 1191
b50e59fe 1192When you specify @code{-R} it would be possible to generate shorter
05a0e43b 1193address displacements (because we do not have to cross between text and
24b1493d 1194data section). We refrain from doing this simply for compatibility with
f009d0ab 1195older versions of @code{@value{AS}}. In future, @code{-R} may work this way.
93b45514 1196
f009d0ab
RP
1197@ifset COFF
1198When @code{@value{AS}} is configured for COFF output,
66b818fb 1199this option is only useful if you use sections named @samp{.text} and
f009d0ab
RP
1200@samp{.data}.
1201@end ifset
66b818fb 1202
9dcf8057 1203@ifset HPPA
05a0e43b
RP
1204@code{-R} is not supported for any of the HPPA targets. Using
1205@code{-R} generates a warning from @code{@value{AS}}.
9dcf8057
JL
1206@end ifset
1207
62e59d28 1208@node statistics
81fcb3ff 1209@section Display Assembly Statistics: @code{--statistics}
62e59d28
RP
1210
1211@kindex --statistics
1212@cindex statistics, about assembly
1213@cindex time, total for assembly
1214@cindex space used, maximum for assembly
1215Use @samp{--statistics} to display two statistics about the resources used by
1216@code{@value{AS}}: the maximum amount of space allocated during the assembly
1217(in bytes), and the total execution time taken for the assembly (in @sc{cpu}
1218seconds).
1219
f009d0ab 1220@node v
66b818fb
RP
1221@section Announce Version: @code{-v}
1222
1223@kindex -v
1224@kindex -version
f009d0ab
RP
1225@cindex @code{@value{AS}} version
1226@cindex version of @code{@value{AS}}
7d7ecbdd
RP
1227You can find out what version of as is running by including the
1228option @samp{-v} (which you can also spell as @samp{-version}) on the
1229command line.
1230
f009d0ab 1231@node W
66b818fb
RP
1232@section Suppress Warnings: @code{-W}
1233
1234@kindex -W
1235@cindex suppressing warnings
1236@cindex warnings, suppressing
f009d0ab 1237@code{@value{AS}} should never give a warning or error message when
93b45514 1238assembling compiler output. But programs written by people often
f009d0ab 1239cause @code{@value{AS}} to give a warning that a particular assumption was
93b45514 1240made. All such warnings are directed to the standard error file.
47342e8f
RP
1241If you use this option, no warnings are issued. This option only
1242affects the warning messages: it does not change any particular of how
f009d0ab 1243@code{@value{AS}} assembles your file. Errors, which stop the assembly, are
93b45514
RP
1244still reported.
1245
62e59d28
RP
1246@node Z
1247@section Generate Object File in Spite of Errors: @code{-Z}
1248@cindex object file, after errors
1249@cindex errors, continuing after
1250After an error message, @code{@value{AS}} normally produces no output. If for
1251some reason you are interested in object file output even after
1252@code{@value{AS}} gives an error message on your program, use the @samp{-Z}
1253option. If there are any errors, @code{@value{AS}} continues anyways, and
1254writes an object file after a final warning message of the form @samp{@var{n}
1255errors, @var{m} warnings, generating bad object file.}
1256
242d9c06 1257@node Syntax
d0281557 1258@chapter Syntax
66b818fb
RP
1259
1260@cindex machine-independent syntax
1261@cindex syntax, machine-independent
47342e8f 1262This chapter describes the machine-independent syntax allowed in a
f009d0ab
RP
1263source file. @code{@value{AS}} syntax is similar to what many other
1264assemblers use; it is inspired by the BSD 4.2
1265@ifclear VAX
1266assembler.
1267@end ifclear
1268@ifset VAX
1269assembler, except that @code{@value{AS}} does not assemble Vax bit-fields.
1270@end ifset
b50e59fe 1271
7a4c8e5c 1272@menu
05a0e43b 1273* Preprocessing:: Preprocessing
ba487f3a
RP
1274* Whitespace:: Whitespace
1275* Comments:: Comments
1276* Symbol Intro:: Symbols
1277* Statements:: Statements
1278* Constants:: Constants
7a4c8e5c
RP
1279@end menu
1280
05a0e43b
RP
1281@node Preprocessing
1282@section Preprocessing
93b45514 1283
66b818fb 1284@cindex preprocessing
05a0e43b 1285The @code{@value{AS}} internal preprocessor:
b50e59fe 1286@itemize @bullet
66b818fb 1287@cindex whitespace, removed by preprocessor
b50e59fe
RP
1288@item
1289adjusts and removes extra whitespace. It leaves one space or tab before
1290the keywords on a line, and turns any other whitespace on the line into
1291a single space.
93b45514 1292
66b818fb 1293@cindex comments, removed by preprocessor
b50e59fe
RP
1294@item
1295removes all comments, replacing them with a single space, or an
1296appropriate number of newlines.
93b45514 1297
66b818fb 1298@cindex constants, converted by preprocessor
b50e59fe
RP
1299@item
1300converts character constants into the appropriate numeric values.
1301@end itemize
1302
dd565f85 1303It does not do macro processing, include file handling, or
05a0e43b 1304anything else you may get from your C compiler's preprocessor. You can
9dcf8057 1305do include file processing with the @code{.include} directive
dd565f85
RP
1306(@pxref{Include,,@code{.include}}). You can use the @sc{gnu} C compiler driver
1307to get other ``CPP'' style preprocessing, by giving the input file a
1308@samp{.S} suffix. @xref{Overall Options,, Options Controlling the Kind of
1309Output, gcc.info, Using GNU CC}.
9dcf8057 1310
b50e59fe 1311Excess whitespace, comments, and character constants
93b45514 1312cannot be used in the portions of the input text that are not
05a0e43b 1313preprocessed.
93b45514 1314
66b818fb
RP
1315@cindex turning preprocessing on and off
1316@cindex preprocessing, turning on and off
1317@kindex #NO_APP
1318@kindex #APP
05a0e43b
RP
1319If the first line of an input file is @code{#NO_APP} or if you use the
1320@samp{-f} option, whitespace and comments are not removed from the input file.
1321Within an input file, you can ask for whitespace and comment removal in
1322specific portions of the by putting a line that says @code{#APP} before the
1323text that may contain whitespace or comments, and putting a line that says
1324@code{#NO_APP} after this text. This feature is mainly intend to support
1325@code{asm} statements in compilers whose output is otherwise free of comments
1326and whitespace.
93b45514 1327
242d9c06 1328@node Whitespace
93b45514 1329@section Whitespace
66b818fb
RP
1330
1331@cindex whitespace
93b45514 1332@dfn{Whitespace} is one or more blanks or tabs, in any order.
7a4c8e5c
RP
1333Whitespace is used to separate symbols, and to make programs neater for
1334people to read. Unless within character constants
1335(@pxref{Characters,,Character Constants}), any whitespace means the same
1336as exactly one space.
93b45514 1337
242d9c06 1338@node Comments
93b45514 1339@section Comments
66b818fb
RP
1340
1341@cindex comments
f009d0ab 1342There are two ways of rendering comments to @code{@value{AS}}. In both
93b45514
RP
1343cases the comment is equivalent to one space.
1344
d0281557
RP
1345Anything from @samp{/*} through the next @samp{*/} is a comment.
1346This means you may not nest these comments.
93b45514 1347
d0281557 1348@smallexample
93b45514
RP
1349/*
1350 The only way to include a newline ('\n') in a comment
1351 is to use this sort of comment.
1352*/
47342e8f 1353
93b45514 1354/* This sort of comment does not nest. */
d0281557 1355@end smallexample
93b45514 1356
66b818fb 1357@cindex line comment character
93b45514 1358Anything from the @dfn{line comment} character to the next newline
47342e8f 1359is considered a comment and is ignored. The line comment character is
910d7df2
C
1360@ifset A29K
1361@samp{;} for the AMD 29K family;
1362@end ifset
99c4053d
KR
1363@c start-sanitize-arc
1364@ifset ARC
1365@samp{;} on the ARC;
1366@end ifset
1367@c end-sanitize-arc
f009d0ab 1368@ifset H8/300
9ebc250f 1369@samp{;} for the H8/300 family;
f009d0ab
RP
1370@end ifset
1371@ifset H8/500
1372@samp{!} for the H8/500 family;
1373@end ifset
9dcf8057
JL
1374@ifset HPPA
1375@samp{;} for the HPPA;
1376@end ifset
910d7df2
C
1377@ifset I960
1378@samp{#} on the i960;
1379@end ifset
f009d0ab
RP
1380@ifset SH
1381@samp{!} for the Hitachi SH;
1382@end ifset
910d7df2
C
1383@ifset SPARC
1384@samp{!} on the SPARC;
1385@end ifset
1386@ifset M680X0
1387@samp{|} on the 680x0;
1388@end ifset
1389@ifset VAX
1390@samp{#} on the Vax;
1391@end ifset
f009d0ab 1392@ifset Z8000
ba487f3a 1393@samp{!} for the Z8000;
f009d0ab
RP
1394@end ifset
1395see @ref{Machine Dependencies}. @refill
9ebc250f 1396@c FIXME What about i386, m88k, i860?
09352a5d 1397
f009d0ab 1398@ifset GENERIC
b50e59fe 1399On some machines there are two different line comment characters. One
05a0e43b
RP
1400character only begins a comment if it is the first non-whitespace character on
1401a line, while the other always begins a comment.
f009d0ab 1402@end ifset
93b45514 1403
66b818fb
RP
1404@kindex #
1405@cindex lines starting with @code{#}
1406@cindex logical line numbers
dd565f85
RP
1407To be compatible with past assemblers, lines that begin with @samp{#} have a
1408special interpretation. Following the @samp{#} should be an absolute
05a0e43b 1409expression (@pxref{Expressions}): the logical line number of the @emph{next}
dd565f85
RP
1410line. Then a string (@pxref{Strings,, Strings}) is allowed: if present it is a
1411new logical file name. The rest of the line, if any, should be whitespace.
93b45514
RP
1412
1413If the first non-whitespace characters on the line are not numeric,
1414the line is ignored. (Just like a comment.)
dd565f85 1415
d0281557 1416@smallexample
93b45514
RP
1417 # This is an ordinary comment.
1418# 42-6 "new_file_name" # New logical file name
1419 # This is logical line # 36.
d0281557 1420@end smallexample
93b45514 1421This feature is deprecated, and may disappear from future versions
f009d0ab 1422of @code{@value{AS}}.
93b45514 1423
242d9c06 1424@node Symbol Intro
93b45514 1425@section Symbols
66b818fb 1426
66b818fb 1427@cindex characters used in symbols
f009d0ab
RP
1428@ifclear SPECIAL-SYMS
1429A @dfn{symbol} is one or more characters chosen from the set of all
1430letters (both upper and lower case), digits and the three characters
1431@samp{_.$}.
1432@end ifclear
1433@ifset SPECIAL-SYMS
1434@ifclear GENERIC
1435@ifset H8
93b45514 1436A @dfn{symbol} is one or more characters chosen from the set of all
f009d0ab
RP
1437letters (both upper and lower case), digits and the three characters
1438@samp{._$}. (Save that, on the H8/300 only, you may not use @samp{$} in
1439symbol names.)
1440@end ifset
1441@end ifclear
1442@end ifset
1443@ifset GENERIC
24b1493d 1444On most machines, you can also use @code{$} in symbol names; exceptions
f009d0ab
RP
1445are noted in @ref{Machine Dependencies}.
1446@end ifset
24b1493d 1447No symbol may begin with a digit. Case is significant.
b50e59fe
RP
1448There is no length limit: all characters are significant. Symbols are
1449delimited by characters not in that set, or by the beginning of a file
1450(since the source program must end with a newline, the end of a file is
1451not a possible symbol delimiter). @xref{Symbols}.
66b818fb 1452@cindex length of symbols
93b45514 1453
242d9c06 1454@node Statements
93b45514 1455@section Statements
66b818fb
RP
1456
1457@cindex statements, structure of
1458@cindex line separator character
1459@cindex statement separator character
f009d0ab
RP
1460@ifclear GENERIC
1461@ifclear abnormal-separator
d0281557
RP
1462A @dfn{statement} ends at a newline character (@samp{\n}) or at a
1463semicolon (@samp{;}). The newline or semicolon is considered part of
1464the preceding statement. Newlines and semicolons within character
05a0e43b 1465constants are an exception: they do not end statements.
f009d0ab
RP
1466@end ifclear
1467@ifset abnormal-separator
1468@ifset A29K
d0281557
RP
1469A @dfn{statement} ends at a newline character (@samp{\n}) or an ``at''
1470sign (@samp{@@}). The newline or at sign is considered part of the
1471preceding statement. Newlines and at signs within character constants
05a0e43b 1472are an exception: they do not end statements.
f009d0ab 1473@end ifset
9dcf8057
JL
1474@ifset HPPA
1475A @dfn{statement} ends at a newline character (@samp{\n}) or an exclamation
1476point (@samp{!}). The newline or exclamation point is considered part of the
1477preceding statement. Newlines and exclamation points within character
05a0e43b 1478constants are an exception: they do not end statements.
9dcf8057 1479@end ifset
f009d0ab
RP
1480@ifset H8
1481A @dfn{statement} ends at a newline character (@samp{\n}); or (for the
1482H8/300) a dollar sign (@samp{$}); or (for the
f009d0ab 1483Hitachi-SH or the
f009d0ab
RP
1484H8/500) a semicolon
1485(@samp{;}). The newline or separator character is considered part of
1486the preceding statement. Newlines and separators within character
05a0e43b 1487constants are an exception: they do not end statements.
f009d0ab
RP
1488@end ifset
1489@end ifset
1490@end ifclear
1491@ifset GENERIC
24b1493d
RP
1492A @dfn{statement} ends at a newline character (@samp{\n}) or line
1493separator character. (The line separator is usually @samp{;}, unless
f009d0ab 1494this conflicts with the comment character; @pxref{Machine Dependencies}.) The
24b1493d
RP
1495newline or separator character is considered part of the preceding
1496statement. Newlines and separators within character constants are an
05a0e43b 1497exception: they do not end statements.
f009d0ab 1498@end ifset
d0281557 1499
66b818fb
RP
1500@cindex newline, required at file end
1501@cindex EOF, newline must precede
93b45514 1502It is an error to end any statement with end-of-file: the last
b50e59fe 1503character of any input file should be a newline.@refill
93b45514 1504
66b818fb
RP
1505@cindex continuing statements
1506@cindex multi-line statements
1507@cindex statement on multiple lines
93b45514
RP
1508You may write a statement on more than one line if you put a
1509backslash (@kbd{\}) immediately in front of any newlines within the
f009d0ab 1510statement. When @code{@value{AS}} reads a backslashed newline both
93b45514
RP
1511characters are ignored. You can even put backslashed newlines in
1512the middle of symbol names without changing the meaning of your
1513source program.
1514
47342e8f 1515An empty statement is allowed, and may include whitespace. It is ignored.
93b45514 1516
66b818fb
RP
1517@cindex instructions and directives
1518@cindex directives and instructions
b50e59fe 1519@c "key symbol" is not used elsewhere in the document; seems pedantic to
71dd3c40 1520@c @defn{} it in that case, as was done previously... doc@cygnus.com,
d0281557 1521@c 13feb91.
47342e8f 1522A statement begins with zero or more labels, optionally followed by a
b50e59fe 1523key symbol which determines what kind of statement it is. The key
93b45514 1524symbol determines the syntax of the rest of the statement. If the
b50e59fe 1525symbol begins with a dot @samp{.} then the statement is an assembler
47342e8f
RP
1526directive: typically valid for any computer. If the symbol begins with
1527a letter the statement is an assembly language @dfn{instruction}: it
05a0e43b 1528assembles into a machine language instruction.
f009d0ab 1529@ifset GENERIC
05a0e43b 1530Different versions of @code{@value{AS}} for different computers
d0281557
RP
1531recognize different instructions. In fact, the same symbol may
1532represent a different instruction in a different computer's assembly
1533language.@refill
f009d0ab 1534@end ifset
47342e8f 1535
66b818fb
RP
1536@cindex @code{:} (label)
1537@cindex label (@code{:})
d0281557 1538A label is a symbol immediately followed by a colon (@code{:}).
47342e8f 1539Whitespace before a label or after a colon is permitted, but you may not
d0281557 1540have whitespace between a label's symbol and its colon. @xref{Labels}.
93b45514 1541
9dcf8057
JL
1542@ifset HPPA
1543For HPPA targets, labels need not be immediately followed by a colon, but
1544the definition of a label must begin in column zero. This also implies that
1545only one label may be defined on each line.
1546@end ifset
1547
d0281557 1548@smallexample
93b45514 1549label: .directive followed by something
24b1493d 1550another_label: # This is an empty statement.
93b45514 1551 instruction operand_1, operand_2, @dots{}
d0281557 1552@end smallexample
93b45514 1553
242d9c06 1554@node Constants
93b45514 1555@section Constants
66b818fb
RP
1556
1557@cindex constants
93b45514
RP
1558A constant is a number, written so that its value is known by
1559inspection, without knowing any context. Like this:
f4335d56 1560@smallexample
f009d0ab 1561@group
93b45514
RP
1562.byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
1563.ascii "Ring the bell\7" # A string constant.
1564.octa 0x123456789abcdef0123456789ABCDEF0 # A bignum.
1565.float 0f-314159265358979323846264338327\
156695028841971.693993751E-40 # - pi, a flonum.
f009d0ab 1567@end group
f4335d56 1568@end smallexample
93b45514 1569
7a4c8e5c 1570@menu
ba487f3a
RP
1571* Characters:: Character Constants
1572* Numbers:: Number Constants
7a4c8e5c
RP
1573@end menu
1574
242d9c06 1575@node Characters
93b45514 1576@subsection Character Constants
66b818fb
RP
1577
1578@cindex character constants
1579@cindex constants, character
47342e8f
RP
1580There are two kinds of character constants. A @dfn{character} stands
1581for one character in one byte and its value may be used in
93b45514 1582numeric expressions. String constants (properly called string
47342e8f 1583@emph{literals}) are potentially many bytes and their values may not be
93b45514
RP
1584used in arithmetic expressions.
1585
7a4c8e5c 1586@menu
ba487f3a
RP
1587* Strings:: Strings
1588* Chars:: Characters
7a4c8e5c
RP
1589@end menu
1590
242d9c06 1591@node Strings
93b45514 1592@subsubsection Strings
66b818fb
RP
1593
1594@cindex string constants
1595@cindex constants, string
93b45514 1596A @dfn{string} is written between double-quotes. It may contain
47342e8f 1597double-quotes or null characters. The way to get special characters
93b45514 1598into a string is to @dfn{escape} these characters: precede them with
b50e59fe 1599a backslash @samp{\} character. For example @samp{\\} represents
93b45514 1600one backslash: the first @code{\} is an escape which tells
f009d0ab
RP
1601@code{@value{AS}} to interpret the second character literally as a backslash
1602(which prevents @code{@value{AS}} from recognizing the second @code{\} as an
93b45514
RP
1603escape character). The complete list of escapes follows.
1604
66b818fb
RP
1605@cindex escape codes, character
1606@cindex character escape codes
93b45514 1607@table @kbd
ba487f3a
RP
1608@c @item \a
1609@c Mnemonic for ACKnowledge; for ASCII this is octal code 007.
66b818fb 1610@c
66b818fb
RP
1611@cindex @code{\b} (backspace character)
1612@cindex backspace (@code{\b})
71dd3c40 1613@item \b
93b45514 1614Mnemonic for backspace; for ASCII this is octal code 010.
66b818fb 1615
ba487f3a
RP
1616@c @item \e
1617@c Mnemonic for EOText; for ASCII this is octal code 004.
66b818fb 1618@c
66b818fb
RP
1619@cindex @code{\f} (formfeed character)
1620@cindex formfeed (@code{\f})
71dd3c40 1621@item \f
93b45514 1622Mnemonic for FormFeed; for ASCII this is octal code 014.
66b818fb 1623
66b818fb
RP
1624@cindex @code{\n} (newline character)
1625@cindex newline (@code{\n})
71dd3c40 1626@item \n
93b45514 1627Mnemonic for newline; for ASCII this is octal code 012.
66b818fb 1628
ba487f3a
RP
1629@c @item \p
1630@c Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}.
66b818fb 1631@c
66b818fb
RP
1632@cindex @code{\r} (carriage return character)
1633@cindex carriage return (@code{\r})
71dd3c40 1634@item \r
93b45514 1635Mnemonic for carriage-Return; for ASCII this is octal code 015.
66b818fb 1636
ba487f3a
RP
1637@c @item \s
1638@c Mnemonic for space; for ASCII this is octal code 040. Included for compliance with
1639@c other assemblers.
66b818fb 1640@c
66b818fb
RP
1641@cindex @code{\t} (tab)
1642@cindex tab (@code{\t})
71dd3c40 1643@item \t
93b45514 1644Mnemonic for horizontal Tab; for ASCII this is octal code 011.
66b818fb 1645
ba487f3a
RP
1646@c @item \v
1647@c Mnemonic for Vertical tab; for ASCII this is octal code 013.
1648@c @item \x @var{digit} @var{digit} @var{digit}
1649@c A hexadecimal character code. The numeric code is 3 hexadecimal digits.
66b818fb 1650@c
66b818fb
RP
1651@cindex @code{\@var{ddd}} (octal character code)
1652@cindex octal character code (@code{\@var{ddd}})
71dd3c40 1653@item \ @var{digit} @var{digit} @var{digit}
93b45514 1654An octal character code. The numeric code is 3 octal digits.
47342e8f
RP
1655For compatibility with other Unix systems, 8 and 9 are accepted as digits:
1656for example, @code{\008} has the value 010, and @code{\009} the value 011.
66b818fb 1657
910d7df2
C
1658@cindex @code{\@var{xd...}} (hex character code)
1659@cindex hex character code (@code{\@var{xd...}})
1660@item \@code{x} @var{hex-digits...}
1661A hex character code. All trailing hex digits are combined. Either upper or
1662lower case @code{x} works.
9dcf8057 1663
66b818fb
RP
1664@cindex @code{\\} (@samp{\} character)
1665@cindex backslash (@code{\\})
71dd3c40 1666@item \\
93b45514 1667Represents one @samp{\} character.
66b818fb 1668
ba487f3a
RP
1669@c @item \'
1670@c Represents one @samp{'} (accent acute) character.
1671@c This is needed in single character literals
7a4c8e5c 1672@c (@xref{Characters,,Character Constants}.) to represent
ba487f3a 1673@c a @samp{'}.
66b818fb 1674@c
66b818fb
RP
1675@cindex @code{\"} (doublequote character)
1676@cindex doublequote (@code{\"})
71dd3c40 1677@item \"
93b45514
RP
1678Represents one @samp{"} character. Needed in strings to represent
1679this character, because an unescaped @samp{"} would end the string.
66b818fb 1680
93b45514 1681@item \ @var{anything-else}
05a0e43b 1682Any other character when escaped by @kbd{\} gives a warning, but
dd565f85 1683assembles as if the @samp{\} was not present. The idea is that if
93b45514 1684you used an escape sequence you clearly didn't want the literal
f009d0ab
RP
1685interpretation of the following character. However @code{@value{AS}} has no
1686other interpretation, so @code{@value{AS}} knows it is giving you the wrong
93b45514
RP
1687code and warns you of the fact.
1688@end table
1689
1690Which characters are escapable, and what those escapes represent,
1691varies widely among assemblers. The current set is what we think
d0281557 1692the BSD 4.2 assembler recognizes, and is a subset of what most C
05a0e43b 1693compilers recognize. If you are in doubt, do not use an escape
93b45514
RP
1694sequence.
1695
242d9c06 1696@node Chars
93b45514 1697@subsubsection Characters
66b818fb
RP
1698
1699@cindex single character constant
1700@cindex character, single
1701@cindex constant, single character
93b45514
RP
1702A single character may be written as a single quote immediately
1703followed by that character. The same escapes apply to characters as
1704to strings. So if you want to write the character backslash, you
1705must write @kbd{'\\} where the first @code{\} escapes the second
b50e59fe 1706@code{\}. As you can see, the quote is an acute accent, not a
d0281557 1707grave accent. A newline
f009d0ab
RP
1708@ifclear GENERIC
1709@ifclear abnormal-separator
09352a5d 1710(or semicolon @samp{;})
f009d0ab
RP
1711@end ifclear
1712@ifset abnormal-separator
1713@ifset A29K
b50e59fe 1714(or at sign @samp{@@})
f009d0ab
RP
1715@end ifset
1716@ifset H8
1717(or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the
f009d0ab 1718Hitachi SH or
f009d0ab
RP
1719H8/500)
1720@end ifset
1721@end ifset
1722@end ifclear
d0281557
RP
1723immediately following an acute accent is taken as a literal character
1724and does not count as the end of a statement. The value of a character
93b45514 1725constant in a numeric expression is the machine's byte-wide code for
f009d0ab 1726that character. @code{@value{AS}} assumes your character code is ASCII:
d0281557 1727@kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill
93b45514 1728
242d9c06 1729@node Numbers
93b45514 1730@subsection Number Constants
66b818fb
RP
1731
1732@cindex constants, number
1733@cindex number constants
f009d0ab 1734@code{@value{AS}} distinguishes three kinds of numbers according to how they
47342e8f
RP
1735are stored in the target machine. @emph{Integers} are numbers that
1736would fit into an @code{int} in the C language. @emph{Bignums} are
d0281557 1737integers, but they are stored in more than 32 bits. @emph{Flonums}
93b45514
RP
1738are floating point numbers, described below.
1739
7a4c8e5c 1740@menu
ba487f3a
RP
1741* Integers:: Integers
1742* Bignums:: Bignums
1743* Flonums:: Flonums
f009d0ab
RP
1744@ifclear GENERIC
1745@ifset I960
ba487f3a 1746* Bit Fields:: Bit Fields
f009d0ab
RP
1747@end ifset
1748@end ifclear
7a4c8e5c
RP
1749@end menu
1750
242d9c06 1751@node Integers
93b45514 1752@subsubsection Integers
66b818fb
RP
1753@cindex integers
1754@cindex constants, integer
1755
1756@cindex binary integers
1757@cindex integers, binary
b50e59fe
RP
1758A binary integer is @samp{0b} or @samp{0B} followed by zero or more of
1759the binary digits @samp{01}.
1760
66b818fb
RP
1761@cindex octal integers
1762@cindex integers, octal
93b45514
RP
1763An octal integer is @samp{0} followed by zero or more of the octal
1764digits (@samp{01234567}).
1765
66b818fb
RP
1766@cindex decimal integers
1767@cindex integers, decimal
93b45514
RP
1768A decimal integer starts with a non-zero digit followed by zero or
1769more digits (@samp{0123456789}).
1770
66b818fb
RP
1771@cindex hexadecimal integers
1772@cindex integers, hexadecimal
93b45514
RP
1773A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
1774more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
1775
47342e8f 1776Integers have the usual values. To denote a negative integer, use
b50e59fe 1777the prefix operator @samp{-} discussed under expressions
7a4c8e5c 1778(@pxref{Prefix Ops,,Prefix Operators}).
93b45514 1779
242d9c06 1780@node Bignums
93b45514 1781@subsubsection Bignums
66b818fb
RP
1782
1783@cindex bignums
1784@cindex constants, bignum
93b45514
RP
1785A @dfn{bignum} has the same syntax and semantics as an integer
1786except that the number (or its negative) takes more than 32 bits to
1787represent in binary. The distinction is made because in some places
1788integers are permitted while bignums are not.
1789
242d9c06 1790@node Flonums
93b45514 1791@subsubsection Flonums
66b818fb
RP
1792@cindex flonums
1793@cindex floating point numbers
1794@cindex constants, floating point
1795
1796@cindex precision, floating point
b50e59fe 1797A @dfn{flonum} represents a floating point number. The translation is
66b818fb 1798indirect: a decimal floating point number from the text is converted by
f009d0ab 1799@code{@value{AS}} to a generic binary floating point number of more than
b50e59fe
RP
1800sufficient precision. This generic floating point number is converted
1801to a particular computer's floating point format (or formats) by a
f009d0ab 1802portion of @code{@value{AS}} specialized to that computer.
93b45514
RP
1803
1804A flonum is written by writing (in order)
1805@itemize @bullet
1806@item
1807The digit @samp{0}.
9dcf8057 1808@ifset HPPA
05a0e43b 1809(@samp{0} is optional on the HPPA.)
9dcf8057 1810@end ifset
f009d0ab 1811
93b45514 1812@item
f009d0ab
RP
1813A letter, to tell @code{@value{AS}} the rest of the number is a flonum.
1814@ifset GENERIC
66b818fb 1815@kbd{e} is recommended. Case is not important.
0b5b143a
RP
1816@ignore
1817@c FIXME: verify if flonum syntax really this vague for most cases
05a0e43b
RP
1818(Any otherwise illegal letter works here, but that might be changed. Vax BSD
18194.2 assembler seems to allow any of @samp{defghDEFGH}.)
0b5b143a 1820@end ignore
f009d0ab
RP
1821
1822On the H8/300, H8/500,
f009d0ab 1823Hitachi SH,
f009d0ab
RP
1824and AMD 29K architectures, the letter must be
1825one of the letters @samp{DFPRSX} (in upper or lower case).
1826
99c4053d
KR
1827@c start-sanitize-arc
1828On the ARC, the letter one of the letters @samp{DFRS}
1829(in upper or lower case).
1830@c end-sanitize-arc
1831
f009d0ab
RP
1832On the Intel 960 architecture, the letter must be
1833one of the letters @samp{DFT} (in upper or lower case).
9dcf8057
JL
1834
1835On the HPPA architecture, the letter must be @samp{E} (upper case only).
f009d0ab
RP
1836@end ifset
1837@ifclear GENERIC
1838@ifset A29K
66b818fb 1839One of the letters @samp{DFPRSX} (in upper or lower case).
f009d0ab 1840@end ifset
99c4053d
KR
1841@c start-sanitize-arc
1842@ifset ARC
1843One of the letters @samp{DFRS} (in upper or lower case).
1844@end ifset
1845@c end-sanitize-arc
f009d0ab
RP
1846@ifset H8
1847One of the letters @samp{DFPRSX} (in upper or lower case).
1848@end ifset
9dcf8057 1849@ifset HPPA
05a0e43b 1850The letter @samp{E} (upper case only).
9dcf8057 1851@end ifset
910d7df2
C
1852@ifset I960
1853One of the letters @samp{DFT} (in upper or lower case).
1854@end ifset
f009d0ab
RP
1855@end ifclear
1856
93b45514
RP
1857@item
1858An optional sign: either @samp{+} or @samp{-}.
f009d0ab 1859
93b45514 1860@item
47342e8f 1861An optional @dfn{integer part}: zero or more decimal digits.
f009d0ab 1862
93b45514 1863@item
66b818fb 1864An optional @dfn{fractional part}: @samp{.} followed by zero
93b45514 1865or more decimal digits.
f009d0ab 1866
93b45514
RP
1867@item
1868An optional exponent, consisting of:
f009d0ab 1869
93b45514
RP
1870@itemize @bullet
1871@item
b50e59fe 1872An @samp{E} or @samp{e}.
d0281557
RP
1873@c I can't find a config where "EXP_CHARS" is other than 'eE', but in
1874@c principle this can perfectly well be different on different targets.
93b45514
RP
1875@item
1876Optional sign: either @samp{+} or @samp{-}.
1877@item
1878One or more decimal digits.
1879@end itemize
f009d0ab 1880
93b45514
RP
1881@end itemize
1882
66b818fb 1883At least one of the integer part or the fractional part must be
47342e8f 1884present. The floating point number has the usual base-10 value.
93b45514 1885
f009d0ab 1886@code{@value{AS}} does all processing using integers. Flonums are computed
47342e8f 1887independently of any floating point hardware in the computer running
f009d0ab 1888@code{@value{AS}}.
d0281557 1889
f009d0ab
RP
1890@ifclear GENERIC
1891@ifset I960
d0281557
RP
1892@c Bit fields are written as a general facility but are also controlled
1893@c by a conditional-compilation flag---which is as of now (21mar91)
1894@c turned on only by the i960 config of GAS.
242d9c06 1895@node Bit Fields
d0281557 1896@subsubsection Bit Fields
66b818fb
RP
1897
1898@cindex bit fields
1899@cindex constants, bit field
d0281557
RP
1900You can also define numeric constants as @dfn{bit fields}.
1901specify two numbers separated by a colon---
1902@example
1903@var{mask}:@var{value}
1904@end example
1905@noindent
05a0e43b
RP
1906@code{@value{AS}} applies a bitwise @sc{and} between @var{mask} and
1907@var{value}.
d0281557
RP
1908
1909The resulting number is then packed
f009d0ab 1910@ifset GENERIC
7a4c8e5c 1911@c this conditional paren in case bit fields turned on elsewhere than 960
d0281557 1912(in host-dependent byte order)
f009d0ab 1913@end ifset
d0281557
RP
1914into a field whose width depends on which assembler directive has the
1915bit-field as its argument. Overflow (a result from the bitwise and
1916requiring more binary digits to represent) is not an error; instead,
1917more constants are generated, of the specified width, beginning with the
1918least significant digits.@refill
1919
1920The directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long},
1921@code{.short}, and @code{.word} accept bit-field arguments.
f009d0ab
RP
1922@end ifset
1923@end ifclear
93b45514 1924
242d9c06 1925@node Sections
24b1493d 1926@chapter Sections and Relocation
66b818fb
RP
1927@cindex sections
1928@cindex relocation
d0281557 1929
7a4c8e5c 1930@menu
ba487f3a 1931* Secs Background:: Background
f009d0ab
RP
1932* Ld Sections:: @value{LD} Sections
1933* As Sections:: @value{AS} Internal Sections
ba487f3a
RP
1934* Sub-Sections:: Sub-Sections
1935* bss:: bss Section
7a4c8e5c
RP
1936@end menu
1937
242d9c06 1938@node Secs Background
b50e59fe 1939@section Background
66b818fb 1940
24b1493d 1941Roughly, a section is a range of addresses, with no gaps; all data
d0281557 1942``in'' those addresses is treated the same for some particular purpose.
24b1493d 1943For example there may be a ``read only'' section.
93b45514 1944
66b818fb
RP
1945@cindex linker, and assembler
1946@cindex assembler, and linker
f009d0ab
RP
1947The linker @code{@value{LD}} reads many object files (partial programs) and
1948combines their contents to form a runnable program. When @code{@value{AS}}
05a0e43b
RP
1949emits an object file, the partial program is assumed to start at address 0.
1950@code{@value{LD}} assigns the final addresses for the partial program, so that
1951different partial programs do not overlap. This is actually an
1952oversimplification, but it suffices to explain how @code{@value{AS}} uses
1953sections.
93b45514 1954
f009d0ab 1955@code{@value{LD}} moves blocks of bytes of your program to their run-time
93b45514 1956addresses. These blocks slide to their run-time addresses as rigid
47342e8f 1957units; their length does not change and neither does the order of bytes
24b1493d
RP
1958within them. Such a rigid unit is called a @emph{section}. Assigning
1959run-time addresses to sections is called @dfn{relocation}. It includes
47342e8f 1960the task of adjusting mentions of object-file addresses so they refer to
d0281557 1961the proper run-time addresses.
f009d0ab
RP
1962@ifset H8
1963For the H8/300 and H8/500,
f009d0ab 1964and for the Hitachi SH,
f009d0ab
RP
1965@code{@value{AS}} pads sections if needed to
1966ensure they end on a word (sixteen bit) boundary.
1967@end ifset
1968
1969@cindex standard @code{@value{AS}} sections
1970An object file written by @code{@value{AS}} has at least three sections, any
24b1493d 1971of which may be empty. These are named @dfn{text}, @dfn{data} and
f009d0ab 1972@dfn{bss} sections.
93b45514 1973
f009d0ab
RP
1974@ifset COFF
1975@ifset GENERIC
1976When it generates COFF output,
1977@end ifset
1978@code{@value{AS}} can also generate whatever other named sections you specify
24b1493d 1979using the @samp{.section} directive (@pxref{Section,,@code{.section}}).
05a0e43b
RP
1980If you do not use any directives that place output in the @samp{.text}
1981or @samp{.data} sections, these sections still exist, but are empty.
f009d0ab 1982@end ifset
d0281557 1983
9dcf8057
JL
1984@ifset HPPA
1985@ifset GENERIC
1986When @code{@value{AS}} generates SOM or ELF output for the HPPA,
1987@end ifset
1988@code{@value{AS}} can also generate whatever other named sections you
1989specify using the @samp{.space} and @samp{.subspace} directives. See
1990@cite{HP9000 Series 800 Assembly Language Reference Manual}
1991(HP 92432-90001) for details on the @samp{.space} and @samp{.subspace}
1992assembler directives.
1993
1994@ifset SOM
1995Additionally, @code{@value{AS}} uses different names for the standard
1996text, data, and bss sections when generating SOM output. Program text
1997is placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and
1998BSS into @samp{$BSS$}.
1999@end ifset
2000@end ifset
2001
24b1493d
RP
2002Within the object file, the text section starts at address @code{0}, the
2003data section follows, and the bss section follows the data section.
d0281557 2004
9dcf8057
JL
2005@ifset HPPA
2006When generating either SOM or ELF output files on the HPPA, the text
2007section starts at address @code{0}, the data section at address
2008@code{0x4000000}, and the bss section follows the data section.
2009@end ifset
2010
05a0e43b 2011To let @code{@value{LD}} know which data changes when the sections are
f009d0ab 2012relocated, and how to change that data, @code{@value{AS}} also writes to the
93b45514 2013object file details of the relocation needed. To perform relocation
f009d0ab 2014@code{@value{LD}} must know, each time an address in the object
47342e8f 2015file is mentioned:
93b45514
RP
2016@itemize @bullet
2017@item
47342e8f
RP
2018Where in the object file is the beginning of this reference to
2019an address?
93b45514 2020@item
47342e8f 2021How long (in bytes) is this reference?
93b45514 2022@item
24b1493d 2023Which section does the address refer to? What is the numeric value of
b50e59fe 2024@display
24b1493d 2025(@var{address}) @minus{} (@var{start-address of section})?
b50e59fe 2026@end display
93b45514 2027@item
b50e59fe 2028Is the reference to an address ``Program-Counter relative''?
93b45514
RP
2029@end itemize
2030
66b818fb
RP
2031@cindex addresses, format of
2032@cindex section-relative addressing
f009d0ab 2033In fact, every address @code{@value{AS}} ever uses is expressed as
d0281557 2034@display
24b1493d 2035(@var{section}) + (@var{offset into section})
d0281557
RP
2036@end display
2037@noindent
65fbb2d7
RP
2038Further, most expressions @code{@value{AS}} computes have this section-relative
2039nature.
2040@ifset SOM
2041(For some object formats, such as SOM for the HPPA, some expressions are
2042symbol-relative instead.)
2043@end ifset
dd565f85
RP
2044
2045In this manual we use the notation @{@var{secname} @var{N}@} to mean ``offset
2046@var{N} into section @var{secname}.''
24b1493d
RP
2047
2048Apart from text, data and bss sections you need to know about the
f009d0ab 2049@dfn{absolute} section. When @code{@value{LD}} mixes partial programs,
66b818fb 2050addresses in the absolute section remain unchanged. For example, address
05a0e43b
RP
2051@code{@{absolute 0@}} is ``relocated'' to run-time address 0 by
2052@code{@value{LD}}. Although the linker never arranges two partial programs'
2053data sections with overlapping addresses after linking, @emph{by definition}
2054their absolute sections must overlap. Address @code{@{absolute@ 239@}} in one
2055part of a program is always the same address when the program is running as
2056address @code{@{absolute@ 239@}} in any other part of the program.
47342e8f 2057
24b1493d
RP
2058The idea of sections is extended to the @dfn{undefined} section. Any
2059address whose section is unknown at assembly time is by definition
05a0e43b 2060rendered @{undefined @var{U}@}---where @var{U} is filled in later.
47342e8f 2061Since numbers are always defined, the only way to generate an undefined
93b45514
RP
2062address is to mention an undefined symbol. A reference to a named
2063common block would be such a symbol: its value is unknown at assembly
24b1493d 2064time so it has section @emph{undefined}.
93b45514 2065
24b1493d 2066By analogy the word @emph{section} is used to describe groups of sections in
f009d0ab 2067the linked program. @code{@value{LD}} puts all partial programs' text
24b1493d
RP
2068sections in contiguous addresses in the linked program. It is
2069customary to refer to the @emph{text section} of a program, meaning all
05a0e43b 2070the addresses of all partial programs' text sections. Likewise for
24b1493d 2071data and bss sections.
93b45514 2072
f009d0ab
RP
2073Some sections are manipulated by @code{@value{LD}}; others are invented for
2074use of @code{@value{AS}} and have no meaning except during assembly.
47342e8f 2075
f009d0ab
RP
2076@node Ld Sections
2077@section @value{LD} Sections
2078@code{@value{LD}} deals with just four kinds of sections, summarized below.
b50e59fe
RP
2079
2080@table @strong
47342e8f 2081
f009d0ab 2082@ifset COFF
66b818fb
RP
2083@cindex named sections
2084@cindex sections, named
24b1493d 2085@item named sections
f009d0ab
RP
2086@end ifset
2087@ifset aout-bout
66b818fb
RP
2088@cindex text section
2089@cindex data section
9dcf8057 2090@itemx text section
24b1493d 2091@itemx data section
f009d0ab
RP
2092@end ifset
2093These sections hold your program. @code{@value{AS}} and @code{@value{LD}} treat them as
24b1493d 2094separate but equal sections. Anything you can say of one section is
f009d0ab
RP
2095true another.
2096@ifset aout-bout
24b1493d
RP
2097When the program is running, however, it is
2098customary for the text section to be unalterable. The
05a0e43b 2099text section is often shared among processes: it contains
24b1493d 2100instructions, constants and the like. The data section of a running
b50e59fe 2101program is usually alterable: for example, C variables would be stored
24b1493d 2102in the data section.
f009d0ab 2103@end ifset
47342e8f 2104
66b818fb 2105@cindex bss section
24b1493d
RP
2106@item bss section
2107This section contains zeroed bytes when your program begins running. It
47342e8f 2108is used to hold unitialized variables or common storage. The length of
24b1493d 2109each partial program's bss section is important, but because it starts
47342e8f 2110out containing zeroed bytes there is no need to store explicit zero
24b1493d 2111bytes in the object file. The bss section was invented to eliminate
d0281557 2112those explicit zeros from object files.
47342e8f 2113
66b818fb 2114@cindex absolute section
24b1493d
RP
2115@item absolute section
2116Address 0 of this section is always ``relocated'' to runtime address 0.
f009d0ab 2117This is useful if you want to refer to an address that @code{@value{LD}} must
47342e8f 2118not change when relocating. In this sense we speak of absolute
05a0e43b 2119addresses being ``unrelocatable'': they do not change during relocation.
47342e8f 2120
66b818fb 2121@cindex undefined section
24b1493d
RP
2122@item undefined section
2123This ``section'' is a catch-all for address references to objects not in
2124the preceding sections.
47342e8f 2125@c FIXME: ref to some other doc on obj-file formats could go here.
93b45514 2126@end table
47342e8f 2127
66b818fb 2128@cindex relocation example
f009d0ab
RP
2129An idealized example of three relocatable sections follows.
2130@ifset COFF
66b818fb 2131The example uses the traditional section names @samp{.text} and @samp{.data}.
f009d0ab 2132@end ifset
24b1493d 2133Memory addresses are on the horizontal axis.
93b45514 2134
7d7ecbdd 2135@c TEXI2ROFF-KILL
b50e59fe 2136@ifinfo
7d7ecbdd 2137@c END TEXI2ROFF-KILL
d0281557 2138@smallexample
93b45514
RP
2139 +-----+----+--+
2140partial program # 1: |ttttt|dddd|00|
2141 +-----+----+--+
2142
2143 text data bss
2144 seg. seg. seg.
2145
2146 +---+---+---+
2147partial program # 2: |TTT|DDD|000|
2148 +---+---+---+
2149
2150 +--+---+-----+--+----+---+-----+~~
2151linked program: | |TTT|ttttt| |dddd|DDD|00000|
2152 +--+---+-----+--+----+---+-----+~~
2153
2154 addresses: 0 @dots{}
d0281557 2155@end smallexample
7d7ecbdd 2156@c TEXI2ROFF-KILL
b50e59fe 2157@end ifinfo
8babef85 2158@need 5000
b50e59fe 2159@tex
d0281557 2160
66b818fb 2161\line{\it Partial program \#1: \hfil}
d0281557
RP
2162\line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
2163\line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil}
2164
66b818fb 2165\line{\it Partial program \#2: \hfil}
d0281557
RP
2166\line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
2167\line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil}
2168
66b818fb 2169\line{\it linked program: \hfil}
d0281557
RP
2170\line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil}
2171\line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt
b50e59fe 2172ttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt
d0281557
RP
2173DDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil}
2174
66b818fb 2175\line{\it addresses: \hfil}
d0281557
RP
2176\line{0\dots\hfil}
2177
b50e59fe 2178@end tex
7d7ecbdd 2179@c END TEXI2ROFF-KILL
93b45514 2180
f009d0ab
RP
2181@node As Sections
2182@section @value{AS} Internal Sections
66b818fb 2183
f009d0ab 2184@cindex internal @code{@value{AS}} sections
66b818fb 2185@cindex sections in messages, internal
f009d0ab 2186These sections are meant only for the internal use of @code{@value{AS}}. They
05a0e43b 2187have no meaning at run-time. You do not really need to know about these
f009d0ab 2188sections for most purposes; but they can be mentioned in @code{@value{AS}}
24b1493d 2189warning messages, so it might be helpful to have an idea of their
f009d0ab 2190meanings to @code{@value{AS}}. These sections are used to permit the
24b1493d
RP
2191value of every expression in your assembly language program to be a
2192section-relative address.
93b45514 2193
d0281557 2194@table @b
66b818fb 2195@cindex assembler internal logic error
71dd3c40 2196@item ASSEMBLER-INTERNAL-LOGIC-ERROR!
24b1493d
RP
2197An internal assembler logic error has been found. This means there is a
2198bug in the assembler.
2199
9dcf8057 2200@cindex expr (internal section)
71dd3c40 2201@item expr section
9dcf8057
JL
2202The assembler stores complex expression internally as combinations of
2203symbols. When it needs to represent an expression as a symbol, it puts
2204it in the expr section.
24b1493d
RP
2205@c FIXME item debug
2206@c FIXME item transfer[t] vector preload
2207@c FIXME item transfer[t] vector postload
2208@c FIXME item register
93b45514
RP
2209@end table
2210
242d9c06 2211@node Sub-Sections
24b1493d 2212@section Sub-Sections
66b818fb
RP
2213
2214@cindex numbered subsections
2215@cindex grouping data
f009d0ab 2216@ifset aout-bout
24b1493d 2217Assembled bytes
f009d0ab 2218@ifset COFF
24b1493d 2219conventionally
f009d0ab
RP
2220@end ifset
2221fall into two sections: text and data.
2222@end ifset
66b818fb 2223You may have separate groups of
f009d0ab 2224@ifset GENERIC
66b818fb 2225data in named sections
f009d0ab
RP
2226@end ifset
2227@ifclear GENERIC
2228@ifclear aout-bout
2229data in named sections
2230@end ifclear
2231@ifset aout-bout
2232text or data
2233@end ifset
2234@end ifclear
05a0e43b
RP
2235that you want to end up near to each other in the object file, even though they
2236are not contiguous in the assembler source. @code{@value{AS}} allows you to
2237use @dfn{subsections} for this purpose. Within each section, there can be
2238numbered subsections with values from 0 to 8192. Objects assembled into the
2239same subsection go into the object file together with other objects in the same
2240subsection. For example, a compiler might want to store constants in the text
2241section, but might not want to have them interspersed with the program being
2242assembled. In this case, the compiler could issue a @samp{.text 0} before each
2243section of code being output, and a @samp{.text 1} before each group of
2244constants being output.
2245
2246Subsections are optional. If you do not use subsections, everything
2247goes in subsection number zero.
93b45514 2248
f009d0ab 2249@ifset GENERIC
24b1493d
RP
2250Each subsection is zero-padded up to a multiple of four bytes.
2251(Subsections may be padded a different amount on different flavors
f009d0ab
RP
2252of @code{@value{AS}}.)
2253@end ifset
2254@ifclear GENERIC
2255@ifset H8
2256On the H8/300 and H8/500 platforms, each subsection is zero-padded to a word
66b818fb 2257boundary (two bytes).
f009d0ab 2258The same is true on the Hitachi SH.
f009d0ab
RP
2259@end ifset
2260@ifset I960
24b1493d 2261@c FIXME section padding (alignment)?
d0281557
RP
2262@c Rich Pixley says padding here depends on target obj code format; that
2263@c doesn't seem particularly useful to say without further elaboration,
2264@c so for now I say nothing about it. If this is a generic BFD issue,
2265@c these paragraphs might need to vanish from this manual, and be
2266@c discussed in BFD chapter of binutils (or some such).
f009d0ab
RP
2267@end ifset
2268@ifset A29K
66b818fb 2269On the AMD 29K family, no particular padding is added to section or
f009d0ab
RP
2270subsection sizes; @value{AS} forces no alignment on this platform.
2271@end ifset
2272@end ifclear
66b818fb 2273
24b1493d 2274Subsections appear in your object file in numeric order, lowest numbered
b50e59fe 2275to highest. (All this to be compatible with other people's assemblers.)
f009d0ab 2276The object file contains no representation of subsections; @code{@value{LD}} and
05a0e43b 2277other programs that manipulate object files see no trace of them.
24b1493d
RP
2278They just see all your text subsections as a text section, and all your
2279data subsections as a data section.
93b45514 2280
24b1493d 2281To specify which subsection you want subsequent statements assembled
66b818fb
RP
2282into, use a numeric argument to specify it, in a @samp{.text
2283@var{expression}} or a @samp{.data @var{expression}} statement.
f009d0ab
RP
2284@ifset COFF
2285@ifset GENERIC
2286When generating COFF output, you
2287@end ifset
2288@ifclear GENERIC
66b818fb 2289You
f009d0ab 2290@end ifclear
66b818fb
RP
2291can also use an extra subsection
2292argument with arbitrary named sections: @samp{.section @var{name},
2293@var{expression}}.
f009d0ab 2294@end ifset
66b818fb
RP
2295@var{Expression} should be an absolute expression.
2296(@xref{Expressions}.) If you just say @samp{.text} then @samp{.text 0}
2297is assumed. Likewise @samp{.data} means @samp{.data 0}. Assembly
2298begins in @code{text 0}. For instance:
d0281557 2299@smallexample
24b1493d
RP
2300.text 0 # The default subsection is text 0 anyway.
2301.ascii "This lives in the first text subsection. *"
93b45514 2302.text 1
24b1493d 2303.ascii "But this lives in the second text subsection."
93b45514 2304.data 0
24b1493d
RP
2305.ascii "This lives in the data section,"
2306.ascii "in the first data subsection."
93b45514 2307.text 0
24b1493d 2308.ascii "This lives in the first text section,"
93b45514 2309.ascii "immediately following the asterisk (*)."
d0281557 2310@end smallexample
93b45514 2311
05a0e43b
RP
2312Each section has a @dfn{location counter} incremented by one for every byte
2313assembled into that section. Because subsections are merely a convenience
2314restricted to @code{@value{AS}} there is no concept of a subsection location
2315counter. There is no way to directly manipulate a location counter---but the
2316@code{.align} directive changes it, and any label definition captures its
2317current value. The location counter of the section where statements are being
2318assembled is said to be the @dfn{active} location counter.
93b45514 2319
242d9c06 2320@node bss
24b1493d 2321@section bss Section
66b818fb
RP
2322
2323@cindex bss section
2324@cindex common variable storage
24b1493d
RP
2325The bss section is used for local common variable storage.
2326You may allocate address space in the bss section, but you may
93b45514 2327not dictate data to load into it before your program executes. When
b50e59fe 2328your program starts running, all the contents of the bss
24b1493d 2329section are zeroed bytes.
93b45514 2330
24b1493d
RP
2331Addresses in the bss section are allocated with special directives; you
2332may not assemble anything directly into the bss section. Hence there
2333are no bss subsections. @xref{Comm,,@code{.comm}},
7a4c8e5c 2334@pxref{Lcomm,,@code{.lcomm}}.
93b45514 2335
242d9c06 2336@node Symbols
93b45514 2337@chapter Symbols
66b818fb
RP
2338
2339@cindex symbols
47342e8f
RP
2340Symbols are a central concept: the programmer uses symbols to name
2341things, the linker uses symbols to link, and the debugger uses symbols
d0281557 2342to debug.
47342e8f 2343
b50e59fe 2344@quotation
66b818fb 2345@cindex debuggers, and symbol order
f009d0ab 2346@emph{Warning:} @code{@value{AS}} does not place symbols in the object file in
b50e59fe
RP
2347the same order they were declared. This may break some debuggers.
2348@end quotation
93b45514 2349
7a4c8e5c 2350@menu
ba487f3a
RP
2351* Labels:: Labels
2352* Setting Symbols:: Giving Symbols Other Values
2353* Symbol Names:: Symbol Names
2354* Dot:: The Special Dot Symbol
2355* Symbol Attributes:: Symbol Attributes
7a4c8e5c
RP
2356@end menu
2357
242d9c06 2358@node Labels
93b45514 2359@section Labels
66b818fb
RP
2360
2361@cindex labels
93b45514 2362A @dfn{label} is written as a symbol immediately followed by a colon
b50e59fe 2363@samp{:}. The symbol then represents the current value of the
93b45514
RP
2364active location counter, and is, for example, a suitable instruction
2365operand. You are warned if you use the same symbol to represent two
2366different locations: the first definition overrides any other
2367definitions.
2368
9dcf8057 2369@ifset HPPA
81fcb3ff
RP
2370On the HPPA, the usual form for a label need not be immediately followed by a
2371colon, but instead must start in column zero. Only one label may be defined on
2372a single line. To work around this, the HPPA version of @code{@value{AS}} also
2373provides a special directive @code{.label} for defining labels more flexibly.
9dcf8057
JL
2374@end ifset
2375
242d9c06 2376@node Setting Symbols
93b45514 2377@section Giving Symbols Other Values
66b818fb
RP
2378
2379@cindex assigning values to symbols
2380@cindex symbol values, assigning
b50e59fe
RP
2381A symbol can be given an arbitrary value by writing a symbol, followed
2382by an equals sign @samp{=}, followed by an expression
93b45514 2383(@pxref{Expressions}). This is equivalent to using the @code{.set}
7a4c8e5c 2384directive. @xref{Set,,@code{.set}}.
93b45514 2385
242d9c06 2386@node Symbol Names
93b45514 2387@section Symbol Names
66b818fb
RP
2388
2389@cindex symbol names
2390@cindex names, symbol
f009d0ab
RP
2391@ifclear SPECIAL-SYMS
2392Symbol names begin with a letter or with one of @samp{._}. On most
2393machines, you can also use @code{$} in symbol names; exceptions are
2394noted in @ref{Machine Dependencies}. That character may be followed by any
2395string of digits, letters, dollar signs (unless otherwise noted in
2396@ref{Machine Dependencies}), and underscores.
2397@end ifclear
2398@ifset A29K
b50e59fe
RP
2399For the AMD 29K family, @samp{?} is also allowed in the
2400body of a symbol name, though not at its beginning.
f009d0ab
RP
2401@end ifset
2402
2403@ifset SPECIAL-SYMS
2404@ifset H8
2405Symbol names begin with a letter or with one of @samp{._}. On the
f009d0ab 2406Hitachi SH or the
f009d0ab
RP
2407H8/500, you can also use @code{$} in symbol names. That character may
2408be followed by any string of digits, letters, dollar signs (save on the
2409H8/300), and underscores.
2410@end ifset
2411@end ifset
2412
2413Case of letters is significant: @code{foo} is a different symbol name
2414than @code{Foo}.
b50e59fe 2415
05a0e43b
RP
2416Each symbol has exactly one name. Each name in an assembly language program
2417refers to exactly one symbol. You may use that symbol name any number of times
2418in a program.
93b45514 2419
7a4c8e5c 2420@subheading Local Symbol Names
93b45514 2421
66b818fb
RP
2422@cindex local symbol names
2423@cindex symbol names, local
2424@cindex temporary symbol names
2425@cindex symbol names, temporary
93b45514 2426Local symbols help compilers and programmers use names temporarily.
b50e59fe
RP
2427There are ten local symbol names, which are re-used throughout the
2428program. You may refer to them using the names @samp{0} @samp{1}
2429@dots{} @samp{9}. To define a local symbol, write a label of the form
2430@samp{@b{N}:} (where @b{N} represents any digit). To refer to the most
2431recent previous definition of that symbol write @samp{@b{N}b}, using the
2432same digit as when you defined the label. To refer to the next
2433definition of a local label, write @samp{@b{N}f}---where @b{N} gives you
2434a choice of 10 forward references. The @samp{b} stands for
2435``backwards'' and the @samp{f} stands for ``forwards''.
2436
8babef85 2437Local symbols are not emitted by the current @sc{gnu} C compiler.
93b45514
RP
2438
2439There is no restriction on how you can use these labels, but
2440remember that at any point in the assembly you can refer to at most
244110 prior local labels and to at most 10 forward local labels.
2442
47342e8f 2443Local symbol names are only a notation device. They are immediately
93b45514 2444transformed into more conventional symbol names before the assembler
47342e8f
RP
2445uses them. The symbol names stored in the symbol table, appearing in
2446error messages and optionally emitted to the object file have these
2447parts:
2448
2449@table @code
93b45514 2450@item L
f009d0ab
RP
2451All local labels begin with @samp{L}. Normally both @code{@value{AS}} and
2452@code{@value{LD}} forget symbols that start with @samp{L}. These labels are
05a0e43b
RP
2453used for symbols you are never intended to see. If you use the
2454@samp{-L} option then @code{@value{AS}} retains these symbols in the
f009d0ab 2455object file. If you also instruct @code{@value{LD}} to retain these symbols,
93b45514 2456you may use them in debugging.
47342e8f
RP
2457
2458@item @var{digit}
93b45514
RP
2459If the label is written @samp{0:} then the digit is @samp{0}.
2460If the label is written @samp{1:} then the digit is @samp{1}.
2461And so on up through @samp{9:}.
47342e8f
RP
2462
2463@item @ctrl{A}
05a0e43b 2464This unusual character is included so you do not accidentally invent
93b45514
RP
2465a symbol of the same name. The character has ASCII value
2466@samp{\001}.
47342e8f
RP
2467
2468@item @emph{ordinal number}
2469This is a serial number to keep the labels distinct. The first
93b45514 2470@samp{0:} gets the number @samp{1}; The 15th @samp{0:} gets the
47342e8f 2471number @samp{15}; @emph{etc.}. Likewise for the other labels @samp{1:}
93b45514
RP
2472through @samp{9:}.
2473@end table
47342e8f
RP
2474
2475For instance, the first @code{1:} is named @code{L1@ctrl{A}1}, the 44th
d0281557 2476@code{3:} is named @code{L3@ctrl{A}44}.
93b45514 2477
242d9c06 2478@node Dot
93b45514
RP
2479@section The Special Dot Symbol
2480
66b818fb
RP
2481@cindex dot (symbol)
2482@cindex @code{.} (symbol)
2483@cindex current address
2484@cindex location counter
b50e59fe 2485The special symbol @samp{.} refers to the current address that
f009d0ab 2486@code{@value{AS}} is assembling into. Thus, the expression @samp{melvin:
05a0e43b 2487.long .} defines @code{melvin} to contain its own address.
93b45514
RP
2488Assigning a value to @code{.} is treated the same as a @code{.org}
2489directive. Thus, the expression @samp{.=.+4} is the same as saying
f009d0ab 2490@ifclear no-space-dir
09352a5d 2491@samp{.space 4}.
f009d0ab
RP
2492@end ifclear
2493@ifset no-space-dir
2494@ifset A29K
b50e59fe 2495@samp{.block 4}.
f009d0ab
RP
2496@end ifset
2497@end ifset
b50e59fe 2498
242d9c06 2499@node Symbol Attributes
93b45514 2500@section Symbol Attributes
66b818fb
RP
2501
2502@cindex symbol attributes
2503@cindex attributes, symbol
d0281557 2504Every symbol has, as well as its name, the attributes ``Value'' and
66b818fb 2505``Type''. Depending on output format, symbols can also have auxiliary
f009d0ab
RP
2506attributes.
2507@ifset INTERNALS
2508The detailed definitions are in @file{a.out.h}.
2509@end ifset
93b45514 2510
f009d0ab 2511If you use a symbol without defining it, @code{@value{AS}} assumes zero for
93b45514
RP
2512all these attributes, and probably won't warn you. This makes the
2513symbol an externally defined symbol, which is generally what you
2514would want.
2515
7a4c8e5c 2516@menu
ba487f3a
RP
2517* Symbol Value:: Value
2518* Symbol Type:: Type
f009d0ab
RP
2519@ifset aout-bout
2520@ifset GENERIC
2521* a.out Symbols:: Symbol Attributes: @code{a.out}
2522@end ifset
2523@ifclear GENERIC
2524@ifclear BOUT
ba487f3a 2525* a.out Symbols:: Symbol Attributes: @code{a.out}
f009d0ab
RP
2526@end ifclear
2527@ifset BOUT
ba487f3a 2528* a.out Symbols:: Symbol Attributes: @code{a.out}, @code{b.out}
f009d0ab
RP
2529@end ifset
2530@end ifclear
2531@end ifset
2532@ifset COFF
ba487f3a 2533* COFF Symbols:: Symbol Attributes for COFF
f009d0ab 2534@end ifset
9dcf8057
JL
2535@ifset SOM
2536* SOM Symbols:: Symbol Attributes for SOM
2537@end ifset
7a4c8e5c
RP
2538@end menu
2539
242d9c06 2540@node Symbol Value
93b45514 2541@subsection Value
66b818fb
RP
2542
2543@cindex value of a symbol
2544@cindex symbol value
24b1493d
RP
2545The value of a symbol is (usually) 32 bits. For a symbol which labels a
2546location in the text, data, bss or absolute sections the value is the
2547number of addresses from the start of that section to the label.
2548Naturally for text, data and bss sections the value of a symbol changes
f009d0ab 2549as @code{@value{LD}} changes section base addresses during linking. Absolute
24b1493d
RP
2550symbols' values do not change during linking: that is why they are
2551called absolute.
93b45514 2552
b50e59fe 2553The value of an undefined symbol is treated in a special way. If it is
05a0e43b
RP
25540 then the symbol is not defined in this assembler source file, and
2555@code{@value{LD}} tries to determine its value from other files linked into the
2556same program. You make this kind of symbol simply by mentioning a symbol
b50e59fe
RP
2557name without defining it. A non-zero value represents a @code{.comm}
2558common declaration. The value is how much common storage to reserve, in
2559bytes (addresses). The symbol refers to the first address of the
2560allocated storage.
93b45514 2561
242d9c06 2562@node Symbol Type
93b45514 2563@subsection Type
66b818fb
RP
2564
2565@cindex type of a symbol
2566@cindex symbol type
24b1493d 2567The type attribute of a symbol contains relocation (section)
d0281557
RP
2568information, any flag settings indicating that a symbol is external, and
2569(optionally), other information for linkers and debuggers. The exact
2570format depends on the object-code output format in use.
93b45514 2571
f009d0ab
RP
2572@ifset aout-bout
2573@ifclear GENERIC
2574@ifset BOUT
2575@c The following avoids a "widow" subsection title. @group would be
2576@c better if it were available outside examples.
2577@need 1000
242d9c06 2578@node a.out Symbols
d0281557 2579@subsection Symbol Attributes: @code{a.out}, @code{b.out}
66b818fb
RP
2580
2581@cindex @code{b.out} symbol attributes
2582@cindex symbol attributes, @code{b.out}
f009d0ab
RP
2583These symbol attributes appear only when @code{@value{AS}} is configured for
2584one of the Berkeley-descended object output formats---@code{a.out} or
2585@code{b.out}.
2586
2587@end ifset
2588@ifclear BOUT
2589@node a.out Symbols
2590@subsection Symbol Attributes: @code{a.out}
2591
2592@cindex @code{a.out} symbol attributes
2593@cindex symbol attributes, @code{a.out}
2594
2595@end ifclear
2596@end ifclear
2597@ifset GENERIC
2598@node a.out Symbols
0b5b143a 2599@subsection Symbol Attributes: @code{a.out}
7a4c8e5c 2600
66b818fb
RP
2601@cindex @code{a.out} symbol attributes
2602@cindex symbol attributes, @code{a.out}
2603
f009d0ab 2604@end ifset
7a4c8e5c 2605@menu
ba487f3a
RP
2606* Symbol Desc:: Descriptor
2607* Symbol Other:: Other
7a4c8e5c 2608@end menu
93b45514 2609
242d9c06 2610@node Symbol Desc
d0281557 2611@subsubsection Descriptor
66b818fb
RP
2612
2613@cindex descriptor, of @code{a.out} symbol
93b45514 2614This is an arbitrary 16-bit value. You may establish a symbol's
7a4c8e5c
RP
2615descriptor value by using a @code{.desc} statement
2616(@pxref{Desc,,@code{.desc}}). A descriptor value means nothing to
f009d0ab 2617@code{@value{AS}}.
93b45514 2618
242d9c06 2619@node Symbol Other
d0281557 2620@subsubsection Other
66b818fb
RP
2621
2622@cindex other attribute, of @code{a.out} symbol
f009d0ab
RP
2623This is an arbitrary 8-bit value. It means nothing to @code{@value{AS}}.
2624@end ifset
d0281557 2625
f009d0ab 2626@ifset COFF
242d9c06 2627@node COFF Symbols
d0281557 2628@subsection Symbol Attributes for COFF
66b818fb
RP
2629
2630@cindex COFF symbol attributes
2631@cindex symbol attributes, COFF
2632
d0281557
RP
2633The COFF format supports a multitude of auxiliary symbol attributes;
2634like the primary symbol attributes, they are set between @code{.def} and
f009d0ab 2635@code{.endef} directives.
d0281557
RP
2636
2637@subsubsection Primary Attributes
66b818fb
RP
2638
2639@cindex primary attributes, COFF symbols
d0281557
RP
2640The symbol name is set with @code{.def}; the value and type,
2641respectively, with @code{.val} and @code{.type}.
2642
2643@subsubsection Auxiliary Attributes
66b818fb
RP
2644
2645@cindex auxiliary attributes, COFF symbols
f009d0ab 2646The @code{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl},
d0281557
RP
2647@code{.size}, and @code{.tag} can generate auxiliary symbol table
2648information for COFF.
f009d0ab 2649@end ifset
93b45514 2650
9dcf8057
JL
2651@ifset SOM
2652@node SOM Symbols
2653@subsection Symbol Attributes for SOM
2654
2655@cindex SOM symbol attributes
2656@cindex symbol attributes, SOM
2657
05a0e43b
RP
2658The SOM format for the HPPA supports a multitude of symbol attributes set with
2659the @code{.EXPORT} and @code{.IMPORT} directives.
9dcf8057
JL
2660
2661The attributes are described in @cite{HP9000 Series 800 Assembly
2662Language Reference Manual} (HP 92432-90001) under the @code{IMPORT} and
2663@code{EXPORT} assembler directive documentation.
2664@end ifset
2665
242d9c06 2666@node Expressions
93b45514 2667@chapter Expressions
66b818fb
RP
2668
2669@cindex expressions
2670@cindex addresses
2671@cindex numeric values
93b45514
RP
2672An @dfn{expression} specifies an address or numeric value.
2673Whitespace may precede and/or follow an expression.
2674
dd565f85
RP
2675The result of an expression must be an absolute number, or else an offset into
2676a particular section. If an expression is not absolute, and there is not
2677enough information when @code{@value{AS}} sees the expression to know its
2678section, a second pass over the source program might be necessary to interpret
2679the expression---but the second pass is currently not implemented.
2680@code{@value{AS}} aborts with an error message in this situation.
2681
7a4c8e5c 2682@menu
ba487f3a
RP
2683* Empty Exprs:: Empty Expressions
2684* Integer Exprs:: Integer Expressions
7a4c8e5c
RP
2685@end menu
2686
242d9c06 2687@node Empty Exprs
93b45514 2688@section Empty Expressions
66b818fb
RP
2689
2690@cindex empty expressions
2691@cindex expressions, empty
47342e8f 2692An empty expression has no value: it is just whitespace or null.
93b45514 2693Wherever an absolute expression is required, you may omit the
05a0e43b 2694expression, and @code{@value{AS}} assumes a value of (absolute) 0. This
93b45514
RP
2695is compatible with other assemblers.
2696
242d9c06 2697@node Integer Exprs
93b45514 2698@section Integer Expressions
66b818fb
RP
2699
2700@cindex integer expressions
2701@cindex expressions, integer
47342e8f
RP
2702An @dfn{integer expression} is one or more @emph{arguments} delimited
2703by @emph{operators}.
2704
7a4c8e5c 2705@menu
ba487f3a
RP
2706* Arguments:: Arguments
2707* Operators:: Operators
2708* Prefix Ops:: Prefix Operators
2709* Infix Ops:: Infix Operators
7a4c8e5c
RP
2710@end menu
2711
242d9c06 2712@node Arguments
47342e8f 2713@subsection Arguments
93b45514 2714
66b818fb
RP
2715@cindex expression arguments
2716@cindex arguments in expressions
2717@cindex operands in expressions
2718@cindex arithmetic operands
47342e8f
RP
2719@dfn{Arguments} are symbols, numbers or subexpressions. In other
2720contexts arguments are sometimes called ``arithmetic operands''. In
2721this manual, to avoid confusing them with the ``instruction operands'' of
2722the machine language, we use the term ``argument'' to refer to parts of
b50e59fe 2723expressions only, reserving the word ``operand'' to refer only to machine
d0281557 2724instruction operands.
93b45514 2725
24b1493d
RP
2726Symbols are evaluated to yield @{@var{section} @var{NNN}@} where
2727@var{section} is one of text, data, bss, absolute,
d0281557 2728or undefined. @var{NNN} is a signed, 2's complement 32 bit
93b45514
RP
2729integer.
2730
2731Numbers are usually integers.
2732
2733A number can be a flonum or bignum. In this case, you are warned
f009d0ab 2734that only the low order 32 bits are used, and @code{@value{AS}} pretends
93b45514
RP
2735these 32 bits are an integer. You may write integer-manipulating
2736instructions that act on exotic constants, compatible with other
2737assemblers.
2738
66b818fb 2739@cindex subexpressions
b50e59fe
RP
2740Subexpressions are a left parenthesis @samp{(} followed by an integer
2741expression, followed by a right parenthesis @samp{)}; or a prefix
47342e8f 2742operator followed by an argument.
93b45514 2743
242d9c06 2744@node Operators
93b45514 2745@subsection Operators
66b818fb
RP
2746
2747@cindex operators, in expressions
2748@cindex arithmetic functions
2749@cindex functions, in expressions
b50e59fe
RP
2750@dfn{Operators} are arithmetic functions, like @code{+} or @code{%}. Prefix
2751operators are followed by an argument. Infix operators appear
47342e8f 2752between their arguments. Operators may be preceded and/or followed by
93b45514
RP
2753whitespace.
2754
242d9c06 2755@node Prefix Ops
66b818fb
RP
2756@subsection Prefix Operator
2757
2758@cindex prefix operators
f009d0ab 2759@code{@value{AS}} has the following @dfn{prefix operators}. They each take
47342e8f 2760one argument, which must be absolute.
d0281557
RP
2761
2762@c the tex/end tex stuff surrounding this small table is meant to make
2763@c it align, on the printed page, with the similar table in the next
2764@c section (which is inside an enumerate).
2765@tex
2766\global\advance\leftskip by \itemindent
2767@end tex
2768
b50e59fe 2769@table @code
93b45514 2770@item -
b50e59fe 2771@dfn{Negation}. Two's complement negation.
93b45514 2772@item ~
b50e59fe 2773@dfn{Complementation}. Bitwise not.
93b45514
RP
2774@end table
2775
d0281557
RP
2776@tex
2777\global\advance\leftskip by -\itemindent
2778@end tex
2779
242d9c06 2780@node Infix Ops
b50e59fe 2781@subsection Infix Operators
47342e8f 2782
66b818fb
RP
2783@cindex infix operators
2784@cindex operators, permitted arguments
b50e59fe
RP
2785@dfn{Infix operators} take two arguments, one on either side. Operators
2786have precedence, but operations with equal precedence are performed left
2787to right. Apart from @code{+} or @code{-}, both arguments must be
2788absolute, and the result is absolute.
47342e8f 2789
93b45514 2790@enumerate
66b818fb
RP
2791@cindex operator precedence
2792@cindex precedence of operators
47342e8f 2793
93b45514 2794@item
47342e8f 2795Highest Precedence
66b818fb 2796
93b45514
RP
2797@table @code
2798@item *
2799@dfn{Multiplication}.
66b818fb 2800
93b45514
RP
2801@item /
2802@dfn{Division}. Truncation is the same as the C operator @samp{/}
66b818fb 2803
93b45514
RP
2804@item %
2805@dfn{Remainder}.
66b818fb 2806
f009d0ab
RP
2807@item <
2808@itemx <<
2809@dfn{Shift Left}. Same as the C operator @samp{<<}.
66b818fb 2810
f009d0ab
RP
2811@item >
2812@itemx >>
2813@dfn{Shift Right}. Same as the C operator @samp{>>}.
93b45514 2814@end table
47342e8f 2815
93b45514 2816@item
47342e8f 2817Intermediate precedence
66b818fb 2818
47342e8f 2819@table @code
93b45514 2820@item |
66b818fb 2821
93b45514 2822@dfn{Bitwise Inclusive Or}.
66b818fb 2823
93b45514
RP
2824@item &
2825@dfn{Bitwise And}.
66b818fb 2826
93b45514
RP
2827@item ^
2828@dfn{Bitwise Exclusive Or}.
66b818fb 2829
93b45514
RP
2830@item !
2831@dfn{Bitwise Or Not}.
2832@end table
47342e8f 2833
93b45514 2834@item
47342e8f 2835Lowest Precedence
66b818fb 2836
47342e8f 2837@table @code
66b818fb
RP
2838@cindex addition, permitted arguments
2839@cindex plus, permitted arguments
2840@cindex arguments for addition
71dd3c40 2841@item +
dd565f85
RP
2842@dfn{Addition}. If either argument is absolute, the result has the section of
2843the other argument. You may not add together arguments from different
2844sections.
66b818fb 2845
66b818fb
RP
2846@cindex subtraction, permitted arguments
2847@cindex minus, permitted arguments
2848@cindex arguments for subtraction
71dd3c40 2849@item -
47342e8f 2850@dfn{Subtraction}. If the right argument is absolute, the
24b1493d 2851result has the section of the left argument.
dd565f85
RP
2852If both arguments are in the same section, the result is absolute.
2853You may not subtract arguments from different sections.
2854@c FIXME is there still something useful to say about undefined - undefined ?
93b45514
RP
2855@end table
2856@end enumerate
2857
dd565f85
RP
2858In short, it's only meaningful to add or subtract the @emph{offsets} in an
2859address; you can only have a defined section in one of the two arguments.
47342e8f 2860
242d9c06 2861@node Pseudo Ops
93b45514 2862@chapter Assembler Directives
d0281557 2863
66b818fb
RP
2864@cindex directives, machine independent
2865@cindex pseudo-ops, machine independent
2866@cindex machine independent directives
d0281557 2867All assembler directives have names that begin with a period (@samp{.}).
66b818fb 2868The rest of the name is letters, usually in lower case.
d0281557 2869
f009d0ab 2870This chapter discusses directives that are available regardless of the
8babef85 2871target machine configuration for the @sc{gnu} assembler.
f009d0ab
RP
2872@ifset GENERIC
2873Some machine configurations provide additional directives.
2874@xref{Machine Dependencies}.
2875@end ifset
2876@ifclear GENERIC
2877@ifset machine-directives
2878@xref{Machine Dependencies} for additional directives.
2879@end ifset
2880@end ifclear
d0281557 2881
7a4c8e5c 2882@menu
ba487f3a 2883* Abort:: @code{.abort}
f009d0ab
RP
2884@ifset COFF
2885* ABORT:: @code{.ABORT}
2886@end ifset
2887
ba487f3a 2888* Align:: @code{.align @var{abs-expr} , @var{abs-expr}}
2d8e0f62 2889* App-File:: @code{.app-file @var{string}}
ba487f3a
RP
2890* Ascii:: @code{.ascii "@var{string}"}@dots{}
2891* Asciz:: @code{.asciz "@var{string}"}@dots{}
931a8fab 2892* Balign:: @code{.balign @var{abs-expr} , @var{abs-expr}}
ba487f3a
RP
2893* Byte:: @code{.byte @var{expressions}}
2894* Comm:: @code{.comm @var{symbol} , @var{length} }
2895* Data:: @code{.data @var{subsection}}
f009d0ab 2896@ifset COFF
ba487f3a 2897* Def:: @code{.def @var{name}}
f009d0ab
RP
2898@end ifset
2899@ifset aout-bout
ba487f3a 2900* Desc:: @code{.desc @var{symbol}, @var{abs-expression}}
f009d0ab
RP
2901@end ifset
2902@ifset COFF
ba487f3a 2903* Dim:: @code{.dim}
f009d0ab
RP
2904@end ifset
2905
ba487f3a
RP
2906* Double:: @code{.double @var{flonums}}
2907* Eject:: @code{.eject}
2908* Else:: @code{.else}
f009d0ab 2909@ifset COFF
ba487f3a 2910* Endef:: @code{.endef}
f009d0ab
RP
2911@end ifset
2912
ba487f3a
RP
2913* Endif:: @code{.endif}
2914* Equ:: @code{.equ @var{symbol}, @var{expression}}
2915* Extern:: @code{.extern}
f009d0ab 2916@ifclear no-file-dir
ba487f3a 2917* File:: @code{.file @var{string}}
f009d0ab
RP
2918@end ifclear
2919
ba487f3a
RP
2920* Fill:: @code{.fill @var{repeat} , @var{size} , @var{value}}
2921* Float:: @code{.float @var{flonums}}
2922* Global:: @code{.global @var{symbol}}, @code{.globl @var{symbol}}
2923* hword:: @code{.hword @var{expressions}}
2924* Ident:: @code{.ident}
2925* If:: @code{.if @var{absolute expression}}
2926* Include:: @code{.include "@var{file}"}
2927* Int:: @code{.int @var{expressions}}
95074dc3
ILT
2928* Irp:: @code{.irp @var{symbol},@var{values}}@dots{}
2929* Irpc:: @code{.irpc @var{symbol},@var{values}}@dots{}
ba487f3a 2930* Lcomm:: @code{.lcomm @var{symbol} , @var{length}}
66b818fb 2931* Lflags:: @code{.lflags}
f009d0ab 2932@ifclear no-line-dir
ba487f3a 2933* Line:: @code{.line @var{line-number}}
f009d0ab
RP
2934@end ifclear
2935
ba487f3a 2936* Ln:: @code{.ln @var{line-number}}
910d7df2 2937* Linkonce:: @code{.linkonce [@var{type}]}
ba487f3a
RP
2938* List:: @code{.list}
2939* Long:: @code{.long @var{expressions}}
f009d0ab 2940@ignore
ba487f3a 2941* Lsym:: @code{.lsym @var{symbol}, @var{expression}}
f009d0ab
RP
2942@end ignore
2943
95074dc3 2944* Macro:: @code{.macro @var{name} @var{args}}@dots{}
910d7df2 2945* MRI:: @code{.mri @var{val}}
95074dc3 2946
ba487f3a
RP
2947* Nolist:: @code{.nolist}
2948* Octa:: @code{.octa @var{bignums}}
2949* Org:: @code{.org @var{new-lc} , @var{fill}}
931a8fab 2950* P2align:: @code{.p2align @var{abs-expr} , @var{abs-expr}}
66b818fb 2951* Psize:: @code{.psize @var{lines}, @var{columns}}
ba487f3a 2952* Quad:: @code{.quad @var{bignums}}
95074dc3 2953* Rept:: @code{.rept @var{count}}
ba487f3a 2954* Sbttl:: @code{.sbttl "@var{subheading}"}
f009d0ab 2955@ifset COFF
ba487f3a 2956* Scl:: @code{.scl @var{class}}
f009d0ab
RP
2957@end ifset
2958@ifset COFF
66b818fb 2959* Section:: @code{.section @var{name}, @var{subsection}}
f009d0ab
RP
2960@end ifset
2961
ba487f3a
RP
2962* Set:: @code{.set @var{symbol}, @var{expression}}
2963* Short:: @code{.short @var{expressions}}
2964* Single:: @code{.single @var{flonums}}
f009d0ab 2965@ifset COFF
ba487f3a 2966* Size:: @code{.size}
f009d0ab
RP
2967@end ifset
2968
910d7df2 2969* Skip:: @code{.skip @var{size} , @var{fill}}
ba487f3a 2970* Space:: @code{.space @var{size} , @var{fill}}
f009d0ab 2971@ifset have-stabs
ba487f3a 2972* Stab:: @code{.stabd, .stabn, .stabs}
f009d0ab 2973@end ifset
e680d737
RP
2974
2975* String:: @code{.string "@var{str}"}
f009d0ab 2976@ifset COFF
ba487f3a 2977* Tag:: @code{.tag @var{structname}}
f009d0ab
RP
2978@end ifset
2979
ba487f3a
RP
2980* Text:: @code{.text @var{subsection}}
2981* Title:: @code{.title "@var{heading}"}
f009d0ab 2982@ifset COFF
ba487f3a
RP
2983* Type:: @code{.type @var{int}}
2984* Val:: @code{.val @var{addr}}
f009d0ab
RP
2985@end ifset
2986
ba487f3a
RP
2987* Word:: @code{.word @var{expressions}}
2988* Deprecated:: Deprecated Directives
7a4c8e5c
RP
2989@end menu
2990
242d9c06 2991@node Abort
b50e59fe 2992@section @code{.abort}
66b818fb
RP
2993
2994@cindex @code{abort} directive
2995@cindex stopping the assembly
93b45514
RP
2996This directive stops the assembly immediately. It is for
2997compatibility with other assemblers. The original idea was that the
d0281557 2998assembly language source would be piped into the assembler. If the sender
f009d0ab 2999of the source quit, it could use this directive tells @code{@value{AS}} to
93b45514
RP
3000quit also. One day @code{.abort} will not be supported.
3001
f009d0ab
RP
3002@ifset COFF
3003@node ABORT
d0281557 3004@section @code{.ABORT}
66b818fb
RP
3005
3006@cindex @code{ABORT} directive
f009d0ab 3007When producing COFF output, @code{@value{AS}} accepts this directive as a
d0281557 3008synonym for @samp{.abort}.
66b818fb 3009
f009d0ab
RP
3010@ifset BOUT
3011When producing @code{b.out} output, @code{@value{AS}} accepts this directive,
d0281557 3012but ignores it.
f009d0ab
RP
3013@end ifset
3014@end ifset
d0281557 3015
242d9c06 3016@node Align
d0281557 3017@section @code{.align @var{abs-expr} , @var{abs-expr}}
66b818fb
RP
3018
3019@cindex padding the location counter
66b818fb 3020@cindex @code{align} directive
24b1493d 3021Pad the location counter (in the current subsection) to a particular
f4335d56 3022storage boundary. The first expression (which must be absolute) is the
931a8fab
KR
3023alignment required, as described below.
3024The second expression (also absolute) gives the value to be stored in
3025the padding bytes. It (and the comma) may be omitted. If it is
9a5acea8
ILT
3026omitted, the padding bytes are zero.
3027For the alpha, if the section is marked as containing code and the
3028padding expression is omitted, then the space is filled with no-ops.
93b45514 3029
931a8fab 3030The way the required alignment is specified varies from system to system.
910d7df2 3031For the a29k, hppa, m68k, m88k, w65, sparc, and Hitachi SH, and i386 using ELF
71dd3c40 3032format,
931a8fab 3033the first expression is the
05a0e43b 3034alignment request in bytes. For example @samp{.align 8} advances
9dcf8057
JL
3035the location counter until it is a multiple of 8. If the location counter
3036is already a multiple of 8, no change is needed.
9dcf8057 3037
931a8fab
KR
3038For other systems, including the i386 using a.out format, it is the
3039number of low-order zero bits the location counter must have after
3040advancement. For example @samp{.align 3} advances the location
3041counter until it a multiple of 8. If the location counter is already a
3042multiple of 8, no change is needed.
3043
3044This inconsistency is due to the different behaviors of the various
3045native assemblers for these systems which GAS must emulate.
3046GAS also provides @code{.balign} and @code{.p2align} directives,
3047described later, which have a consistent behavior across all
3048architectures (but are specific to GAS).
93b45514 3049
2d8e0f62
RP
3050@node App-File
3051@section @code{.app-file @var{string}}
66b818fb
RP
3052
3053@cindex logical file name
3054@cindex file name, logical
2d8e0f62
RP
3055@cindex @code{app-file} directive
3056@code{.app-file}
f009d0ab 3057@ifclear no-file-dir
d0281557 3058(which may also be spelled @samp{.file})
f009d0ab
RP
3059@end ifclear
3060tells @code{@value{AS}} that we are about to start a new
d0281557
RP
3061logical file. @var{string} is the new file name. In general, the
3062filename is recognized whether or not it is surrounded by quotes @samp{"};
b50e59fe
RP
3063but if you wish to specify an empty file name is permitted,
3064you must give the quotes--@code{""}. This statement may go away in
f009d0ab 3065future: it is only recognized to be compatible with old @code{@value{AS}}
d0281557 3066programs.@refill
b50e59fe 3067
242d9c06 3068@node Ascii
b50e59fe 3069@section @code{.ascii "@var{string}"}@dots{}
66b818fb
RP
3070
3071@cindex @code{ascii} directive
3072@cindex string literals
47342e8f 3073@code{.ascii} expects zero or more string literals (@pxref{Strings})
93b45514
RP
3074separated by commas. It assembles each string (with no automatic
3075trailing zero byte) into consecutive addresses.
3076
242d9c06 3077@node Asciz
b50e59fe 3078@section @code{.asciz "@var{string}"}@dots{}
66b818fb
RP
3079
3080@cindex @code{asciz} directive
3081@cindex zero-terminated strings
3082@cindex null-terminated strings
b50e59fe
RP
3083@code{.asciz} is just like @code{.ascii}, but each string is followed by
3084a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''.
93b45514 3085
931a8fab 3086@node Balign
71dd3c40 3087@section @code{.balign[wl] @var{abs-expr} , @var{abs-expr}}
931a8fab
KR
3088
3089@cindex padding the location counter given number of bytes
3090@cindex @code{balign} directive
3091Pad the location counter (in the current subsection) to a particular
3092storage boundary. The first expression (which must be absolute) is the
3093alignment request in bytes. For example @samp{.balign 8} advances
3094the location counter until it is a multiple of 8. If the location counter
3095is already a multiple of 8, no change is needed.
3096
3097The second expression (also absolute) gives the value to be stored in
3098the padding bytes. It (and the comma) may be omitted. If it is
3099omitted, the padding bytes are zero.
3100
71dd3c40
ILT
3101@cindex @code{balignw} directive
3102@cindex @code{balignl} directive
3103The @code{.balignw} and @code{.balignl} directives are variants of the
3104@code{.balign} directive. The @code{.balignw} directive treats the fill
3105pattern as a two byte word value. The @code{.balignl} directives treats the
3106fill pattern as a four byte longword value. For example, @code{.balignw
31074,0x368d} will align to a multiple of 4. If it skips two bytes, they will be
3108filled in with the value 0x368d (the exact placement of the bytes depends upon
3109the endianness of the processor). If it skips 1 or 3 bytes, the fill value is
3110undefined.
3111
242d9c06 3112@node Byte
b50e59fe 3113@section @code{.byte @var{expressions}}
93b45514 3114
66b818fb
RP
3115@cindex @code{byte} directive
3116@cindex integers, one byte
47342e8f 3117@code{.byte} expects zero or more expressions, separated by commas.
93b45514
RP
3118Each expression is assembled into the next byte.
3119
242d9c06 3120@node Comm
b50e59fe 3121@section @code{.comm @var{symbol} , @var{length} }
66b818fb
RP
3122
3123@cindex @code{comm} directive
3124@cindex symbol, common
24b1493d 3125@code{.comm} declares a named common area in the bss section. Normally
f009d0ab 3126@code{@value{LD}} reserves memory addresses for it during linking, so no partial
47342e8f 3127program defines the location of the symbol. Use @code{.comm} to tell
f009d0ab 3128@code{@value{LD}} that it must be at least @var{length} bytes long. @code{@value{LD}}
05a0e43b 3129allocates space for each @code{.comm} symbol that is at least as
47342e8f 3130long as the longest @code{.comm} request in any of the partial programs
d0281557 3131linked. @var{length} is an absolute expression.
47342e8f 3132
9dcf8057
JL
3133@ifset HPPA
3134The syntax for @code{.comm} differs slightly on the HPPA. The syntax is
509d5555 3135@samp{@var{symbol} .comm, @var{length}}; @var{symbol} is optional.
9dcf8057
JL
3136@end ifset
3137
242d9c06 3138@node Data
24b1493d 3139@section @code{.data @var{subsection}}
66b818fb
RP
3140
3141@cindex @code{data} directive
f009d0ab 3142@code{.data} tells @code{@value{AS}} to assemble the following statements onto the
24b1493d
RP
3143end of the data subsection numbered @var{subsection} (which is an
3144absolute expression). If @var{subsection} is omitted, it defaults
93b45514
RP
3145to zero.
3146
f009d0ab 3147@ifset COFF
242d9c06 3148@node Def
d0281557 3149@section @code{.def @var{name}}
66b818fb
RP
3150
3151@cindex @code{def} directive
3152@cindex COFF symbols, debugging
3153@cindex debugging COFF symbols
d0281557
RP
3154Begin defining debugging information for a symbol @var{name}; the
3155definition extends until the @code{.endef} directive is encountered.
f009d0ab 3156@ifset BOUT
d0281557 3157
f009d0ab 3158This directive is only observed when @code{@value{AS}} is configured for COFF
d0281557
RP
3159format output; when producing @code{b.out}, @samp{.def} is recognized,
3160but ignored.
f009d0ab
RP
3161@end ifset
3162@end ifset
d0281557 3163
f009d0ab 3164@ifset aout-bout
242d9c06 3165@node Desc
f4335d56 3166@section @code{.desc @var{symbol}, @var{abs-expression}}
66b818fb
RP
3167
3168@cindex @code{desc} directive
3169@cindex COFF symbol descriptor
3170@cindex symbol descriptor, COFF
b50e59fe 3171This directive sets the descriptor of the symbol (@pxref{Symbol Attributes})
f4335d56 3172to the low 16 bits of an absolute expression.
93b45514 3173
f009d0ab
RP
3174@ifset COFF
3175The @samp{.desc} directive is not available when @code{@value{AS}} is
d0281557 3176configured for COFF output; it is only for @code{a.out} or @code{b.out}
05a0e43b
RP
3177object format. For the sake of compatibility, @code{@value{AS}} accepts
3178it, but produces no output, when configured for COFF.
f009d0ab
RP
3179@end ifset
3180@end ifset
d0281557 3181
f009d0ab 3182@ifset COFF
242d9c06 3183@node Dim
d0281557 3184@section @code{.dim}
66b818fb
RP
3185
3186@cindex @code{dim} directive
3187@cindex COFF auxiliary symbol information
3188@cindex auxiliary symbol information, COFF
d0281557
RP
3189This directive is generated by compilers to include auxiliary debugging
3190information in the symbol table. It is only permitted inside
3191@code{.def}/@code{.endef} pairs.
f009d0ab 3192@ifset BOUT
d0281557
RP
3193
3194@samp{.dim} is only meaningful when generating COFF format output; when
f009d0ab 3195@code{@value{AS}} is generating @code{b.out}, it accepts this directive but
d0281557 3196ignores it.
f009d0ab
RP
3197@end ifset
3198@end ifset
d0281557 3199
242d9c06 3200@node Double
b50e59fe 3201@section @code{.double @var{flonums}}
66b818fb
RP
3202
3203@cindex @code{double} directive
3204@cindex floating point numbers (double)
d0281557
RP
3205@code{.double} expects zero or more flonums, separated by commas. It
3206assembles floating point numbers.
f009d0ab 3207@ifset GENERIC
09352a5d 3208The exact kind of floating point numbers emitted depends on how
f009d0ab
RP
3209@code{@value{AS}} is configured. @xref{Machine Dependencies}.
3210@end ifset
3211@ifclear GENERIC
3212@ifset IEEEFLOAT
3213On the @value{TARGET} family @samp{.double} emits 64-bit floating-point numbers
66b818fb 3214in @sc{ieee} format.
f009d0ab
RP
3215@end ifset
3216@end ifclear
b50e59fe 3217
242d9c06 3218@node Eject
66b818fb
RP
3219@section @code{.eject}
3220
3221@cindex @code{eject} directive
3222@cindex new page, in listings
3223@cindex page, in listings
3224@cindex listing control: new page
3225Force a page break at this point, when generating assembly listings.
3226
242d9c06 3227@node Else
b50e59fe 3228@section @code{.else}
66b818fb
RP
3229
3230@cindex @code{else} directive
f009d0ab 3231@code{.else} is part of the @code{@value{AS}} support for conditional
7a4c8e5c
RP
3232assembly; @pxref{If,,@code{.if}}. It marks the beginning of a section
3233of code to be assembled if the condition for the preceding @code{.if}
3234was false.
b50e59fe 3235
f009d0ab 3236@ignore
7a4c8e5c 3237@node End, Endef, Else, Pseudo Ops
b50e59fe 3238@section @code{.end}
66b818fb
RP
3239
3240@cindex @code{end} directive
b50e59fe
RP
3241This doesn't do anything---but isn't an s_ignore, so I suspect it's
3242meant to do something eventually (which is why it isn't documented here
3243as "for compatibility with blah").
f009d0ab 3244@end ignore
d0281557 3245
f009d0ab 3246@ifset COFF
242d9c06 3247@node Endef
d0281557 3248@section @code{.endef}
66b818fb
RP
3249
3250@cindex @code{endef} directive
d0281557 3251This directive flags the end of a symbol definition begun with
f009d0ab
RP
3252@code{.def}.
3253@ifset BOUT
d0281557
RP
3254
3255@samp{.endef} is only meaningful when generating COFF format output; if
f009d0ab 3256@code{@value{AS}} is configured to generate @code{b.out}, it accepts this
d0281557 3257directive but ignores it.
f009d0ab
RP
3258@end ifset
3259@end ifset
7a4c8e5c 3260
242d9c06 3261@node Endif
b50e59fe 3262@section @code{.endif}
66b818fb
RP
3263
3264@cindex @code{endif} directive
f009d0ab 3265@code{.endif} is part of the @code{@value{AS}} support for conditional assembly;
b50e59fe 3266it marks the end of a block of code that is only assembled
7a4c8e5c 3267conditionally. @xref{If,,@code{.if}}.
b50e59fe 3268
242d9c06 3269@node Equ
b50e59fe
RP
3270@section @code{.equ @var{symbol}, @var{expression}}
3271
66b818fb
RP
3272@cindex @code{equ} directive
3273@cindex assigning values to symbols
3274@cindex symbols, assigning values to
d0281557 3275This directive sets the value of @var{symbol} to @var{expression}.
7a4c8e5c
RP
3276It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}.
3277
9dcf8057
JL
3278@ifset HPPA
3279The syntax for @code{equ} on the HPPA is
509d5555 3280@samp{@var{symbol} .equ @var{expression}}.
9dcf8057
JL
3281@end ifset
3282
242d9c06 3283@node Extern
b50e59fe 3284@section @code{.extern}
66b818fb
RP
3285
3286@cindex @code{extern} directive
b50e59fe 3287@code{.extern} is accepted in the source program---for compatibility
f009d0ab 3288with other assemblers---but it is ignored. @code{@value{AS}} treats
b50e59fe
RP
3289all undefined symbols as external.
3290
f009d0ab 3291@ifclear no-file-dir
242d9c06 3292@node File
66b818fb
RP
3293@section @code{.file @var{string}}
3294
3295@cindex @code{file} directive
3296@cindex logical file name
3297@cindex file name, logical
2d8e0f62 3298@code{.file} (which may also be spelled @samp{.app-file}) tells
f009d0ab 3299@code{@value{AS}} that we are about to start a new logical file.
d0281557
RP
3300@var{string} is the new file name. In general, the filename is
3301recognized whether or not it is surrounded by quotes @samp{"}; but if
3302you wish to specify an empty file name, you must give the
3303quotes--@code{""}. This statement may go away in future: it is only
f009d0ab
RP
3304recognized to be compatible with old @code{@value{AS}} programs.
3305@ifset A29K
3306In some configurations of @code{@value{AS}}, @code{.file} has already been
3307removed to avoid conflicts with other assemblers. @xref{Machine Dependencies}.
3308@end ifset
3309@end ifclear
7a4c8e5c 3310
242d9c06 3311@node Fill
b50e59fe 3312@section @code{.fill @var{repeat} , @var{size} , @var{value}}
66b818fb
RP
3313
3314@cindex @code{fill} directive
3315@cindex writing patterns in memory
3316@cindex patterns, writing in memory
93b45514
RP
3317@var{result}, @var{size} and @var{value} are absolute expressions.
3318This emits @var{repeat} copies of @var{size} bytes. @var{Repeat}
3319may be zero or more. @var{Size} may be zero or more, but if it is
3320more than 8, then it is deemed to have the value 8, compatible with
3321other people's assemblers. The contents of each @var{repeat} bytes
3322is taken from an 8-byte number. The highest order 4 bytes are
3323zero. The lowest order 4 bytes are @var{value} rendered in the
f009d0ab 3324byte-order of an integer on the computer @code{@value{AS}} is assembling for.
93b45514
RP
3325Each @var{size} bytes in a repetition is taken from the lowest order
3326@var{size} bytes of this number. Again, this bizarre behavior is
3327compatible with other people's assemblers.
3328
d0281557 3329@var{size} and @var{value} are optional.
93b45514
RP
3330If the second comma and @var{value} are absent, @var{value} is
3331assumed zero. If the first comma and following tokens are absent,
3332@var{size} is assumed to be 1.
3333
242d9c06 3334@node Float
b50e59fe 3335@section @code{.float @var{flonums}}
66b818fb
RP
3336
3337@cindex floating point numbers (single)
3338@cindex @code{float} directive
b50e59fe 3339This directive assembles zero or more flonums, separated by commas. It
d0281557 3340has the same effect as @code{.single}.
f009d0ab 3341@ifset GENERIC
09352a5d 3342The exact kind of floating point numbers emitted depends on how
f009d0ab
RP
3343@code{@value{AS}} is configured.
3344@xref{Machine Dependencies}.
3345@end ifset
3346@ifclear GENERIC
3347@ifset IEEEFLOAT
3348On the @value{TARGET} family, @code{.float} emits 32-bit floating point numbers
66b818fb 3349in @sc{ieee} format.
f009d0ab
RP
3350@end ifset
3351@end ifclear
93b45514 3352
242d9c06 3353@node Global
b50e59fe 3354@section @code{.global @var{symbol}}, @code{.globl @var{symbol}}
66b818fb
RP
3355
3356@cindex @code{global} directive
3357@cindex symbol, making visible to linker
f009d0ab 3358@code{.global} makes the symbol visible to @code{@value{LD}}. If you define
93b45514
RP
3359@var{symbol} in your partial program, its value is made available to
3360other partial programs that are linked with it. Otherwise,
05a0e43b
RP
3361@var{symbol} takes its attributes from a symbol of the same name
3362from another file linked into the same program.
93b45514 3363
b50e59fe
RP
3364Both spellings (@samp{.globl} and @samp{.global}) are accepted, for
3365compatibility with other assemblers.
3366
9dcf8057 3367@ifset HPPA
e680d737
RP
3368On the HPPA, @code{.global} is not always enough to make it accessible to other
3369partial programs. You may need the HPPA-only @code{.EXPORT} directive as well.
3370@xref{HPPA Directives,, HPPA Assembler Directives}.
9dcf8057
JL
3371@end ifset
3372
242d9c06 3373@node hword
d0281557 3374@section @code{.hword @var{expressions}}
66b818fb
RP
3375
3376@cindex @code{hword} directive
3377@cindex integers, 16-bit
3378@cindex numbers, 16-bit
3379@cindex sixteen bit integers
d0281557
RP
3380This expects zero or more @var{expressions}, and emits
3381a 16 bit number for each.
3382
f009d0ab 3383@ifset GENERIC
d0281557
RP
3384This directive is a synonym for @samp{.short}; depending on the target
3385architecture, it may also be a synonym for @samp{.word}.
f009d0ab
RP
3386@end ifset
3387@ifclear GENERIC
3388@ifset W32
d0281557 3389This directive is a synonym for @samp{.short}.
f009d0ab
RP
3390@end ifset
3391@ifset W16
24b1493d 3392This directive is a synonym for both @samp{.short} and @samp{.word}.
f009d0ab
RP
3393@end ifset
3394@end ifclear
d0281557 3395
242d9c06 3396@node Ident
b50e59fe 3397@section @code{.ident}
66b818fb
RP
3398
3399@cindex @code{ident} directive
b50e59fe 3400This directive is used by some assemblers to place tags in object files.
f009d0ab 3401@code{@value{AS}} simply accepts the directive for source-file
b50e59fe
RP
3402compatibility with such assemblers, but does not actually emit anything
3403for it.
3404
242d9c06 3405@node If
b50e59fe 3406@section @code{.if @var{absolute expression}}
66b818fb
RP
3407
3408@cindex conditional assembly
3409@cindex @code{if} directive
b50e59fe
RP
3410@code{.if} marks the beginning of a section of code which is only
3411considered part of the source program being assembled if the argument
3412(which must be an @var{absolute expression}) is non-zero. The end of
3413the conditional section of code must be marked by @code{.endif}
7a4c8e5c 3414(@pxref{Endif,,@code{.endif}}); optionally, you may include code for the
910d7df2 3415alternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}).
b50e59fe
RP
3416
3417The following variants of @code{.if} are also supported:
3418@table @code
66b818fb 3419@cindex @code{ifdef} directive
71dd3c40 3420@item .ifdef @var{symbol}
b50e59fe
RP
3421Assembles the following section of code if the specified @var{symbol}
3422has been defined.
3423
f009d0ab 3424@ignore
66b818fb 3425@cindex @code{ifeqs} directive
71dd3c40 3426@item .ifeqs
d0281557 3427Not yet implemented.
f009d0ab 3428@end ignore
b50e59fe 3429
66b818fb
RP
3430@cindex @code{ifndef} directive
3431@cindex @code{ifnotdef} directive
71dd3c40 3432@item .ifndef @var{symbol}
910d7df2 3433@itemx .ifnotdef @var{symbol}
b50e59fe
RP
3434Assembles the following section of code if the specified @var{symbol}
3435has not been defined. Both spelling variants are equivalent.
93b45514 3436
f009d0ab 3437@ignore
b50e59fe 3438@item ifnes
d0281557 3439Not yet implemented.
f009d0ab 3440@end ignore
b50e59fe
RP
3441@end table
3442
242d9c06 3443@node Include
b50e59fe 3444@section @code{.include "@var{file}"}
66b818fb
RP
3445
3446@cindex @code{include} directive
3447@cindex supporting files, including
3448@cindex files, including
b50e59fe
RP
3449This directive provides a way to include supporting files at specified
3450points in your source program. The code from @var{file} is assembled as
3451if it followed the point of the @code{.include}; when the end of the
3452included file is reached, assembly of the original file continues. You
3453can control the search paths used with the @samp{-I} command-line option
7a4c8e5c
RP
3454(@pxref{Invoking,,Command-Line Options}). Quotation marks are required
3455around @var{file}.
b50e59fe 3456
242d9c06 3457@node Int
b50e59fe 3458@section @code{.int @var{expressions}}
66b818fb
RP
3459
3460@cindex @code{int} directive
f009d0ab 3461@cindex integers, 32-bit
05a0e43b
RP
3462Expect zero or more @var{expressions}, of any section, separated by commas.
3463For each expression, emit a number that, at run time, is the value of that
3464expression. The byte order and bit size of the number depends on what kind
3465of target the assembly is for.
f009d0ab
RP
3466
3467@ifclear GENERIC
3468@ifset H8
8d8ddccb
RP
3469On the H8/500 and most forms of the H8/300, @code{.int} emits 16-bit
3470integers. On the H8/300H and the Hitachi SH, however, @code{.int} emits
347132-bit integers.
f009d0ab
RP
3472@end ifset
3473@end ifclear
93b45514 3474
95074dc3
ILT
3475@node Irp
3476@section @code{.irp @var{symbol},@var{values}}@dots{}
3477
3478@cindex @code{irp} directive
3479Evaluate a sequence of statements assigning different values to @var{symbol}.
3480The sequence of statements starts at the @code{.irp} directive, and is
3481terminated by an @code{.endr} directive. For each @var{value}, @var{symbol} is
3482set to @var{value}, and the sequence of statements is assembled. If no
3483@var{value} is listed, the sequence of statements is assembled once, with
3484@var{symbol} set to the null string. To refer to @var{symbol} within the
3485sequence of statements, use @var{\symbol}.
3486
3487For example, assembling
3488
3489@example
3490 .irp param,1,2,3
3491 move d\param,sp@@-
3492 .endr
3493@end example
3494
3495is equivalent to assembling
3496
3497@example
3498 move d1,sp@@-
3499 move d2,sp@@-
3500 move d3,sp@@-
3501@end example
3502
3503@node Irpc
3504@section @code{.irpc @var{symbol},@var{values}}@dots{}
3505
3506@cindex @code{irpc} directive
3507Evaluate a sequence of statements assigning different values to @var{symbol}.
3508The sequence of statements starts at the @code{.irpc} directive, and is
3509terminated by an @code{.endr} directive. For each character in @var{value},
3510@var{symbol} is set to the character, and the sequence of statements is
3511assembled. If no @var{value} is listed, the sequence of statements is
3512assembled once, with @var{symbol} set to the null string. To refer to
3513@var{symbol} within the sequence of statements, use @var{\symbol}.
3514
3515For example, assembling
3516
3517@example
3518 .irpc param,123
3519 move d\param,sp@@-
3520 .endr
3521@end example
3522
3523is equivalent to assembling
3524
3525@example
3526 move d1,sp@@-
3527 move d2,sp@@-
3528 move d3,sp@@-
3529@end example
3530
242d9c06 3531@node Lcomm
b50e59fe 3532@section @code{.lcomm @var{symbol} , @var{length}}
66b818fb
RP
3533
3534@cindex @code{lcomm} directive
3535@cindex local common symbols
3536@cindex symbols, local common
7a4c8e5c 3537Reserve @var{length} (an absolute expression) bytes for a local common
24b1493d 3538denoted by @var{symbol}. The section and value of @var{symbol} are
7a4c8e5c 3539those of the new local common. The addresses are allocated in the bss
05a0e43b 3540section, so that at run-time the bytes start off zeroed. @var{Symbol}
7a4c8e5c 3541is not declared global (@pxref{Global,,@code{.global}}), so is normally
f009d0ab 3542not visible to @code{@value{LD}}.
93b45514 3543
9dcf8057
JL
3544@ifset HPPA
3545The syntax for @code{.lcomm} differs slightly on the HPPA. The syntax is
509d5555 3546@samp{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional.
9dcf8057
JL
3547@end ifset
3548
242d9c06 3549@node Lflags
66b818fb
RP
3550@section @code{.lflags}
3551
3552@cindex @code{lflags} directive (ignored)
f009d0ab 3553@code{@value{AS}} accepts this directive, for compatibility with other
66b818fb
RP
3554assemblers, but ignores it.
3555
f009d0ab 3556@ifclear no-line-dir
242d9c06 3557@node Line
d0281557 3558@section @code{.line @var{line-number}}
66b818fb
RP
3559
3560@cindex @code{line} directive
f009d0ab
RP
3561@end ifclear
3562@ifset no-line-dir
242d9c06 3563@node Ln
b50e59fe 3564@section @code{.ln @var{line-number}}
66b818fb
RP
3565
3566@cindex @code{ln} directive
f009d0ab 3567@end ifset
66b818fb 3568@cindex logical line number
f009d0ab 3569@ifset aout-bout
05a0e43b
RP
3570Change the logical line number. @var{line-number} must be an absolute
3571expression. The next line has that logical line number. Therefore any other
3572statements on the current line (after a statement separator character) are
3573reported as on logical line number @var{line-number} @minus{} 1. One day
3574@code{@value{AS}} will no longer support this directive: it is recognized only
f009d0ab 3575for compatibility with existing assembler programs.
7a4c8e5c 3576
f009d0ab
RP
3577@ifset GENERIC
3578@ifset A29K
3579@emph{Warning:} In the AMD29K configuration of @value{AS}, this command is
65fbb2d7 3580not available; use the synonym @code{.ln} in that context.
f009d0ab
RP
3581@end ifset
3582@end ifset
3583@end ifset
d0281557 3584
f009d0ab 3585@ifclear no-line-dir
d0281557 3586Even though this is a directive associated with the @code{a.out} or
05a0e43b
RP
3587@code{b.out} object-code formats, @code{@value{AS}} still recognizes it
3588when producing COFF output, and treats @samp{.line} as though it
d0281557 3589were the COFF @samp{.ln} @emph{if} it is found outside a
f009d0ab 3590@code{.def}/@code{.endef} pair.
d0281557
RP
3591
3592Inside a @code{.def}, @samp{.line} is, instead, one of the directives
3593used by compilers to generate auxiliary symbol information for
3594debugging.
f009d0ab 3595@end ifclear
d0281557 3596
910d7df2
C
3597@node Linkonce
3598@section @code{.linkonce [@var{type}]}
3599@cindex COMDAT
3600@cindex @code{linkonce} directive
3601@cindex common sections
3602Mark the current section so that the linker only includes a single copy of it.
3603This may be used to include the same section in several different object files,
3604but ensure that the linker will only include it once in the final output file.
3605The @code{.linkonce} pseudo-op must be used for each instance of the section.
3606Duplicate sections are detected based on the section name, so it should be
3607unique.
3608
3609This directive is only supported by a few object file formats; as of this
3610writing, the only object file format which supports it is the Portable
3611Executable format used on Windows NT.
3612
3613The @var{type} argument is optional. If specified, it must be one of the
3614following strings. For example:
3615@smallexample
3616.linkonce same_size
3617@end smallexample
3618Not all types may be supported on all object file formats.
3619
3620@table @code
3621@item discard
3622Silently discard duplicate sections. This is the default.
3623
3624@item one_only
3625Warn if there are duplicate sections, but still keep only one copy.
3626
3627@item same_size
3628Warn if any of the duplicates have different sizes.
3629
3630@item same_contents
3631Warn if any of the duplicates do not have exactly the same contents.
3632@end table
3633
242d9c06 3634@node Ln
d0281557 3635@section @code{.ln @var{line-number}}
66b818fb
RP
3636
3637@cindex @code{ln} directive
f009d0ab 3638@ifclear no-line-dir
d0281557 3639@samp{.ln} is a synonym for @samp{.line}.
f009d0ab
RP
3640@end ifclear
3641@ifset no-line-dir
3642Tell @code{@value{AS}} to change the logical line number. @var{line-number}
05a0e43b 3643must be an absolute expression. The next line has that logical
7a4c8e5c 3644line number, so any other statements on the current line (after a
05a0e43b 3645statement separator character @code{;}) are reported as on logical
d0281557 3646line number @var{line-number} @minus{} 1.
f009d0ab 3647@ifset BOUT
d0281557 3648
f009d0ab
RP
3649This directive is accepted, but ignored, when @code{@value{AS}} is
3650configured for @code{b.out}; its effect is only associated with COFF
3651output format.
3652@end ifset
3653@end ifset
d0281557 3654
910d7df2
C
3655@node MRI
3656@section @code{.mri @var{val}}
3657
3658@cindex @code{mri} directive
3659@cindex MRI mode, temporarily
3660If @var{val} is non-zero, this tells @code{@value{AS}} to enter MRI mode. If
3661@var{val} is zero, this tells @code{@value{AS}} to exit MRI mode. This change
3662affects code assembled until the next @code{.mri} directive, or until the end
3663of the file. @xref{M, MRI mode, MRI mode}.
3664
242d9c06 3665@node List
66b818fb
RP
3666@section @code{.list}
3667
3668@cindex @code{list} directive
3669@cindex listing control, turning on
3670Control (in conjunction with the @code{.nolist} directive) whether or
3671not assembly listings are generated. These two directives maintain an
3672internal counter (which is zero initially). @code{.list} increments the
3673counter, and @code{.nolist} decrements it. Assembly listings are
3674generated whenever the counter is greater than zero.
3675
3676By default, listings are disabled. When you enable them (with the
3677@samp{-a} command line option; @pxref{Invoking,,Command-Line Options}),
3678the initial value of the listing counter is one.
b50e59fe 3679
242d9c06 3680@node Long
b50e59fe 3681@section @code{.long @var{expressions}}
66b818fb
RP
3682
3683@cindex @code{long} directive
7a4c8e5c 3684@code{.long} is the same as @samp{.int}, @pxref{Int,,@code{.int}}.
93b45514 3685
242d9c06
SC
3686@ignore
3687@c no one seems to know what this is for or whether this description is
3688@c what it really ought to do
3689@node Lsym
b50e59fe 3690@section @code{.lsym @var{symbol}, @var{expression}}
66b818fb
RP
3691
3692@cindex @code{lsym} directive
3693@cindex symbol, not referenced in assembly
47342e8f 3694@code{.lsym} creates a new symbol named @var{symbol}, but does not put it in
93b45514
RP
3695the hash table, ensuring it cannot be referenced by name during the
3696rest of the assembly. This sets the attributes of the symbol to be
47342e8f 3697the same as the expression value:
d0281557 3698@smallexample
b50e59fe 3699@var{other} = @var{descriptor} = 0
24b1493d 3700@var{type} = @r{(section of @var{expression})}
b50e59fe 3701@var{value} = @var{expression}
d0281557
RP
3702@end smallexample
3703@noindent
3704The new symbol is not flagged as external.
242d9c06 3705@end ignore
93b45514 3706
95074dc3
ILT
3707@node Macro
3708@section @code{.macro}
3709
3710@cindex macros
3711The commands @code{.macro} and @code{.endm} allow you to define macros that
3712generate assembly output. For example, this definition specifies a macro
3713@code{sum} that puts a sequence of numbers into memory:
3714
3715@example
3716 .macro sum from=0, to=5
3717 .long \from
3718 .if \to-\from
3719 sum "(\from+1)",\to
3720 .endif
3721 .endm
3722@end example
3723
3724@noindent
3725With that definition, @samp{SUM 0,5} is equivalent to this assembly input:
3726
3727@example
3728 .long 0
3729 .long 1
3730 .long 2
3731 .long 3
3732 .long 4
3733 .long 5
3734@end example
3735
3736@ftable @code
3737@item .macro @var{macname}
3738@itemx .macro @var{macname} @var{macargs} @dots{}
3739@cindex @code{macro} directive
3740Begin the definition of a macro called @var{macname}. If your macro
3741definition requires arguments, specify their names after the macro name,
3742separated by commas or spaces. You can supply a default value for any
3743macro argument by following the name with @samp{=@var{deflt}}. For
3744example, these are all valid @code{.macro} statements:
3745
3746@table @code
3747@item .macro comm
3748Begin the definition of a macro called @code{comm}, which takes no
3749arguments.
3750
3751@item .macro plus1 p, p1
3752@itemx .macro plus1 p p1
3753Either statement begins the definition of a macro called @code{plus1},
3754which takes two arguments; within the macro definition, write
3755@samp{\p} or @samp{\p1} to evaluate the arguments.
3756
3757@item .macro reserve_str p1=0 p2
3758Begin the definition of a macro called @code{reserve_str}, with two
3759arguments. The first argument has a default value, but not the second.
3760After the definition is complete, you can call the macro either as
3761@samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to
3762@var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str
3763,@var{b}} (with @samp{\p1} evaluating as the default, in this case
3764@samp{0}, and @samp{\p2} evaluating to @var{b}).
3765@end table
3766
3767When you call a macro, you can specify the argument values either by
3768position, or by keyword. For example, @samp{sum 9,17} is equivalent to
3769@samp{sum to=17, from=9}.
3770
3771@item .endm
3772@cindex @code{endm} directive
3773Mark the end of a macro definition.
3774
3775@item .exitm
3776@cindex @code{exitm} directive
3777Exit early from the current macro definition.
3778
3779@cindex number of macros executed
3780@cindex macros, count executed
3781@item \@@
3782@code{@value{AS}} maintains a counter of how many macros it has
3783executed in this pseudo-variable; you can copy that number to your
3784output with @samp{\@@}, but @emph{only within a macro definition}.
3785
3786@ignore
3787@item LOCAL @var{name} [ , @dots{} ]
3788@emph{Warning: @code{LOCAL} is only available if you select ``alternate
3789macro syntax'' with @samp{-a} or @samp{--alternate}.} @xref{Alternate,,
3790Alternate macro syntax}.
3791
3792Generate a string replacement for each of the @var{name} arguments, and
3793replace any instances of @var{name} in each macro expansion. The
3794replacement string is unique in the assembly, and different for each
3795separate macro expansion. @code{LOCAL} allows you to write macros that
3796define symbols, without fear of conflict between separate macro expansions.
3797@end ignore
3798@end ftable
3799
242d9c06 3800@node Nolist
66b818fb
RP
3801@section @code{.nolist}
3802
3803@cindex @code{nolist} directive
3804@cindex listing control, turning off
3805Control (in conjunction with the @code{.list} directive) whether or
3806not assembly listings are generated. These two directives maintain an
3807internal counter (which is zero initially). @code{.list} increments the
3808counter, and @code{.nolist} decrements it. Assembly listings are
3809generated whenever the counter is greater than zero.
3810
242d9c06 3811@node Octa
b50e59fe 3812@section @code{.octa @var{bignums}}
66b818fb
RP
3813
3814@c FIXME: double size emitted for "octa" on i960, others? Or warn?
3815@cindex @code{octa} directive
3816@cindex integer, 16-byte
3817@cindex sixteen byte integer
47342e8f 3818This directive expects zero or more bignums, separated by commas. For each
b50e59fe
RP
3819bignum, it emits a 16-byte integer.
3820
d0281557
RP
3821The term ``octa'' comes from contexts in which a ``word'' is two bytes;
3822hence @emph{octa}-word for 16 bytes.
93b45514 3823
242d9c06 3824@node Org
b50e59fe 3825@section @code{.org @var{new-lc} , @var{fill}}
47342e8f 3826
66b818fb
RP
3827@cindex @code{org} directive
3828@cindex location counter, advancing
3829@cindex advancing location counter
3830@cindex current address, advancing
05a0e43b 3831Advance the location counter of the current section to
93b45514 3832@var{new-lc}. @var{new-lc} is either an absolute expression or an
24b1493d
RP
3833expression with the same section as the current subsection. That is,
3834you can't use @code{.org} to cross sections: if @var{new-lc} has the
3835wrong section, the @code{.org} directive is ignored. To be compatible
3836with former assemblers, if the section of @var{new-lc} is absolute,
05a0e43b 3837@code{@value{AS}} issues a warning, then pretends the section of @var{new-lc}
24b1493d 3838is the same as the current subsection.
47342e8f
RP
3839
3840@code{.org} may only increase the location counter, or leave it
3841unchanged; you cannot use @code{.org} to move the location counter
d0281557 3842backwards.
47342e8f 3843
b50e59fe
RP
3844@c double negative used below "not undefined" because this is a specific
3845@c reference to "undefined" (as SEG_UNKNOWN is called in this manual)
71dd3c40 3846@c section. doc@cygnus.com 18feb91
dd565f85 3847Because @code{@value{AS}} tries to assemble programs in one pass, @var{new-lc}
b50e59fe 3848may not be undefined. If you really detest this restriction we eagerly await
d0281557 3849a chance to share your improved assembler.
93b45514 3850
24b1493d
RP
3851Beware that the origin is relative to the start of the section, not
3852to the start of the subsection. This is compatible with other
93b45514
RP
3853people's assemblers.
3854
24b1493d 3855When the location counter (of the current subsection) is advanced, the
93b45514
RP
3856intervening bytes are filled with @var{fill} which should be an
3857absolute expression. If the comma and @var{fill} are omitted,
3858@var{fill} defaults to zero.
3859
931a8fab 3860@node P2align
71dd3c40 3861@section @code{.p2align[wl] @var{abs-expr} , @var{abs-expr}}
931a8fab
KR
3862
3863@cindex padding the location counter given a power of two
3864@cindex @code{p2align} directive
3865Pad the location counter (in the current subsection) to a particular
3866storage boundary. The first expression (which must be absolute) is the
3867number of low-order zero bits the location counter must have after
3868advancement. For example @samp{.p2align 3} advances the location
3869counter until it a multiple of 8. If the location counter is already a
3870multiple of 8, no change is needed.
3871
3872The second expression (also absolute) gives the value to be stored in
3873the padding bytes. It (and the comma) may be omitted. If it is
3874omitted, the padding bytes are zero.
3875
71dd3c40
ILT
3876@cindex @code{p2alignw} directive
3877@cindex @code{p2alignl} directive
3878The @code{.p2alignw} and @code{.p2alignl} directives are variants of the
3879@code{.p2align} directive. The @code{.p2alignw} directive treats the fill
3880pattern as a two byte word value. The @code{.p2alignl} directives treats the
3881fill pattern as a four byte longword value. For example, @code{.p2alignw
38822,0x368d} will align to a multiple of 4. If it skips two bytes, they will be
3883filled in with the value 0x368d (the exact placement of the bytes depends upon
3884the endianness of the processor). If it skips 1 or 3 bytes, the fill value is
3885undefined.
3886
242d9c06 3887@node Psize
66b818fb
RP
3888@section @code{.psize @var{lines} , @var{columns}}
3889
3890@cindex @code{psize} directive
3891@cindex listing control: paper size
3892@cindex paper size, for listings
3893Use this directive to declare the number of lines---and, optionally, the
f009d0ab 3894number of columns---to use for each page, when generating listings.
66b818fb 3895
05a0e43b 3896If you do not use @code{.psize}, listings use a default line-count
66b818fb
RP
3897of 60. You may omit the comma and @var{columns} specification; the
3898default width is 200 columns.
3899
05a0e43b 3900@code{@value{AS}} generates formfeeds whenever the specified number of
66b818fb 3901lines is exceeded (or whenever you explicitly request one, using
f009d0ab 3902@code{.eject}).
66b818fb
RP
3903
3904If you specify @var{lines} as @code{0}, no formfeeds are generated save
3905those explicitly specified with @code{.eject}.
3906
242d9c06 3907@node Quad
b50e59fe 3908@section @code{.quad @var{bignums}}
66b818fb
RP
3909
3910@cindex @code{quad} directive
b50e59fe 3911@code{.quad} expects zero or more bignums, separated by commas. For
d0281557 3912each bignum, it emits
f009d0ab
RP
3913@ifclear bignum-16
3914an 8-byte integer. If the bignum won't fit in 8 bytes, it prints a
3915warning message; and just takes the lowest order 8 bytes of the bignum.
66b818fb
RP
3916@cindex eight-byte integer
3917@cindex integer, 8-byte
b50e59fe 3918
d0281557 3919The term ``quad'' comes from contexts in which a ``word'' is two bytes;
b50e59fe 3920hence @emph{quad}-word for 8 bytes.
f009d0ab
RP
3921@end ifclear
3922@ifset bignum-16
d0281557 3923a 16-byte integer. If the bignum won't fit in 16 bytes, it prints a
f009d0ab 3924warning message; and just takes the lowest order 16 bytes of the bignum.
66b818fb
RP
3925@cindex sixteen-byte integer
3926@cindex integer, 16-byte
f009d0ab 3927@end ifset
d0281557 3928
95074dc3
ILT
3929@node Rept
3930@section @code{.rept @var{count}}
3931
3932@cindex @code{rept} directive
3933Repeat the sequence of lines between the @code{.rept} directive and the next
3934@code{.endr} directive @var{count} times.
3935
3936For example, assembling
3937
3938@example
3939 .rept 3
3940 .long 0
3941 .endr
3942@end example
3943
3944is equivalent to assembling
3945
3946@example
3947 .long 0
3948 .long 0
3949 .long 0
3950@end example
3951
242d9c06 3952@node Sbttl
66b818fb
RP
3953@section @code{.sbttl "@var{subheading}"}
3954
3955@cindex @code{sbttl} directive
3956@cindex subtitles for listings
3957@cindex listing control: subtitle
3958Use @var{subheading} as the title (third line, immediately after the
f009d0ab 3959title line) when generating assembly listings.
66b818fb
RP
3960
3961This directive affects subsequent pages, as well as the current page if
3962it appears within ten lines of the top of a page.
3963
f009d0ab 3964@ifset COFF
242d9c06 3965@node Scl
d0281557 3966@section @code{.scl @var{class}}
66b818fb
RP
3967
3968@cindex @code{scl} directive
3969@cindex symbol storage class (COFF)
3970@cindex COFF symbol storage class
d0281557
RP
3971Set the storage-class value for a symbol. This directive may only be
3972used inside a @code{.def}/@code{.endef} pair. Storage class may flag
3973whether a symbol is static or external, or it may record further
3974symbolic debugging information.
f009d0ab 3975@ifset BOUT
d0281557
RP
3976
3977The @samp{.scl} directive is primarily associated with COFF output; when
05a0e43b
RP
3978configured to generate @code{b.out} output format, @code{@value{AS}}
3979accepts this directive but ignores it.
f009d0ab
RP
3980@end ifset
3981@end ifset
d0281557 3982
242d9c06 3983@node Section
868c3513 3984@section @code{.section @var{name}}
66b818fb
RP
3985
3986@cindex @code{section} directive
868c3513
ILT
3987@cindex named section
3988Use the @code{.section} directive to assemble the following code into a section
3989named @var{name}.
3990
4b9f4409
KR
3991This directive is only supported for targets that actually support arbitrarily
3992named sections; on @code{a.out} targets, for example, it is not accepted, even
868c3513
ILT
3993with a standard @code{a.out} section name.
3994
3995@ifset COFF
3996For COFF targets, the @code{.section} directive is used in one of the following
3997ways:
3998@smallexample
3999.section @var{name}[, "@var{flags}"]
4000.section @var{name}[, @var{subsegment}]
4001@end smallexample
4002
4003If the optional argument is quoted, it is taken as flags to use for the
4004section. Each flag is a single character. The following flags are recognized:
4005@table @code
4006@item b
4007bss section (uninitialized data)
4008@item n
4009section is not loaded
4010@item w
4011writable section
4012@item d
4013data section
4014@item x
4015executable section
4016@end table
4017
4018If no flags are specified, the default flags depend upon the section name. If
4019the section name is not recognized, the default will be for the section to be
4020loaded and writable.
4021
4022If the optional argument to the @code{.section} directive is not quoted, it is
4023taken as a subsegment number (@pxref{Sub-Sections}).
4b9f4409 4024@end ifset
868c3513
ILT
4025
4026@ifset ELF
4027For ELF targets, the @code{.section} directive is used like this:
4028@smallexample
4029.section @var{name}[, "@var{flags}"[, @@@var{type}]]
4030@end smallexample
4031The optional @var{flags} argument is a quoted string which may contain any
4032combintion of the following characters:
4033@table @code
4034@item a
4035section is allocatable
4036@item w
4037section is writable
4038@item x
4039section is executable
4040@end table
4041
4042The optional @var{type} argument may contain one of the following constants:
4043@table @code
4044@item @@progbits
4045section contains data
4046@item @@nobits
4047section does not contain data (i.e., section only occupies space)
4048@end table
4049
4050If no flags are specified, the default flags depend upon the section name. If
4051the section name is not recognized, the default will be for the section to have
4052none of the above flags: it will not be allocated in memory, nor writable, nor
4053executable. The section will contain data.
4054
4055For ELF targets, the assembler supports another type of @code{.section}
4056directive for compatibility with the Solaris assembler:
4057@smallexample
4058.section "@var{name}"[, @var{flags}...]
4059@end smallexample
4060Note that the section name is quoted. There may be a sequence of comma
4061separated flags:
4062@table @code
4063@item #alloc
4064section is allocatable
4065@item #write
4066section is writable
4067@item #execinstr
4068section is executable
4069@end table
f009d0ab 4070@end ifset
242d9c06
SC
4071
4072@node Set
b50e59fe 4073@section @code{.set @var{symbol}, @var{expression}}
93b45514 4074
66b818fb
RP
4075@cindex @code{set} directive
4076@cindex symbol value, setting
05a0e43b
RP
4077Set the value of @var{symbol} to @var{expression}. This
4078changes @var{symbol}'s value and type to conform to
d0281557
RP
4079@var{expression}. If @var{symbol} was flagged as external, it remains
4080flagged. (@xref{Symbol Attributes}.)
93b45514 4081
47342e8f 4082You may @code{.set} a symbol many times in the same assembly.
93b45514
RP
4083
4084If you @code{.set} a global symbol, the value stored in the object
4085file is the last value stored into it.
4086
9dcf8057
JL
4087@ifset HPPA
4088The syntax for @code{set} on the HPPA is
509d5555 4089@samp{@var{symbol} .set @var{expression}}.
9dcf8057
JL
4090@end ifset
4091
242d9c06 4092@node Short
b50e59fe 4093@section @code{.short @var{expressions}}
66b818fb
RP
4094
4095@cindex @code{short} directive
f009d0ab
RP
4096@ifset GENERIC
4097@code{.short} is normally the same as @samp{.word}.
4098@xref{Word,,@code{.word}}.
4099
7a4c8e5c 4100In some configurations, however, @code{.short} and @code{.word} generate
f009d0ab
RP
4101numbers of different lengths; @pxref{Machine Dependencies}.
4102@end ifset
4103@ifclear GENERIC
4104@ifset W16
4105@code{.short} is the same as @samp{.word}. @xref{Word,,@code{.word}}.
4106@end ifset
4107@ifset W32
b50e59fe
RP
4108This expects zero or more @var{expressions}, and emits
4109a 16 bit number for each.
f009d0ab
RP
4110@end ifset
4111@end ifclear
242d9c06
SC
4112
4113@node Single
b50e59fe 4114@section @code{.single @var{flonums}}
66b818fb
RP
4115
4116@cindex @code{single} directive
4117@cindex floating point numbers (single)
b50e59fe 4118This directive assembles zero or more flonums, separated by commas. It
d0281557 4119has the same effect as @code{.float}.
f009d0ab 4120@ifset GENERIC
09352a5d 4121The exact kind of floating point numbers emitted depends on how
f009d0ab
RP
4122@code{@value{AS}} is configured. @xref{Machine Dependencies}.
4123@end ifset
4124@ifclear GENERIC
4125@ifset IEEEFLOAT
4126On the @value{TARGET} family, @code{.single} emits 32-bit floating point
66b818fb 4127numbers in @sc{ieee} format.
f009d0ab
RP
4128@end ifset
4129@end ifclear
d0281557 4130
f009d0ab 4131@ifset COFF
242d9c06 4132@node Size
d0281557 4133@section @code{.size}
66b818fb
RP
4134
4135@cindex @code{size} directive
d0281557
RP
4136This directive is generated by compilers to include auxiliary debugging
4137information in the symbol table. It is only permitted inside
4138@code{.def}/@code{.endef} pairs.
f009d0ab 4139@ifset BOUT
d0281557
RP
4140
4141@samp{.size} is only meaningful when generating COFF format output; when
f009d0ab 4142@code{@value{AS}} is generating @code{b.out}, it accepts this directive but
d0281557 4143ignores it.
f009d0ab
RP
4144@end ifset
4145@end ifset
7a4c8e5c 4146
f009d0ab 4147@ifclear no-space-dir
910d7df2
C
4148@node Skip
4149@section @code{.skip @var{size} , @var{fill}}
4150
4151@cindex @code{skip} directive
4152@cindex filling memory
4153This directive emits @var{size} bytes, each of value @var{fill}. Both
4154@var{size} and @var{fill} are absolute expressions. If the comma and
4155@var{fill} are omitted, @var{fill} is assumed to be zero. This is the same as
4156@samp{.space}.
4157
242d9c06 4158@node Space
b50e59fe 4159@section @code{.space @var{size} , @var{fill}}
66b818fb
RP
4160
4161@cindex @code{space} directive
4162@cindex filling memory
47342e8f 4163This directive emits @var{size} bytes, each of value @var{fill}. Both
93b45514 4164@var{size} and @var{fill} are absolute expressions. If the comma
910d7df2
C
4165and @var{fill} are omitted, @var{fill} is assumed to be zero. This is the same
4166as @samp{.skip}.
05a0e43b
RP
4167
4168@ifset HPPA
4169@quotation
4170@emph{Warning:} @code{.space} has a completely different meaning for HPPA
e680d737
RP
4171targets; use @code{.block} as a substitute. See @cite{HP9000 Series 800
4172Assembly Language Reference Manual} (HP 92432-90001) for the meaning of the
4173@code{.space} directive. @xref{HPPA Directives,,HPPA Assembler Directives},
4174for a summary.
05a0e43b
RP
4175@end quotation
4176@end ifset
f009d0ab 4177@end ifclear
b50e59fe 4178
f009d0ab
RP
4179@ifset A29K
4180@ifclear GENERIC
4181@node Space
24b1493d 4182@section @code{.space}
66b818fb 4183@cindex @code{space} directive
f009d0ab 4184@end ifclear
7a4c8e5c
RP
4185On the AMD 29K, this directive is ignored; it is accepted for
4186compatibility with other AMD 29K assemblers.
b50e59fe
RP
4187
4188@quotation
8babef85 4189@emph{Warning:} In most versions of the @sc{gnu} assembler, the directive
f009d0ab 4190@code{.space} has the effect of @code{.block} @xref{Machine Dependencies}.
b50e59fe 4191@end quotation
f009d0ab 4192@end ifset
93b45514 4193
f009d0ab 4194@ifset have-stabs
242d9c06 4195@node Stab
b50e59fe 4196@section @code{.stabd, .stabn, .stabs}
66b818fb
RP
4197
4198@cindex symbolic debuggers, information for
4199@cindex @code{stab@var{x}} directives
47342e8f 4200There are three directives that begin @samp{.stab}.
b50e59fe 4201All emit symbols (@pxref{Symbols}), for use by symbolic debuggers.
f009d0ab 4202The symbols are not entered in the @code{@value{AS}} hash table: they
d0281557 4203cannot be referenced elsewhere in the source file.
93b45514 4204Up to five fields are required:
f009d0ab 4205
93b45514
RP
4206@table @var
4207@item string
f009d0ab
RP
4208This is the symbol's name. It may contain any character except
4209@samp{\000}, so is more general than ordinary symbol names. Some
4210debuggers used to code arbitrarily complex structures into symbol names
4211using this field.
4212
93b45514 4213@item type
f009d0ab
RP
4214An absolute expression. The symbol's type is set to the low 8 bits of
4215this expression. Any bit pattern is permitted, but @code{@value{LD}}
05a0e43b 4216and debuggers choke on silly bit patterns.
f009d0ab 4217
93b45514 4218@item other
f009d0ab
RP
4219An absolute expression. The symbol's ``other'' attribute is set to the
4220low 8 bits of this expression.
4221
93b45514 4222@item desc
f009d0ab
RP
4223An absolute expression. The symbol's descriptor is set to the low 16
4224bits of this expression.
4225
93b45514 4226@item value
b50e59fe 4227An absolute expression which becomes the symbol's value.
93b45514
RP
4228@end table
4229
b50e59fe 4230If a warning is detected while reading a @code{.stabd}, @code{.stabn},
05a0e43b
RP
4231or @code{.stabs} statement, the symbol has probably already been created;
4232you get a half-formed symbol in your object file. This is
b50e59fe 4233compatible with earlier assemblers!
93b45514 4234
47342e8f 4235@table @code
66b818fb 4236@cindex @code{stabd} directive
47342e8f 4237@item .stabd @var{type} , @var{other} , @var{desc}
93b45514
RP
4238
4239The ``name'' of the symbol generated is not even an empty string.
4240It is a null pointer, for compatibility. Older assemblers used a
4241null pointer so they didn't waste space in object files with empty
4242strings.
4243
b50e59fe 4244The symbol's value is set to the location counter,
93b45514 4245relocatably. When your program is linked, the value of this symbol
05a0e43b 4246is the address of the location counter when the @code{.stabd} was
93b45514
RP
4247assembled.
4248
66b818fb 4249@cindex @code{stabn} directive
71dd3c40 4250@item .stabn @var{type} , @var{other} , @var{desc} , @var{value}
93b45514
RP
4251The name of the symbol is set to the empty string @code{""}.
4252
66b818fb 4253@cindex @code{stabs} directive
71dd3c40 4254@item .stabs @var{string} , @var{type} , @var{other} , @var{desc} , @var{value}
47342e8f
RP
4255All five fields are specified.
4256@end table
f009d0ab
RP
4257@end ifset
4258@c end have-stabs
d0281557 4259
e680d737
RP
4260@node String
4261@section @code{.string} "@var{str}"
4262
4263@cindex string, copying to object file
4264@cindex @code{string} directive
4265
4266Copy the characters in @var{str} to the object file. You may specify more than
4267one string to copy, separated by commas. Unless otherwise specified for a
4268particular machine, the assembler marks the end of each string with a 0 byte.
81fcb3ff 4269You can use any of the escape sequences described in @ref{Strings,,Strings}.
e680d737 4270
f009d0ab 4271@ifset COFF
242d9c06 4272@node Tag
d0281557 4273@section @code{.tag @var{structname}}
66b818fb
RP
4274
4275@cindex COFF structure debugging
4276@cindex structure debugging, COFF
4277@cindex @code{tag} directive
d0281557
RP
4278This directive is generated by compilers to include auxiliary debugging
4279information in the symbol table. It is only permitted inside
4280@code{.def}/@code{.endef} pairs. Tags are used to link structure
4281definitions in the symbol table with instances of those structures.
f009d0ab 4282@ifset BOUT
d0281557
RP
4283
4284@samp{.tag} is only used when generating COFF format output; when
f009d0ab 4285@code{@value{AS}} is generating @code{b.out}, it accepts this directive but
d0281557 4286ignores it.
f009d0ab
RP
4287@end ifset
4288@end ifset
7a4c8e5c 4289
242d9c06 4290@node Text
24b1493d 4291@section @code{.text @var{subsection}}
66b818fb
RP
4292
4293@cindex @code{text} directive
f009d0ab 4294Tells @code{@value{AS}} to assemble the following statements onto the end of
24b1493d
RP
4295the text subsection numbered @var{subsection}, which is an absolute
4296expression. If @var{subsection} is omitted, subsection number zero
93b45514
RP
4297is used.
4298
242d9c06 4299@node Title
66b818fb
RP
4300@section @code{.title "@var{heading}"}
4301
4302@cindex @code{title} directive
4303@cindex listing control: title line
4304Use @var{heading} as the title (second line, immediately after the
f009d0ab 4305source file name and pagenumber) when generating assembly listings.
66b818fb
RP
4306
4307This directive affects subsequent pages, as well as the current page if
4308it appears within ten lines of the top of a page.
4309
f009d0ab 4310@ifset COFF
242d9c06 4311@node Type
d0281557 4312@section @code{.type @var{int}}
66b818fb
RP
4313
4314@cindex COFF symbol type
4315@cindex symbol type, COFF
4316@cindex @code{type} directive
d0281557
RP
4317This directive, permitted only within @code{.def}/@code{.endef} pairs,
4318records the integer @var{int} as the type attribute of a symbol table entry.
f009d0ab 4319@ifset BOUT
d0281557
RP
4320
4321@samp{.type} is associated only with COFF format output; when
f009d0ab 4322@code{@value{AS}} is configured for @code{b.out} output, it accepts this
d0281557 4323directive but ignores it.
f009d0ab
RP
4324@end ifset
4325@end ifset
d0281557 4326
f009d0ab 4327@ifset COFF
242d9c06 4328@node Val
d0281557 4329@section @code{.val @var{addr}}
66b818fb
RP
4330
4331@cindex @code{val} directive
4332@cindex COFF value attribute
4333@cindex value attribute, COFF
d0281557
RP
4334This directive, permitted only within @code{.def}/@code{.endef} pairs,
4335records the address @var{addr} as the value attribute of a symbol table
4336entry.
f009d0ab 4337@ifset BOUT
d0281557 4338
f009d0ab 4339@samp{.val} is used only for COFF output; when @code{@value{AS}} is
d0281557 4340configured for @code{b.out}, it accepts this directive but ignores it.
f009d0ab
RP
4341@end ifset
4342@end ifset
7a4c8e5c 4343
242d9c06 4344@node Word
b50e59fe 4345@section @code{.word @var{expressions}}
66b818fb
RP
4346
4347@cindex @code{word} directive
24b1493d 4348This directive expects zero or more @var{expressions}, of any section,
b50e59fe 4349separated by commas.
f009d0ab
RP
4350@ifclear GENERIC
4351@ifset W32
4352For each expression, @code{@value{AS}} emits a 32-bit number.
4353@end ifset
4354@ifset W16
4355For each expression, @code{@value{AS}} emits a 16-bit number.
4356@end ifset
4357@end ifclear
4358@ifset GENERIC
4359
0b5b143a 4360The size of the number emitted, and its byte order,
05a0e43b 4361depend on what target computer the assembly is for.
f009d0ab 4362@end ifset
09352a5d 4363
7a4c8e5c 4364@c on amd29k, i960, sparc the "special treatment to support compilers" doesn't
09352a5d 4365@c happen---32-bit addressability, period; no long/short jumps.
f009d0ab 4366@ifset DIFF-TBL-KLUGE
66b818fb
RP
4367@cindex difference tables altered
4368@cindex altered difference tables
0b5b143a
RP
4369@quotation
4370@emph{Warning: Special Treatment to support Compilers}
4371@end quotation
47342e8f 4372
f009d0ab 4373@ifset GENERIC
24b1493d
RP
4374Machines with a 32-bit address space, but that do less than 32-bit
4375addressing, require the following special treatment. If the machine of
4376interest to you does 32-bit addressing (or doesn't require it;
f009d0ab 4377@pxref{Machine Dependencies}), you can ignore this issue.
7a4c8e5c 4378
f009d0ab 4379@end ifset
05a0e43b
RP
4380In order to assemble compiler output into something that works,
4381@code{@value{AS}} occasionlly does strange things to @samp{.word} directives.
47342e8f 4382Directives of the form @samp{.word sym1-sym2} are often emitted by
f009d0ab 4383compilers as part of jump tables. Therefore, when @code{@value{AS}} assembles a
47342e8f 4384directive of the form @samp{.word sym1-sym2}, and the difference between
05a0e43b
RP
4385@code{sym1} and @code{sym2} does not fit in 16 bits, @code{@value{AS}}
4386creates a @dfn{secondary jump table}, immediately before the next label.
4387This secondary jump table is preceded by a short-jump to the
47342e8f
RP
4388first byte after the secondary table. This short-jump prevents the flow
4389of control from accidentally falling into the new table. Inside the
05a0e43b
RP
4390table is a long-jump to @code{sym2}. The original @samp{.word}
4391contains @code{sym1} minus the address of the long-jump to
d0281557 4392@code{sym2}.
47342e8f
RP
4393
4394If there were several occurrences of @samp{.word sym1-sym2} before the
05a0e43b 4395secondary jump table, all of them are adjusted. If there was a
47342e8f 4396@samp{.word sym3-sym4}, that also did not fit in sixteen bits, a
05a0e43b
RP
4397long-jump to @code{sym4} is included in the secondary jump table,
4398and the @code{.word} directives are adjusted to contain @code{sym3}
47342e8f 4399minus the address of the long-jump to @code{sym4}; and so on, for as many
d0281557 4400entries in the original jump table as necessary.
09352a5d 4401
f009d0ab
RP
4402@ifset INTERNALS
4403@emph{This feature may be disabled by compiling @code{@value{AS}} with the
47342e8f
RP
4404@samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse
4405assembly language programmers.
f009d0ab
RP
4406@end ifset
4407@end ifset
4408@c end DIFF-TBL-KLUGE
93b45514 4409
242d9c06 4410@node Deprecated
93b45514 4411@section Deprecated Directives
66b818fb
RP
4412
4413@cindex deprecated directives
4414@cindex obsolescent directives
93b45514
RP
4415One day these directives won't work.
4416They are included for compatibility with older assemblers.
4417@table @t
4418@item .abort
2d8e0f62 4419@item .app-file
93b45514
RP
4420@item .line
4421@end table
4422
f009d0ab
RP
4423@ifset GENERIC
4424@node Machine Dependencies
09352a5d 4425@chapter Machine Dependent Features
66b818fb
RP
4426
4427@cindex machine dependencies
4428The machine instruction sets are (almost by definition) different on
f009d0ab
RP
4429each machine where @code{@value{AS}} runs. Floating point representations
4430vary as well, and @code{@value{AS}} often supports a few additional
66b818fb
RP
4431directives or command-line options for compatibility with other
4432assemblers on a particular platform. Finally, some versions of
f009d0ab 4433@code{@value{AS}} support special pseudo-instructions for branch
66b818fb
RP
4434optimization.
4435
4436This chapter discusses most of these differences, though it does not
4437include details on any machine's instruction set. For details on that
4438subject, see the hardware manufacturer's manual.
4439
7a4c8e5c 4440@menu
910d7df2
C
4441@ifset A29K
4442* AMD29K-Dependent:: AMD 29K Dependent Features
4443@end ifset
99c4053d
KR
4444@c start-sanitize-arc
4445@ifset ARC
4446* ARC-Dependent:: ARC Dependent Features
4447@end ifset
4448@c end-sanitize-arc
9a5acea8
ILT
4449@c start-sanitize-d10v
4450@ifset D10V
4451* D10V-Dependent:: D10V Dependent Features
4452@end ifset
4453@c end-sanitize-d10v
f009d0ab 4454@ifset H8/300
ba487f3a 4455* H8/300-Dependent:: Hitachi H8/300 Dependent Features
f009d0ab
RP
4456@end ifset
4457@ifset H8/500
4458* H8/500-Dependent:: Hitachi H8/500 Dependent Features
4459@end ifset
9dcf8057 4460@ifset HPPA
fb5bec49 4461* HPPA-Dependent:: HPPA Dependent Features
9dcf8057 4462@end ifset
910d7df2
C
4463@ifset I80386
4464* i386-Dependent:: Intel 80386 Dependent Features
f009d0ab 4465@end ifset
f009d0ab 4466@ifset I960
ba487f3a 4467* i960-Dependent:: Intel 80960 Dependent Features
f009d0ab
RP
4468@end ifset
4469@ifset M680X0
ba487f3a 4470* M68K-Dependent:: M680x0 Dependent Features
f009d0ab 4471@end ifset
910d7df2
C
4472@ifset MIPS
4473* MIPS-Dependent:: MIPS Dependent Features
4474@end ifset
4475@ifset SH
4476* SH-Dependent:: Hitachi SH Dependent Features
4477@end ifset
f009d0ab 4478@ifset SPARC
ba487f3a 4479* Sparc-Dependent:: SPARC Dependent Features
f009d0ab
RP
4480@end ifset
4481@ifset Z8000
ba487f3a 4482* Z8000-Dependent:: Z8000 Dependent Features
f009d0ab 4483@end ifset
910d7df2
C
4484@ifset VAX
4485* Vax-Dependent:: VAX Dependent Features
f009d0ab 4486@end ifset
7a4c8e5c
RP
4487@end menu
4488
9dcf8057 4489@lowersections
f009d0ab
RP
4490@end ifset
4491
4492@c The following major nodes are *sections* in the GENERIC version, *chapters*
9dcf8057 4493@c in single-cpu versions. This is mainly achieved by @lowersections. There is a
f009d0ab
RP
4494@c peculiarity: to preserve cross-references, there must be a node called
4495@c "Machine Dependencies". Hence the conditional nodenames in each
4496@c major node below. Node defaulting in makeinfo requires adjacency of
4497@c node and sectioning commands; hence the repetition of @chapter BLAH
4498@c in both conditional blocks.
99c4053d
KR
4499
4500@c start-sanitize-arc
4501@ifset ARC
4502@ifset GENERIC
4503@page
4504@node ARC-Dependent
4505@chapter ARC Dependent Features
4506@end ifset
4507@ifclear GENERIC
4508@node Machine Dependencies
4509@chapter ARC Dependent Features
4510@end ifclear
4511
4512@cindex ARC support
4513@menu
4514* ARC-Opts:: Options
4515* ARC-Float:: Floating Point
4516* ARC-Directives:: Sparc Machine Directives
4517@end menu
4518
4519@node ARC-Opts
4520@section Options
4521
4522@cindex options for ARC
4523@cindex ARC options
4524@cindex architectures, ARC
4525@cindex ARC architectures
4526The ARC chip family includes several successive levels (or other
4527variants) of chip, using the same core instruction set, but including
4528a few additional instructions at each level.
4529
4530By default, @code{@value{AS}} assumes the core instruction set (ARC
4531base). The @code{.cpu} pseudo-op is used to select a different variant.
4532
4533@table @code
4534@cindex @code{-mbig-endian} option (ARC)
4535@cindex @code{-mlittle-endian} option (ARC)
4536@cindex ARC big-endian output
4537@cindex ARC little-endian output
4538@cindex big-endian output, ARC
4539@cindex little-endian output, ARC
4540@item -mbig-endian
4541@itemx -mlittle-endian
4542Any @sc{arc} configuration of @code{@value{AS}} can select big-endian or
4543little-endian output at run time (unlike most other @sc{gnu} development
4544tools, which must be configured for one or the other). Use
4545@samp{-mbig-endian} to select big-endian output, and @samp{-mlittle-endian}
4546for little-endian.
4547@end table
4548
4549@node ARC-Float
4550@section Floating Point
4551
4552@cindex floating point, ARC (@sc{ieee})
4553@cindex ARC floating point (@sc{ieee})
4554The ARC cpu family currently does not have hardware floating point
4555support. Software floating point support is provided by @code{GCC}
4556and uses @sc{ieee} floating-point numbers.
4557
4558@node ARC-Directives
4559@section ARC Machine Directives
4560
4561@cindex ARC machine directives
4562@cindex machine directives, ARC
4563The ARC version of @code{@value{AS}} supports the following additional
4564machine directives:
4565
4566@table @code
4567@item .cpu
4568@cindex @code{cpu} directive, SPARC
4569This must be followed by the desired cpu. It must be one of
4570@code{base}, @code{host}, @code{graphics}, or @code{audio}.
4571
4572@end table
4573
4574@end ifset
4575@c end-sanitize-arc
4576
f009d0ab 4577@ifset A29K
79e15b8a 4578@include c-a29k.texi
f009d0ab 4579@end ifset
b50e59fe 4580
f009d0ab
RP
4581@ifset Hitachi-all
4582@ifclear GENERIC
4583@node Machine Dependencies
4584@chapter Machine Dependent Features
4585
4586The machine instruction sets are different on each Hitachi chip family,
4587and there are also some syntax differences among the families. This
4588chapter describes the specific @code{@value{AS}} features for each
4589family.
4590
4591@menu
4592* H8/300-Dependent:: Hitachi H8/300 Dependent Features
4593* H8/500-Dependent:: Hitachi H8/500 Dependent Features
f009d0ab 4594* SH-Dependent:: Hitachi SH Dependent Features
f009d0ab 4595@end menu
9dcf8057 4596@lowersections
f009d0ab
RP
4597@end ifclear
4598@end ifset
4599
9a5acea8
ILT
4600@c start-sanitize-d10v
4601@ifset D10V
4602@include c-d10v.texi
4603@end ifset
4604@c end-sanitize-d10v
4605
f009d0ab 4606@ifset H8/300
79e15b8a 4607@include c-h8300.texi
f009d0ab 4608@end ifset
24b1493d 4609
79e15b8a
ILT
4610@ifset H8/500
4611@include c-h8500.texi
fb5bec49 4612@end ifset
66b818fb 4613
79e15b8a
ILT
4614@ifset HPPA
4615@include c-hppa.texi
4616@end ifset
66b818fb 4617
910d7df2
C
4618@ifset I80386
4619@include c-i386.texi
79e15b8a 4620@end ifset
66b818fb 4621
79e15b8a
ILT
4622@ifset I960
4623@include c-i960.texi
f009d0ab
RP
4624@end ifset
4625
79e15b8a
ILT
4626@ifset M680X0
4627@include c-m68k.texi
4628@end ifset
f009d0ab 4629
910d7df2
C
4630@ifset MIPS
4631@include c-mips.texi
4632@end ifset
4633
71dd3c40
ILT
4634@ifset NS32K
4635@include c-ns32k.texi
4636@end ifset
f009d0ab 4637
910d7df2
C
4638@ifset SH
4639@include c-sh.texi
79e15b8a 4640@end ifset
f009d0ab 4641
910d7df2
C
4642@ifset SPARC
4643@include c-sparc.texi
79e15b8a 4644@end ifset
fb5bec49 4645
79e15b8a
ILT
4646@ifset Z8000
4647@include c-z8k.texi
4648@end ifset
34214344 4649
910d7df2
C
4650@ifset VAX
4651@include c-vax.texi
34214344
KR
4652@end ifset
4653
f009d0ab
RP
4654@ifset GENERIC
4655@c reverse effect of @down at top of generic Machine-Dep chapter
9dcf8057 4656@raisesections
f009d0ab
RP
4657@end ifset
4658
9a5acea8
ILT
4659@node Reporting Bugs
4660@chapter Reporting Bugs
4661@cindex bugs in @code{@value{AS}}
4662@cindex reporting bugs in @code{@value{AS}}
4663
4664Your bug reports play an essential role in making @code{@value{AS}} reliable.
4665
4666Reporting a bug may help you by bringing a solution to your problem, or it may
4667not. But in any case the principal function of a bug report is to help the
4668entire community by making the next version of @code{@value{AS}} work better.
4669Bug reports are your contribution to the maintenance of @code{@value{AS}}.
4670
4671In order for a bug report to serve its purpose, you must include the
4672information that enables us to fix the bug.
4673
4674@menu
4675* Bug Criteria:: Have you found a bug?
4676* Bug Reporting:: How to report bugs
4677@end menu
4678
4679@node Bug Criteria
4680@section Have you found a bug?
4681@cindex bug criteria
4682
4683If you are not sure whether you have found a bug, here are some guidelines:
4684
4685@itemize @bullet
4686@cindex fatal signal
4687@cindex assembler crash
4688@cindex crash of assembler
4689@item
4690If the assembler gets a fatal signal, for any input whatever, that is a
4691@code{@value{AS}} bug. Reliable assemblers never crash.
4692
4693@cindex error on valid input
4694@item
4695If @code{@value{AS}} produces an error message for valid input, that is a bug.
4696
4697@cindex invalid input
4698@item
4699If @code{@value{AS}} does not produce an error message for invalid input, that
4700is a bug. However, you should note that your idea of ``invalid input'' might
4701be our idea of ``an extension'' or ``support for traditional practice''.
4702
4703@item
4704If you are an experienced user of assemblers, your suggestions for improvement
4705of @code{@value{AS}} are welcome in any case.
4706@end itemize
4707
4708@node Bug Reporting
4709@section How to report bugs
4710@cindex bug reports
4711@cindex @code{@value{AS}} bugs, reporting
4712
4713A number of companies and individuals offer support for @sc{gnu} products. If
4714you obtained @code{@value{AS}} from a support organization, we recommend you
4715contact that organization first.
4716
4717You can find contact information for many support companies and
4718individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
4719distribution.
4720
4721In any event, we also recommend that you send bug reports for @code{@value{AS}}
4722to @samp{bug-gnu-utils@@prep.ai.mit.edu}.
4723
4724The fundamental principle of reporting bugs usefully is this:
4725@strong{report all the facts}. If you are not sure whether to state a
4726fact or leave it out, state it!
4727
4728Often people omit facts because they think they know what causes the problem
4729and assume that some details do not matter. Thus, you might assume that the
4730name of a symbol you use in an example does not matter. Well, probably it does
4731not, but one cannot be sure. Perhaps the bug is a stray memory reference which
4732happens to fetch from the location where that name is stored in memory;
4733perhaps, if the name were different, the contents of that location would fool
4734the assembler into doing the right thing despite the bug. Play it safe and
4735give a specific, complete example. That is the easiest thing for you to do,
4736and the most helpful.
4737
4738Keep in mind that the purpose of a bug report is to enable us to fix the bug if
4739it is new to us. Therefore, always write your bug reports on the assumption
4740that the bug has not been reported previously.
4741
4742Sometimes people give a few sketchy facts and ask, ``Does this ring a
4743bell?'' Those bug reports are useless, and we urge everyone to
4744@emph{refuse to respond to them} except to chide the sender to report
4745bugs properly.
4746
4747To enable us to fix the bug, you should include all these things:
4748
4749@itemize @bullet
4750@item
4751The version of @code{@value{AS}}. @code{@value{AS}} announces it if you start
868c3513 4752it with the @samp{--version} argument.
9a5acea8
ILT
4753
4754Without this, we will not know whether there is any point in looking for
4755the bug in the current version of @code{@value{AS}}.
4756
4757@item
4758Any patches you may have applied to the @code{@value{AS}} source.
4759
4760@item
4761The type of machine you are using, and the operating system name and
4762version number.
4763
4764@item
4765What compiler (and its version) was used to compile @code{@value{AS}}---e.g.
4766``@code{gcc-2.7}''.
4767
4768@item
4769The command arguments you gave the assembler to assemble your example and
4770observe the bug. To guarantee you will not omit something important, list them
4771all. A copy of the Makefile (or the output from make) is sufficient.
4772
4773If we were to try to guess the arguments, we would probably guess wrong
4774and then we might not encounter the bug.
4775
4776@item
4777A complete input file that will reproduce the bug. If the bug is observed when
4778the assembler is invoked via a compiler, send the assembler source, not the
4779high level language source. Most compilers will produce the assembler source
4780when run with the @samp{-S} option. If you are using @code{@value{GCC}}, use
4781the options @samp{-v --save-temps}; this will save the assembler source in a
4782file with an extension of @file{.s}, and also show you exactly how
4783@code{@value{AS}} is being run.
4784
4785@item
4786A description of what behavior you observe that you believe is
4787incorrect. For example, ``It gets a fatal signal.''
4788
4789Of course, if the bug is that @code{@value{AS}} gets a fatal signal, then we
4790will certainly notice it. But if the bug is incorrect output, we might not
4791notice unless it is glaringly wrong. You might as well not give us a chance to
4792make a mistake.
4793
4794Even if the problem you experience is a fatal signal, you should still say so
4795explicitly. Suppose something strange is going on, such as, your copy of
4796@code{@value{AS}} is out of synch, or you have encountered a bug in the C
4797library on your system. (This has happened!) Your copy might crash and ours
4798would not. If you told us to expect a crash, then when ours fails to crash, we
4799would know that the bug was not happening for us. If you had not told us to
4800expect a crash, then we would not be able to draw any conclusion from our
4801observations.
4802
4803@item
4804If you wish to suggest changes to the @code{@value{AS}} source, send us context
4805diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
4806option. Always send diffs from the old file to the new file. If you even
4807discuss something in the @code{@value{AS}} source, refer to it by context, not
4808by line number.
4809
4810The line numbers in our development sources will not match those in your
4811sources. Your line numbers would convey no useful information to us.
4812@end itemize
4813
4814Here are some things that are not necessary:
4815
4816@itemize @bullet
4817@item
4818A description of the envelope of the bug.
4819
4820Often people who encounter a bug spend a lot of time investigating
4821which changes to the input file will make the bug go away and which
4822changes will not affect it.
4823
4824This is often time consuming and not very useful, because the way we
4825will find the bug is by running a single example under the debugger
4826with breakpoints, not by pure deduction from a series of examples.
4827We recommend that you save your time for something else.
4828
4829Of course, if you can find a simpler example to report @emph{instead}
4830of the original one, that is a convenience for us. Errors in the
4831output will be easier to spot, running under the debugger will take
4832less time, and so on.
4833
4834However, simplification is not vital; if you do not want to do this,
4835report the bug anyway and send us the entire test case you used.
4836
4837@item
4838A patch for the bug.
4839
4840A patch for the bug does help us if it is a good one. But do not omit
4841the necessary information, such as the test case, on the assumption that
4842a patch is all we need. We might see problems with your patch and decide
4843to fix the problem another way, or we might not understand it at all.
4844
4845Sometimes with a program as complicated as @code{@value{AS}} it is very hard to
4846construct an example that will make the program follow a certain path through
4847the code. If you do not send us the example, we will not be able to construct
4848one, so we will not be able to verify that the bug is fixed.
4849
4850And if we cannot understand what bug you are trying to fix, or why your
4851patch should be an improvement, we will not install it. A test case will
4852help us to understand.
4853
4854@item
4855A guess about what the bug is or what it depends on.
4856
4857Such guesses are usually wrong. Even we cannot guess right about such
4858things without first using the debugger to find the facts.
4859@end itemize
4860
9dcf8057
JL
4861@node Acknowledgements
4862@chapter Acknowledgements
4863
05a0e43b
RP
4864If you have contributed to @code{@value{AS}} and your name isn't listed here,
4865it is not meant as a slight. We just don't know about it. Send mail to the
71dd3c40
ILT
4866maintainer, and we'll correct the situation. Currently
4867@c (January 1994),
4868the maintainer is Ken Raeburn (email address @code{raeburn@@cygnus.com}).
9dcf8057 4869
79e15b8a
ILT
4870Dean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any
4871more details?}
9dcf8057 4872
05a0e43b 4873Jay Fenlason maintained GAS for a while, adding support for GDB-specific debug
9dcf8057 4874information and the 68k series machines, most of the preprocessing pass, and
05a0e43b 4875extensive changes in @file{messages.c}, @file{input-file.c}, @file{write.c}.
9dcf8057
JL
4876
4877K. Richard Pixley maintained GAS for a while, adding various enhancements and
4878many bug fixes, including merging support for several processors, breaking GAS
05a0e43b
RP
4879up to handle multiple object file format back ends (including heavy rewrite,
4880testing, an integration of the coff and b.out back ends), adding configuration
9dcf8057 4881including heavy testing and verification of cross assemblers and file splits
05a0e43b
RP
4882and renaming, converted GAS to strictly ANSI C including full prototypes, added
4883support for m680[34]0 and cpu32, did considerable work on i960 including a COFF
4884port (including considerable amounts of reverse engineering), a SPARC opcode
4885file rewrite, DECstation, rs6000, and hp300hpux host ports, updated ``know''
9dcf8057
JL
4886assertions and made them work, much other reorganization, cleanup, and lint.
4887
4888Ken Raeburn wrote the high-level BFD interface code to replace most of the code
4889in format-specific I/O modules.
4890
4891The original VMS support was contributed by David L. Kashtan. Eric Youngdale
4892has done much work with it since.
4893
4894The Intel 80386 machine description was written by Eliot Dresselhaus.
4895
4896Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
4897
4898The Motorola 88k machine description was contributed by Devon Bowen of Buffalo
4899University and Torbjorn Granlund of the Swedish Institute of Computer Science.
4900
4901Keith Knowles at the Open Software Foundation wrote the original MIPS back end
05a0e43b
RP
4902(@file{tc-mips.c}, @file{tc-mips.h}), and contributed Rose format support
4903(which hasn't been merged in yet). Ralph Campbell worked with the MIPS code to
4904support a.out format.
9dcf8057
JL
4905
4906Support for the Zilog Z8k and Hitachi H8/300 and H8/500 processors (tc-z8k,
4907tc-h8300, tc-h8500), and IEEE 695 object file format (obj-ieee), was written by
4908Steve Chamberlain of Cygnus Support. Steve also modified the COFF back end to
4909use BFD for some low-level operations, for use with the H8/300 and AMD 29k
4910targets.
4911
05a0e43b
RP
4912John Gilmore built the AMD 29000 support, added @code{.include} support, and
4913simplified the configuration of which versions accept which directives. He
9dcf8057 4914updated the 68k machine description so that Motorola's opcodes always produced
05a0e43b
RP
4915fixed-size instructions (e.g. @code{jsr}), while synthetic instructions
4916remained shrinkable (@code{jbsr}). John fixed many bugs, including true tested
9dcf8057 4917cross-compilation support, and one bug in relaxation that took a week and
47c7ceb5 4918required the proverbial one-bit fix.
9dcf8057 4919
05a0e43b 4920Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax for the
9dcf8057 492168k, completed support for some COFF targets (68k, i386 SVR3, and SCO Unix),
910d7df2
C
4922added support for MIPS ECOFF and ELF targets, wrote the initial RS/6000 and
4923PowerPC assembler, and made a few other minor patches.
9dcf8057
JL
4924
4925Steve Chamberlain made @code{@value{AS}} able to generate listings.
4926
05a0e43b 4927Hewlett-Packard contributed support for the HP9000/300.
9dcf8057 4928
05a0e43b
RP
4929Jeff Law wrote GAS and BFD support for the native HPPA object format (SOM)
4930along with a fairly extensive HPPA testsuite (for both SOM and ELF object
4931formats). This work was supported by both the Center for Software Science at
4932the University of Utah and Cygnus Support.
9dcf8057
JL
4933
4934Support for ELF format files has been worked on by Mark Eichin of Cygnus
4935Support (original, incomplete implementation for SPARC), Pete Hoogenboom and
4936Jeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open
4937Software Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc,
4938and some initial 64-bit support).
4939
910d7df2
C
4940Richard Henderson rewrote the Alpha assembler.
4941
9dcf8057
JL
4942Several engineers at Cygnus Support have also provided many small bug fixes and
4943configuration enhancements.
4944
4945Many others have contributed large or small bugfixes and enhancements. If
05a0e43b
RP
4946you have contributed significant work and are not mentioned on this list, and
4947want to be, let us know. Some of the history has been lost; we are not
9dcf8057
JL
4948intentionally leaving anyone out.
4949
242d9c06 4950@node Index
66b818fb
RP
4951@unnumbered Index
4952
4953@printindex cp
4954
93b45514
RP
4955@contents
4956@bye
9dcf8057
JL
4957@c Local Variables:
4958@c fill-column: 79
4959@c End:
This page took 0.5492 seconds and 4 git commands to generate.