15f210c2aSfgsch@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
25f210c2aSfgsch@c Free Software Foundation, Inc.
35f210c2aSfgsch@c This is part of the GAS manual.
45f210c2aSfgsch@c For copying conditions, see the file as.texinfo.
55f210c2aSfgsch@ifset GENERIC
65f210c2aSfgsch@page
75f210c2aSfgsch@node M68HC11-Dependent
85f210c2aSfgsch@chapter M68HC11 and M68HC12 Dependent Features
95f210c2aSfgsch@end ifset
105f210c2aSfgsch@ifclear GENERIC
115f210c2aSfgsch@node Machine Dependencies
125f210c2aSfgsch@chapter M68HC11 and M68HC12 Dependent Features
135f210c2aSfgsch@end ifclear
145f210c2aSfgsch
155f210c2aSfgsch@cindex M68HC11 and M68HC12 support
165f210c2aSfgsch@menu
175f210c2aSfgsch* M68HC11-Opts::                   M68HC11 and M68HC12 Options
185f210c2aSfgsch* M68HC11-Syntax::                 Syntax
19*d2201f2fSdrahn* M68HC11-Modifiers::              Symbolic Operand Modifiers
20*d2201f2fSdrahn* M68HC11-Directives::             Assembler Directives
215f210c2aSfgsch* M68HC11-Float::                  Floating Point
225f210c2aSfgsch* M68HC11-opcodes::                Opcodes
235f210c2aSfgsch@end menu
245f210c2aSfgsch
255f210c2aSfgsch@node M68HC11-Opts
265f210c2aSfgsch@section M68HC11 and M68HC12 Options
275f210c2aSfgsch
285f210c2aSfgsch@cindex options, M68HC11
295f210c2aSfgsch@cindex M68HC11 options
30*d2201f2fSdrahnThe Motorola 68HC11 and 68HC12 version of @code{@value{AS}} have a few machine
315f210c2aSfgschdependent options.
325f210c2aSfgsch
33*d2201f2fSdrahn@table @code
34*d2201f2fSdrahn
355f210c2aSfgsch@cindex @samp{-m68hc11}
36*d2201f2fSdrahn@item -m68hc11
375f210c2aSfgschThis option switches the assembler in the M68HC11 mode. In this mode,
385f210c2aSfgschthe assembler only accepts 68HC11 operands and mnemonics. It produces
395f210c2aSfgschcode for the 68HC11.
405f210c2aSfgsch
415f210c2aSfgsch@cindex @samp{-m68hc12}
42*d2201f2fSdrahn@item -m68hc12
435f210c2aSfgschThis option switches the assembler in the M68HC12 mode. In this mode,
445f210c2aSfgschthe assembler also accepts 68HC12 operands and mnemonics. It produces
45*d2201f2fSdrahncode for the 68HC12. A few 68HC11 instructions are replaced by
465f210c2aSfgschsome 68HC12 instructions as recommended by Motorola specifications.
475f210c2aSfgsch
48*d2201f2fSdrahn@cindex @samp{-m68hcs12}
49*d2201f2fSdrahn@item -m68hcs12
50*d2201f2fSdrahnThis option switches the assembler in the M68HCS12 mode.  This mode is
51*d2201f2fSdrahnsimilar to @samp{-m68hc12} but specifies to assemble for the 68HCS12
52*d2201f2fSdrahnseries.  The only difference is on the assembling of the @samp{movb}
53*d2201f2fSdrahnand @samp{movw} instruction when a PC-relative operand is used.
54*d2201f2fSdrahn
55*d2201f2fSdrahn@cindex @samp{-mshort}
56*d2201f2fSdrahn@item -mshort
57*d2201f2fSdrahnThis option controls the ABI and indicates to use a 16-bit integer ABI.
58*d2201f2fSdrahnIt has no effect on the assembled instructions.
59*d2201f2fSdrahnThis is the default.
60*d2201f2fSdrahn
61*d2201f2fSdrahn@cindex @samp{-mlong}
62*d2201f2fSdrahn@item -mlong
63*d2201f2fSdrahnThis option controls the ABI and indicates to use a 32-bit integer ABI.
64*d2201f2fSdrahn
65*d2201f2fSdrahn@cindex @samp{-mshort-double}
66*d2201f2fSdrahn@item -mshort-double
67*d2201f2fSdrahnThis option controls the ABI and indicates to use a 32-bit float ABI.
68*d2201f2fSdrahnThis is the default.
69*d2201f2fSdrahn
70*d2201f2fSdrahn@cindex @samp{-mlong-double}
71*d2201f2fSdrahn@item -mlong-double
72*d2201f2fSdrahnThis option controls the ABI and indicates to use a 64-bit float ABI.
73*d2201f2fSdrahn
745f210c2aSfgsch@cindex @samp{--strict-direct-mode}
75*d2201f2fSdrahn@item --strict-direct-mode
765f210c2aSfgschYou can use the @samp{--strict-direct-mode} option to disable
775f210c2aSfgschthe automatic translation of direct page mode addressing into
785f210c2aSfgschextended mode when the instruction does not support direct mode.
795f210c2aSfgschFor example, the @samp{clr} instruction does not support direct page
805f210c2aSfgschmode addressing. When it is used with the direct page mode,
815f210c2aSfgsch@code{@value{AS}} will ignore it and generate an absolute addressing.
825f210c2aSfgschThis option prevents @code{@value{AS}} from doing this, and the wrong
835f210c2aSfgschusage of the direct page mode will raise an error.
845f210c2aSfgsch
855f210c2aSfgsch@cindex @samp{--short-branchs}
86*d2201f2fSdrahn@item --short-branchs
875f210c2aSfgschThe @samp{--short-branchs} option turns off the translation of
885f210c2aSfgschrelative branches into absolute branches when the branch offset is
895f210c2aSfgschout of range. By default @code{@value{AS}} transforms the relative
905f210c2aSfgschbranch (@samp{bsr}, @samp{bgt}, @samp{bge}, @samp{beq}, @samp{bne},
915f210c2aSfgsch@samp{ble}, @samp{blt}, @samp{bhi}, @samp{bcc}, @samp{bls},
925f210c2aSfgsch@samp{bcs}, @samp{bmi}, @samp{bvs}, @samp{bvs}, @samp{bra}) into
935f210c2aSfgschan absolute branch when the offset is out of the -128 .. 127 range.
945f210c2aSfgschIn that case, the @samp{bsr} instruction is translated into a
955f210c2aSfgsch@samp{jsr}, the @samp{bra} instruction is translated into a
965f210c2aSfgsch@samp{jmp} and the conditional branchs instructions are inverted and
975f210c2aSfgschfollowed by a @samp{jmp}. This option disables these translations
985f210c2aSfgschand @code{@value{AS}} will generate an error if a relative branch
995f210c2aSfgschis out of range. This option does not affect the optimization
1005f210c2aSfgschassociated to the @samp{jbra}, @samp{jbsr} and @samp{jbXX} pseudo opcodes.
1015f210c2aSfgsch
1025f210c2aSfgsch@cindex @samp{--force-long-branchs}
103*d2201f2fSdrahn@item --force-long-branchs
1045f210c2aSfgschThe @samp{--force-long-branchs} option forces the translation of
1055f210c2aSfgschrelative branches into absolute branches. This option does not affect
1065f210c2aSfgschthe optimization associated to the @samp{jbra}, @samp{jbsr} and
1075f210c2aSfgsch@samp{jbXX} pseudo opcodes.
1085f210c2aSfgsch
1095f210c2aSfgsch@cindex @samp{--print-insn-syntax}
110*d2201f2fSdrahn@item --print-insn-syntax
1115f210c2aSfgschYou can use the @samp{--print-insn-syntax} option to obtain the
1125f210c2aSfgschsyntax description of the instruction when an error is detected.
1135f210c2aSfgsch
1145f210c2aSfgsch@cindex @samp{--print-opcodes}
115*d2201f2fSdrahn@item --print-opcodes
1165f210c2aSfgschThe @samp{--print-opcodes} option prints the list of all the
1175f210c2aSfgschinstructions with their syntax. The first item of each line
1185f210c2aSfgschrepresents the instruction name and the rest of the line indicates
1195f210c2aSfgschthe possible operands for that instruction. The list is printed
1205f210c2aSfgschin alphabetical order. Once the list is printed @code{@value{AS}}
1215f210c2aSfgschexits.
1225f210c2aSfgsch
1235f210c2aSfgsch@cindex @samp{--generate-example}
124*d2201f2fSdrahn@item --generate-example
1255f210c2aSfgschThe @samp{--generate-example} option is similar to @samp{--print-opcodes}
1265f210c2aSfgschbut it generates an example for each instruction instead.
127*d2201f2fSdrahn@end table
1285f210c2aSfgsch
1295f210c2aSfgsch@node M68HC11-Syntax
1305f210c2aSfgsch@section Syntax
1315f210c2aSfgsch
1325f210c2aSfgsch@cindex M68HC11 syntax
1335f210c2aSfgsch@cindex syntax, M68HC11
1345f210c2aSfgsch
1355f210c2aSfgschIn the M68HC11 syntax, the instruction name comes first and it may
1365f210c2aSfgschbe followed by one or several operands (up to three). Operands are
1375f210c2aSfgschseparated by comma (@samp{,}). In the normal mode,
1385f210c2aSfgsch@code{@value{AS}} will complain if too many operands are specified for
1395f210c2aSfgscha given instruction. In the MRI mode (turned on with @samp{-M} option),
1405f210c2aSfgschit will treat them as comments. Example:
1415f210c2aSfgsch
1425f210c2aSfgsch@smallexample
1435f210c2aSfgschinx
1445f210c2aSfgschlda  #23
1455f210c2aSfgschbset 2,x #4
1465f210c2aSfgschbrclr *bot #8 foo
1475f210c2aSfgsch@end smallexample
1485f210c2aSfgsch
1495f210c2aSfgsch@cindex M68HC11 addressing modes
1505f210c2aSfgsch@cindex addressing modes, M68HC11
151*d2201f2fSdrahnThe following addressing modes are understood for 68HC11 and 68HC12:
1525f210c2aSfgsch@table @dfn
1535f210c2aSfgsch@item Immediate
1545f210c2aSfgsch@samp{#@var{number}}
1555f210c2aSfgsch
1565f210c2aSfgsch@item Address Register
1575f210c2aSfgsch@samp{@var{number},X}, @samp{@var{number},Y}
1585f210c2aSfgsch
1595f210c2aSfgschThe @var{number} may be omitted in which case 0 is assumed.
1605f210c2aSfgsch
1615f210c2aSfgsch@item Direct Addressing mode
1625f210c2aSfgsch@samp{*@var{symbol}}, or @samp{*@var{digits}}
1635f210c2aSfgsch
1645f210c2aSfgsch@item Absolute
1655f210c2aSfgsch@samp{@var{symbol}}, or @samp{@var{digits}}
1665f210c2aSfgsch@end table
1675f210c2aSfgsch
168*d2201f2fSdrahnThe M68HC12 has other more complex addressing modes. All of them
169*d2201f2fSdrahnare supported and they are represented below:
170*d2201f2fSdrahn
171*d2201f2fSdrahn@table @dfn
172*d2201f2fSdrahn@item Constant Offset Indexed Addressing Mode
173*d2201f2fSdrahn@samp{@var{number},@var{reg}}
174*d2201f2fSdrahn
175*d2201f2fSdrahnThe @var{number} may be omitted in which case 0 is assumed.
176*d2201f2fSdrahnThe register can be either @samp{X}, @samp{Y}, @samp{SP} or
177*d2201f2fSdrahn@samp{PC}.  The assembler will use the smaller post-byte definition
178*d2201f2fSdrahnaccording to the constant value (5-bit constant offset, 9-bit constant
179*d2201f2fSdrahnoffset or 16-bit constant offset).  If the constant is not known by
180*d2201f2fSdrahnthe assembler it will use the 16-bit constant offset post-byte and the value
181*d2201f2fSdrahnwill be resolved at link time.
182*d2201f2fSdrahn
183*d2201f2fSdrahn@item Offset Indexed Indirect
184*d2201f2fSdrahn@samp{[@var{number},@var{reg}]}
185*d2201f2fSdrahn
186*d2201f2fSdrahnThe register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
187*d2201f2fSdrahn
188*d2201f2fSdrahn@item Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement
189*d2201f2fSdrahn@samp{@var{number},-@var{reg}}
190*d2201f2fSdrahn@samp{@var{number},+@var{reg}}
191*d2201f2fSdrahn@samp{@var{number},@var{reg}-}
192*d2201f2fSdrahn@samp{@var{number},@var{reg}+}
193*d2201f2fSdrahn
194*d2201f2fSdrahnThe number must be in the range @samp{-8}..@samp{+8} and must not be 0.
195*d2201f2fSdrahnThe register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
196*d2201f2fSdrahn
197*d2201f2fSdrahn@item Accumulator Offset
198*d2201f2fSdrahn@samp{@var{acc},@var{reg}}
199*d2201f2fSdrahn
200*d2201f2fSdrahnThe accumulator register can be either @samp{A}, @samp{B} or @samp{D}.
201*d2201f2fSdrahnThe register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
202*d2201f2fSdrahn
203*d2201f2fSdrahn@item Accumulator D offset indexed-indirect
204*d2201f2fSdrahn@samp{[D,@var{reg}]}
205*d2201f2fSdrahn
206*d2201f2fSdrahnThe register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
207*d2201f2fSdrahn
208*d2201f2fSdrahn@end table
209*d2201f2fSdrahn
210*d2201f2fSdrahnFor example:
211*d2201f2fSdrahn
212*d2201f2fSdrahn@smallexample
213*d2201f2fSdrahnldab 1024,sp
214*d2201f2fSdrahnldd [10,x]
215*d2201f2fSdrahnorab 3,+x
216*d2201f2fSdrahnstab -2,y-
217*d2201f2fSdrahnldx a,pc
218*d2201f2fSdrahnsty [d,sp]
219*d2201f2fSdrahn@end smallexample
220*d2201f2fSdrahn
221*d2201f2fSdrahn
222*d2201f2fSdrahn@node M68HC11-Modifiers
223*d2201f2fSdrahn@section Symbolic Operand Modifiers
224*d2201f2fSdrahn
225*d2201f2fSdrahn@cindex M68HC11 modifiers
226*d2201f2fSdrahn@cindex syntax, M68HC11
227*d2201f2fSdrahn
228*d2201f2fSdrahnThe assembler supports several modifiers when using symbol addresses
229*d2201f2fSdrahnin 68HC11 and 68HC12 instruction operands.  The general syntax is
230*d2201f2fSdrahnthe following:
231*d2201f2fSdrahn
232*d2201f2fSdrahn@smallexample
233*d2201f2fSdrahn%modifier(symbol)
234*d2201f2fSdrahn@end smallexample
235*d2201f2fSdrahn
236*d2201f2fSdrahn@table @code
237*d2201f2fSdrahn@cindex symbol modifiers
238*d2201f2fSdrahn@item %addr
239*d2201f2fSdrahnThis modifier indicates to the assembler and linker to use
240*d2201f2fSdrahnthe 16-bit physical address corresponding to the symbol.  This is intended
241*d2201f2fSdrahnto be used on memory window systems to map a symbol in the memory bank window.
242*d2201f2fSdrahnIf the symbol is in a memory expansion part, the physical address
243*d2201f2fSdrahncorresponds to the symbol address within the memory bank window.
244*d2201f2fSdrahnIf the symbol is not in a memory expansion part, this is the symbol address
245*d2201f2fSdrahn(using or not using the %addr modifier has no effect in that case).
246*d2201f2fSdrahn
247*d2201f2fSdrahn@item %page
248*d2201f2fSdrahnThis modifier indicates to use the memory page number corresponding
249*d2201f2fSdrahnto the symbol.  If the symbol is in a memory expansion part, its page
250*d2201f2fSdrahnnumber is computed by the linker as a number used to map the page containing
251*d2201f2fSdrahnthe symbol in the memory bank window.  If the symbol is not in a memory
252*d2201f2fSdrahnexpansion part, the page number is 0.
253*d2201f2fSdrahn
254*d2201f2fSdrahn@item %hi
255*d2201f2fSdrahnThis modifier indicates to use the 8-bit high part of the physical
256*d2201f2fSdrahnaddress of the symbol.
257*d2201f2fSdrahn
258*d2201f2fSdrahn@item %lo
259*d2201f2fSdrahnThis modifier indicates to use the 8-bit low part of the physical
260*d2201f2fSdrahnaddress of the symbol.
261*d2201f2fSdrahn
262*d2201f2fSdrahn@end table
263*d2201f2fSdrahn
264*d2201f2fSdrahnFor example a 68HC12 call to a function @samp{foo_example} stored in memory
265*d2201f2fSdrahnexpansion part could be written as follows:
266*d2201f2fSdrahn
267*d2201f2fSdrahn@smallexample
268*d2201f2fSdrahncall %addr(foo_example),%page(foo_example)
269*d2201f2fSdrahn@end smallexample
270*d2201f2fSdrahn
271*d2201f2fSdrahnand this is equivalent to
272*d2201f2fSdrahn
273*d2201f2fSdrahn@smallexample
274*d2201f2fSdrahncall foo_example
275*d2201f2fSdrahn@end smallexample
276*d2201f2fSdrahn
277*d2201f2fSdrahnAnd for 68HC11 it could be written as follows:
278*d2201f2fSdrahn
279*d2201f2fSdrahn@smallexample
280*d2201f2fSdrahnldab #%page(foo_example)
281*d2201f2fSdrahnstab _page_switch
282*d2201f2fSdrahnjsr  %addr(foo_example)
283*d2201f2fSdrahn@end smallexample
284*d2201f2fSdrahn
285*d2201f2fSdrahn@node M68HC11-Directives
286*d2201f2fSdrahn@section Assembler Directives
287*d2201f2fSdrahn
288*d2201f2fSdrahn@cindex assembler directives, M68HC11
289*d2201f2fSdrahn@cindex assembler directives, M68HC12
290*d2201f2fSdrahn@cindex M68HC11 assembler directives
291*d2201f2fSdrahn@cindex M68HC12 assembler directives
292*d2201f2fSdrahn
293*d2201f2fSdrahnThe 68HC11 and 68HC12 version of @code{@value{AS}} have the following
294*d2201f2fSdrahnspecific assembler directives:
295*d2201f2fSdrahn
296*d2201f2fSdrahn@table @code
297*d2201f2fSdrahn@item .relax
298*d2201f2fSdrahn@cindex assembler directive .relax, M68HC11
299*d2201f2fSdrahn@cindex M68HC11 assembler directive .relax
300*d2201f2fSdrahnThe relax directive is used by the @samp{GNU Compiler} to emit a specific
301*d2201f2fSdrahnrelocation to mark a group of instructions for linker relaxation.
302*d2201f2fSdrahnThe sequence of instructions within the group must be known to the linker
303*d2201f2fSdrahnso that relaxation can be performed.
304*d2201f2fSdrahn
305*d2201f2fSdrahn@item .mode [mshort|mlong|mshort-double|mlong-double]
306*d2201f2fSdrahn@cindex assembler directive .mode, M68HC11
307*d2201f2fSdrahn@cindex M68HC11 assembler directive .mode
308*d2201f2fSdrahnThis directive specifies the ABI.  It overrides the @samp{-mshort},
309*d2201f2fSdrahn@samp{-mlong}, @samp{-mshort-double} and @samp{-mlong-double} options.
310*d2201f2fSdrahn
311*d2201f2fSdrahn@item .far @var{symbol}
312*d2201f2fSdrahn@cindex assembler directive .far, M68HC11
313*d2201f2fSdrahn@cindex M68HC11 assembler directive .far
314*d2201f2fSdrahnThis directive marks the symbol as a @samp{far} symbol meaning that it
315*d2201f2fSdrahnuses a @samp{call/rtc} calling convention as opposed to @samp{jsr/rts}.
316*d2201f2fSdrahnDuring a final link, the linker will identify references to the @samp{far}
317*d2201f2fSdrahnsymbol and will verify the proper calling convention.
318*d2201f2fSdrahn
319*d2201f2fSdrahn@item .interrupt @var{symbol}
320*d2201f2fSdrahn@cindex assembler directive .interrupt, M68HC11
321*d2201f2fSdrahn@cindex M68HC11 assembler directive .interrupt
322*d2201f2fSdrahnThis directive marks the symbol as an interrupt entry point.
323*d2201f2fSdrahnThis information is then used by the debugger to correctly unwind the
324*d2201f2fSdrahnframe across interrupts.
325*d2201f2fSdrahn
326*d2201f2fSdrahn@item .xrefb @var{symbol}
327*d2201f2fSdrahn@cindex assembler directive .xrefb, M68HC11
328*d2201f2fSdrahn@cindex M68HC11 assembler directive .xrefb
329*d2201f2fSdrahnThis directive is defined for compatibility with the
330*d2201f2fSdrahn@samp{Specification for Motorola 8 and 16-Bit Assembly Language Input
331*d2201f2fSdrahnStandard} and is ignored.
332*d2201f2fSdrahn
333*d2201f2fSdrahn@end table
334*d2201f2fSdrahn
3355f210c2aSfgsch@node M68HC11-Float
3365f210c2aSfgsch@section Floating Point
3375f210c2aSfgsch
3385f210c2aSfgsch@cindex floating point, M68HC11
3395f210c2aSfgsch@cindex M68HC11 floating point
3405f210c2aSfgschPacked decimal (P) format floating literals are not supported.
3415f210c2aSfgschFeel free to add the code!
3425f210c2aSfgsch
3435f210c2aSfgschThe floating point formats generated by directives are these.
3445f210c2aSfgsch
3455f210c2aSfgsch@table @code
3465f210c2aSfgsch@cindex @code{float} directive, M68HC11
3475f210c2aSfgsch@item .float
3485f210c2aSfgsch@code{Single} precision floating point constants.
3495f210c2aSfgsch
3505f210c2aSfgsch@cindex @code{double} directive, M68HC11
3515f210c2aSfgsch@item .double
3525f210c2aSfgsch@code{Double} precision floating point constants.
3535f210c2aSfgsch
3545f210c2aSfgsch@cindex @code{extend} directive M68HC11
3555f210c2aSfgsch@cindex @code{ldouble} directive M68HC11
3565f210c2aSfgsch@item .extend
3575f210c2aSfgsch@itemx .ldouble
3585f210c2aSfgsch@code{Extended} precision (@code{long double}) floating point constants.
3595f210c2aSfgsch@end table
3605f210c2aSfgsch
3615f210c2aSfgsch@need 2000
3625f210c2aSfgsch@node M68HC11-opcodes
3635f210c2aSfgsch@section Opcodes
3645f210c2aSfgsch
3655f210c2aSfgsch@cindex M68HC11 opcodes
3665f210c2aSfgsch@cindex opcodes, M68HC11
3675f210c2aSfgsch@cindex instruction set, M68HC11
3685f210c2aSfgsch
3695f210c2aSfgsch@menu
3705f210c2aSfgsch* M68HC11-Branch::                 Branch Improvement
3715f210c2aSfgsch@end menu
3725f210c2aSfgsch
3735f210c2aSfgsch@node M68HC11-Branch
3745f210c2aSfgsch@subsection Branch Improvement
3755f210c2aSfgsch
3765f210c2aSfgsch@cindex pseudo-opcodes, M68HC11
3775f210c2aSfgsch@cindex M68HC11 pseudo-opcodes
3785f210c2aSfgsch@cindex branch improvement, M68HC11
3795f210c2aSfgsch@cindex M68HC11 branch improvement
3805f210c2aSfgsch
3815f210c2aSfgschCertain pseudo opcodes are permitted for branch instructions.
3825f210c2aSfgschThey expand to the shortest branch instruction that reach the
3835f210c2aSfgschtarget. Generally these mnemonics are made by prepending @samp{j} to
3845f210c2aSfgschthe start of Motorola mnemonic. These pseudo opcodes are not affected
3855f210c2aSfgschby the @samp{--short-branchs} or @samp{--force-long-branchs} options.
3865f210c2aSfgsch
3875f210c2aSfgschThe following table summarizes the pseudo-operations.
3885f210c2aSfgsch
3895f210c2aSfgsch@smallexample
3905f210c2aSfgsch                        Displacement Width
3915f210c2aSfgsch     +-------------------------------------------------------------+
3925f210c2aSfgsch     |                     Options                                 |
3935f210c2aSfgsch     |    --short-branchs            --force-long-branchs          |
3945f210c2aSfgsch     +--------------------------+----------------------------------+
395*d2201f2fSdrahn  Op |BYTE             WORD     | BYTE          WORD               |
3965f210c2aSfgsch     +--------------------------+----------------------------------+
3975f210c2aSfgsch bsr | bsr <pc-rel>    <error>  |               jsr <abs>          |
3985f210c2aSfgsch bra | bra <pc-rel>    <error>  |               jmp <abs>          |
3995f210c2aSfgschjbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          |
4005f210c2aSfgschjbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          |
4015f210c2aSfgsch bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  |
4025f210c2aSfgschjbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  |
4035f210c2aSfgsch     |                jmp <abs> |                                  |
4045f210c2aSfgsch     +--------------------------+----------------------------------+
4055f210c2aSfgschXX: condition
4065f210c2aSfgschNX: negative of condition XX
4075f210c2aSfgsch
4085f210c2aSfgsch@end smallexample
4095f210c2aSfgsch
4105f210c2aSfgsch@table @code
4115f210c2aSfgsch@item jbsr
4125f210c2aSfgsch@itemx jbra
4135f210c2aSfgschThese are the simplest jump pseudo-operations; they always map to one
4145f210c2aSfgschparticular machine instruction, depending on the displacement to the
4155f210c2aSfgschbranch target.
4165f210c2aSfgsch
4175f210c2aSfgsch@item jb@var{XX}
4185f210c2aSfgschHere, @samp{jb@var{XX}} stands for an entire family of pseudo-operations,
4195f210c2aSfgschwhere @var{XX} is a conditional branch or condition-code test.  The full
4205f210c2aSfgschlist of pseudo-ops in this family is:
4215f210c2aSfgsch@smallexample
4225f210c2aSfgsch jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
4235f210c2aSfgsch jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
4245f210c2aSfgsch@end smallexample
4255f210c2aSfgsch
4265f210c2aSfgschFor the cases of non-PC relative displacements and long displacements,
4275f210c2aSfgsch@code{@value{AS}} issues a longer code fragment in terms of
4285f210c2aSfgsch@var{NX}, the opposite condition to @var{XX}.  For example, for the
4295f210c2aSfgschnon-PC relative case:
4305f210c2aSfgsch@smallexample
4315f210c2aSfgsch    jb@var{XX} foo
4325f210c2aSfgsch@end smallexample
4335f210c2aSfgschgives
4345f210c2aSfgsch@smallexample
4355f210c2aSfgsch     b@var{NX}s oof
4365f210c2aSfgsch     jmp foo
4375f210c2aSfgsch oof:
4385f210c2aSfgsch@end smallexample
4395f210c2aSfgsch
4405f210c2aSfgsch@end table
4415f210c2aSfgsch
4425f210c2aSfgsch
443