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