1 |
6 |
jlechner |
@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2002
|
2 |
|
|
@c Free Software Foundation, Inc.
|
3 |
|
|
@c This is part of the GAS manual.
|
4 |
|
|
@c For copying conditions, see the file as.texinfo.
|
5 |
|
|
@c VAX/VMS description enhanced and corrected by Klaus K"aempf, kkaempf@progis.de
|
6 |
|
|
@ifset GENERIC
|
7 |
|
|
@node Vax-Dependent
|
8 |
|
|
@chapter VAX Dependent Features
|
9 |
|
|
@cindex VAX support
|
10 |
|
|
|
11 |
|
|
@end ifset
|
12 |
|
|
@ifclear GENERIC
|
13 |
|
|
@node Machine Dependencies
|
14 |
|
|
@chapter VAX Dependent Features
|
15 |
|
|
@cindex VAX support
|
16 |
|
|
|
17 |
|
|
@end ifclear
|
18 |
|
|
|
19 |
|
|
@menu
|
20 |
|
|
* VAX-Opts:: VAX Command-Line Options
|
21 |
|
|
* VAX-float:: VAX Floating Point
|
22 |
|
|
* VAX-directives:: Vax Machine Directives
|
23 |
|
|
* VAX-opcodes:: VAX Opcodes
|
24 |
|
|
* VAX-branch:: VAX Branch Improvement
|
25 |
|
|
* VAX-operands:: VAX Operands
|
26 |
|
|
* VAX-no:: Not Supported on VAX
|
27 |
|
|
@end menu
|
28 |
|
|
|
29 |
|
|
|
30 |
|
|
@node VAX-Opts
|
31 |
|
|
@section VAX Command-Line Options
|
32 |
|
|
|
33 |
|
|
@cindex command-line options ignored, VAX
|
34 |
|
|
@cindex VAX command-line options ignored
|
35 |
|
|
The Vax version of @code{@value{AS}} accepts any of the following options,
|
36 |
|
|
gives a warning message that the option was ignored and proceeds.
|
37 |
|
|
These options are for compatibility with scripts designed for other
|
38 |
|
|
people's assemblers.
|
39 |
|
|
|
40 |
|
|
@table @code
|
41 |
|
|
@cindex @code{-D}, ignored on VAX
|
42 |
|
|
@cindex @code{-S}, ignored on VAX
|
43 |
|
|
@cindex @code{-T}, ignored on VAX
|
44 |
|
|
@item @code{-D} (Debug)
|
45 |
|
|
@itemx @code{-S} (Symbol Table)
|
46 |
|
|
@itemx @code{-T} (Token Trace)
|
47 |
|
|
These are obsolete options used to debug old assemblers.
|
48 |
|
|
|
49 |
|
|
@cindex @code{-d}, VAX option
|
50 |
|
|
@item @code{-d} (Displacement size for JUMPs)
|
51 |
|
|
This option expects a number following the @samp{-d}. Like options
|
52 |
|
|
that expect filenames, the number may immediately follow the
|
53 |
|
|
@samp{-d} (old standard) or constitute the whole of the command line
|
54 |
|
|
argument that follows @samp{-d} (@sc{gnu} standard).
|
55 |
|
|
|
56 |
|
|
@cindex @code{-V}, redundant on VAX
|
57 |
|
|
@item @code{-V} (Virtualize Interpass Temporary File)
|
58 |
|
|
Some other assemblers use a temporary file. This option
|
59 |
|
|
commanded them to keep the information in active memory rather
|
60 |
|
|
than in a disk file. @code{@value{AS}} always does this, so this
|
61 |
|
|
option is redundant.
|
62 |
|
|
|
63 |
|
|
@cindex @code{-J}, ignored on VAX
|
64 |
|
|
@item @code{-J} (JUMPify Longer Branches)
|
65 |
|
|
Many 32-bit computers permit a variety of branch instructions
|
66 |
|
|
to do the same job. Some of these instructions are short (and
|
67 |
|
|
fast) but have a limited range; others are long (and slow) but
|
68 |
|
|
can branch anywhere in virtual memory. Often there are 3
|
69 |
|
|
flavors of branch: short, medium and long. Some other
|
70 |
|
|
assemblers would emit short and medium branches, unless told by
|
71 |
|
|
this option to emit short and long branches.
|
72 |
|
|
|
73 |
|
|
@cindex @code{-t}, ignored on VAX
|
74 |
|
|
@item @code{-t} (Temporary File Directory)
|
75 |
|
|
Some other assemblers may use a temporary file, and this option
|
76 |
|
|
takes a filename being the directory to site the temporary
|
77 |
|
|
file. Since @code{@value{AS}} does not use a temporary disk file, this
|
78 |
|
|
option makes no difference. @samp{-t} needs exactly one
|
79 |
|
|
filename.
|
80 |
|
|
@end table
|
81 |
|
|
|
82 |
|
|
@cindex VMS (VAX) options
|
83 |
|
|
@cindex options for VAX/VMS
|
84 |
|
|
@cindex VAX/VMS options
|
85 |
|
|
@cindex Vax-11 C compatibility
|
86 |
|
|
@cindex symbols with uppercase, VAX/VMS
|
87 |
|
|
The Vax version of the assembler accepts additional options when
|
88 |
|
|
compiled for VMS:
|
89 |
|
|
|
90 |
|
|
@table @samp
|
91 |
|
|
@cindex @samp{-h} option, VAX/VMS
|
92 |
|
|
@item -h @var{n}
|
93 |
|
|
External symbol or section (used for global variables) names are not
|
94 |
|
|
case sensitive on VAX/VMS and always mapped to upper case. This is
|
95 |
|
|
contrary to the C language definition which explicitly distinguishes
|
96 |
|
|
upper and lower case. To implement a standard conforming C compiler,
|
97 |
|
|
names must be changed (mapped) to preserve the case information. The
|
98 |
|
|
default mapping is to convert all lower case characters to uppercase and
|
99 |
|
|
adding an underscore followed by a 6 digit hex value, representing a 24
|
100 |
|
|
digit binary value. The one digits in the binary value represent which
|
101 |
|
|
characters are uppercase in the original symbol name.
|
102 |
|
|
|
103 |
|
|
The @samp{-h @var{n}} option determines how we map names. This takes
|
104 |
|
|
several values. No @samp{-h} switch at all allows case hacking as
|
105 |
|
|
described above. A value of zero (@samp{-h0}) implies names should be
|
106 |
|
|
upper case, and inhibits the case hack. A value of 2 (@samp{-h2})
|
107 |
|
|
implies names should be all lower case, with no case hack. A value of 3
|
108 |
|
|
(@samp{-h3}) implies that case should be preserved. The value 1 is
|
109 |
|
|
unused. The @code{-H} option directs @code{@value{AS}} to display
|
110 |
|
|
every mapped symbol during assembly.
|
111 |
|
|
|
112 |
|
|
Symbols whose names include a dollar sign @samp{$} are exceptions to the
|
113 |
|
|
general name mapping. These symbols are normally only used to reference
|
114 |
|
|
VMS library names. Such symbols are always mapped to upper case.
|
115 |
|
|
|
116 |
|
|
@cindex @samp{-+} option, VAX/VMS
|
117 |
|
|
@item -+
|
118 |
|
|
The @samp{-+} option causes @code{@value{AS}} to truncate any symbol
|
119 |
|
|
name larger than 31 characters. The @samp{-+} option also prevents some
|
120 |
|
|
code following the @samp{_main} symbol normally added to make the object
|
121 |
|
|
file compatible with Vax-11 "C".
|
122 |
|
|
|
123 |
|
|
@cindex @samp{-1} option, VAX/VMS
|
124 |
|
|
@item -1
|
125 |
|
|
This option is ignored for backward compatibility with @code{@value{AS}}
|
126 |
|
|
version 1.x.
|
127 |
|
|
|
128 |
|
|
@cindex @samp{-H} option, VAX/VMS
|
129 |
|
|
@item -H
|
130 |
|
|
The @samp{-H} option causes @code{@value{AS}} to print every symbol
|
131 |
|
|
which was changed by case mapping.
|
132 |
|
|
@end table
|
133 |
|
|
|
134 |
|
|
@node VAX-float
|
135 |
|
|
@section VAX Floating Point
|
136 |
|
|
|
137 |
|
|
@cindex VAX floating point
|
138 |
|
|
@cindex floating point, VAX
|
139 |
|
|
Conversion of flonums to floating point is correct, and
|
140 |
|
|
compatible with previous assemblers. Rounding is
|
141 |
|
|
towards zero if the remainder is exactly half the least significant bit.
|
142 |
|
|
|
143 |
|
|
@code{D}, @code{F}, @code{G} and @code{H} floating point formats
|
144 |
|
|
are understood.
|
145 |
|
|
|
146 |
|
|
Immediate floating literals (@emph{e.g.} @samp{S`$6.9})
|
147 |
|
|
are rendered correctly. Again, rounding is towards zero in the
|
148 |
|
|
boundary case.
|
149 |
|
|
|
150 |
|
|
@cindex @code{float} directive, VAX
|
151 |
|
|
@cindex @code{double} directive, VAX
|
152 |
|
|
The @code{.float} directive produces @code{f} format numbers.
|
153 |
|
|
The @code{.double} directive produces @code{d} format numbers.
|
154 |
|
|
|
155 |
|
|
@node VAX-directives
|
156 |
|
|
@section Vax Machine Directives
|
157 |
|
|
|
158 |
|
|
@cindex machine directives, VAX
|
159 |
|
|
@cindex VAX machine directives
|
160 |
|
|
The Vax version of the assembler supports four directives for
|
161 |
|
|
generating Vax floating point constants. They are described in the
|
162 |
|
|
table below.
|
163 |
|
|
|
164 |
|
|
@cindex wide floating point directives, VAX
|
165 |
|
|
@table @code
|
166 |
|
|
@cindex @code{dfloat} directive, VAX
|
167 |
|
|
@item .dfloat
|
168 |
|
|
This expects zero or more flonums, separated by commas, and
|
169 |
|
|
assembles Vax @code{d} format 64-bit floating point constants.
|
170 |
|
|
|
171 |
|
|
@cindex @code{ffloat} directive, VAX
|
172 |
|
|
@item .ffloat
|
173 |
|
|
This expects zero or more flonums, separated by commas, and
|
174 |
|
|
assembles Vax @code{f} format 32-bit floating point constants.
|
175 |
|
|
|
176 |
|
|
@cindex @code{gfloat} directive, VAX
|
177 |
|
|
@item .gfloat
|
178 |
|
|
This expects zero or more flonums, separated by commas, and
|
179 |
|
|
assembles Vax @code{g} format 64-bit floating point constants.
|
180 |
|
|
|
181 |
|
|
@cindex @code{hfloat} directive, VAX
|
182 |
|
|
@item .hfloat
|
183 |
|
|
This expects zero or more flonums, separated by commas, and
|
184 |
|
|
assembles Vax @code{h} format 128-bit floating point constants.
|
185 |
|
|
|
186 |
|
|
@end table
|
187 |
|
|
|
188 |
|
|
@node VAX-opcodes
|
189 |
|
|
@section VAX Opcodes
|
190 |
|
|
|
191 |
|
|
@cindex VAX opcode mnemonics
|
192 |
|
|
@cindex opcode mnemonics, VAX
|
193 |
|
|
@cindex mnemonics for opcodes, VAX
|
194 |
|
|
All DEC mnemonics are supported. Beware that @code{case@dots{}}
|
195 |
|
|
instructions have exactly 3 operands. The dispatch table that
|
196 |
|
|
follows the @code{case@dots{}} instruction should be made with
|
197 |
|
|
@code{.word} statements. This is compatible with all unix
|
198 |
|
|
assemblers we know of.
|
199 |
|
|
|
200 |
|
|
@node VAX-branch
|
201 |
|
|
@section VAX Branch Improvement
|
202 |
|
|
|
203 |
|
|
@cindex VAX branch improvement
|
204 |
|
|
@cindex branch improvement, VAX
|
205 |
|
|
@cindex pseudo-ops for branch, VAX
|
206 |
|
|
Certain pseudo opcodes are permitted. They are for branch
|
207 |
|
|
instructions. They expand to the shortest branch instruction that
|
208 |
|
|
reaches the target. Generally these mnemonics are made by
|
209 |
|
|
substituting @samp{j} for @samp{b} at the start of a DEC mnemonic.
|
210 |
|
|
This feature is included both for compatibility and to help
|
211 |
|
|
compilers. If you do not need this feature, avoid these
|
212 |
|
|
opcodes. Here are the mnemonics, and the code they can expand into.
|
213 |
|
|
|
214 |
|
|
@table @code
|
215 |
|
|
@item jbsb
|
216 |
|
|
@samp{Jsb} is already an instruction mnemonic, so we chose @samp{jbsb}.
|
217 |
|
|
@table @asis
|
218 |
|
|
@item (byte displacement)
|
219 |
|
|
@kbd{bsbb @dots{}}
|
220 |
|
|
@item (word displacement)
|
221 |
|
|
@kbd{bsbw @dots{}}
|
222 |
|
|
@item (long displacement)
|
223 |
|
|
@kbd{jsb @dots{}}
|
224 |
|
|
@end table
|
225 |
|
|
@item jbr
|
226 |
|
|
@itemx jr
|
227 |
|
|
Unconditional branch.
|
228 |
|
|
@table @asis
|
229 |
|
|
@item (byte displacement)
|
230 |
|
|
@kbd{brb @dots{}}
|
231 |
|
|
@item (word displacement)
|
232 |
|
|
@kbd{brw @dots{}}
|
233 |
|
|
@item (long displacement)
|
234 |
|
|
@kbd{jmp @dots{}}
|
235 |
|
|
@end table
|
236 |
|
|
@item j@var{COND}
|
237 |
|
|
@var{COND} may be any one of the conditional branches
|
238 |
|
|
@code{neq}, @code{nequ}, @code{eql}, @code{eqlu}, @code{gtr},
|
239 |
|
|
@code{geq}, @code{lss}, @code{gtru}, @code{lequ}, @code{vc}, @code{vs},
|
240 |
|
|
@code{gequ}, @code{cc}, @code{lssu}, @code{cs}.
|
241 |
|
|
@var{COND} may also be one of the bit tests
|
242 |
|
|
@code{bs}, @code{bc}, @code{bss}, @code{bcs}, @code{bsc}, @code{bcc},
|
243 |
|
|
@code{bssi}, @code{bcci}, @code{lbs}, @code{lbc}.
|
244 |
|
|
@var{NOTCOND} is the opposite condition to @var{COND}.
|
245 |
|
|
@table @asis
|
246 |
|
|
@item (byte displacement)
|
247 |
|
|
@kbd{b@var{COND} @dots{}}
|
248 |
|
|
@item (word displacement)
|
249 |
|
|
@kbd{b@var{NOTCOND} foo ; brw @dots{} ; foo:}
|
250 |
|
|
@item (long displacement)
|
251 |
|
|
@kbd{b@var{NOTCOND} foo ; jmp @dots{} ; foo:}
|
252 |
|
|
@end table
|
253 |
|
|
@item jacb@var{X}
|
254 |
|
|
@var{X} may be one of @code{b d f g h l w}.
|
255 |
|
|
@table @asis
|
256 |
|
|
@item (word displacement)
|
257 |
|
|
@kbd{@var{OPCODE} @dots{}}
|
258 |
|
|
@item (long displacement)
|
259 |
|
|
@example
|
260 |
|
|
@var{OPCODE} @dots{}, foo ;
|
261 |
|
|
brb bar ;
|
262 |
|
|
foo: jmp @dots{} ;
|
263 |
|
|
bar:
|
264 |
|
|
@end example
|
265 |
|
|
@end table
|
266 |
|
|
@item jaob@var{YYY}
|
267 |
|
|
@var{YYY} may be one of @code{lss leq}.
|
268 |
|
|
@item jsob@var{ZZZ}
|
269 |
|
|
@var{ZZZ} may be one of @code{geq gtr}.
|
270 |
|
|
@table @asis
|
271 |
|
|
@item (byte displacement)
|
272 |
|
|
@kbd{@var{OPCODE} @dots{}}
|
273 |
|
|
@item (word displacement)
|
274 |
|
|
@example
|
275 |
|
|
@var{OPCODE} @dots{}, foo ;
|
276 |
|
|
brb bar ;
|
277 |
|
|
foo: brw @var{destination} ;
|
278 |
|
|
bar:
|
279 |
|
|
@end example
|
280 |
|
|
@item (long displacement)
|
281 |
|
|
@example
|
282 |
|
|
@var{OPCODE} @dots{}, foo ;
|
283 |
|
|
brb bar ;
|
284 |
|
|
foo: jmp @var{destination} ;
|
285 |
|
|
bar:
|
286 |
|
|
@end example
|
287 |
|
|
@end table
|
288 |
|
|
@item aobleq
|
289 |
|
|
@itemx aoblss
|
290 |
|
|
@itemx sobgeq
|
291 |
|
|
@itemx sobgtr
|
292 |
|
|
@table @asis
|
293 |
|
|
@item (byte displacement)
|
294 |
|
|
@kbd{@var{OPCODE} @dots{}}
|
295 |
|
|
@item (word displacement)
|
296 |
|
|
@example
|
297 |
|
|
@var{OPCODE} @dots{}, foo ;
|
298 |
|
|
brb bar ;
|
299 |
|
|
foo: brw @var{destination} ;
|
300 |
|
|
bar:
|
301 |
|
|
@end example
|
302 |
|
|
@item (long displacement)
|
303 |
|
|
@example
|
304 |
|
|
@var{OPCODE} @dots{}, foo ;
|
305 |
|
|
brb bar ;
|
306 |
|
|
foo: jmp @var{destination} ;
|
307 |
|
|
bar:
|
308 |
|
|
@end example
|
309 |
|
|
@end table
|
310 |
|
|
@end table
|
311 |
|
|
|
312 |
|
|
@node VAX-operands
|
313 |
|
|
@section VAX Operands
|
314 |
|
|
|
315 |
|
|
@cindex VAX operand notation
|
316 |
|
|
@cindex operand notation, VAX
|
317 |
|
|
@cindex immediate character, VAX
|
318 |
|
|
@cindex VAX immediate character
|
319 |
|
|
The immediate character is @samp{$} for Unix compatibility, not
|
320 |
|
|
@samp{#} as DEC writes it.
|
321 |
|
|
|
322 |
|
|
@cindex indirect character, VAX
|
323 |
|
|
@cindex VAX indirect character
|
324 |
|
|
The indirect character is @samp{*} for Unix compatibility, not
|
325 |
|
|
@samp{@@} as DEC writes it.
|
326 |
|
|
|
327 |
|
|
@cindex displacement sizing character, VAX
|
328 |
|
|
@cindex VAX displacement sizing character
|
329 |
|
|
The displacement sizing character is @samp{`} (an accent grave) for
|
330 |
|
|
Unix compatibility, not @samp{^} as DEC writes it. The letter
|
331 |
|
|
preceding @samp{`} may have either case. @samp{G} is not
|
332 |
|
|
understood, but all other letters (@code{b i l s w}) are understood.
|
333 |
|
|
|
334 |
|
|
@cindex register names, VAX
|
335 |
|
|
@cindex VAX register names
|
336 |
|
|
Register names understood are @code{r0 r1 r2 @dots{} r15 ap fp sp
|
337 |
|
|
pc}. Upper and lower case letters are equivalent.
|
338 |
|
|
|
339 |
|
|
For instance
|
340 |
|
|
@smallexample
|
341 |
|
|
tstb *w`$4(r5)
|
342 |
|
|
@end smallexample
|
343 |
|
|
|
344 |
|
|
Any expression is permitted in an operand. Operands are comma
|
345 |
|
|
separated.
|
346 |
|
|
|
347 |
|
|
@c There is some bug to do with recognizing expressions
|
348 |
|
|
@c in operands, but I forget what it is. It is
|
349 |
|
|
@c a syntax clash because () is used as an address mode
|
350 |
|
|
@c and to encapsulate sub-expressions.
|
351 |
|
|
|
352 |
|
|
@node VAX-no
|
353 |
|
|
@section Not Supported on VAX
|
354 |
|
|
|
355 |
|
|
@cindex VAX bitfields not supported
|
356 |
|
|
@cindex bitfields, not supported on VAX
|
357 |
|
|
Vax bit fields can not be assembled with @code{@value{AS}}. Someone
|
358 |
|
|
can add the required code if they really need it.
|