| 1 | @c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
|
|---|
| 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 | @ifset GENERIC
|
|---|
| 6 | @page
|
|---|
| 7 | @node M68HC11-Dependent
|
|---|
| 8 | @chapter M68HC11 and M68HC12 Dependent Features
|
|---|
| 9 | @end ifset
|
|---|
| 10 | @ifclear GENERIC
|
|---|
| 11 | @node Machine Dependencies
|
|---|
| 12 | @chapter M68HC11 and M68HC12 Dependent Features
|
|---|
| 13 | @end ifclear
|
|---|
| 14 |
|
|---|
| 15 | @cindex M68HC11 and M68HC12 support
|
|---|
| 16 | @menu
|
|---|
| 17 | * M68HC11-Opts:: M68HC11 and M68HC12 Options
|
|---|
| 18 | * M68HC11-Syntax:: Syntax
|
|---|
| 19 | * M68HC11-Modifiers:: Symbolic Operand Modifiers
|
|---|
| 20 | * M68HC11-Directives:: Assembler Directives
|
|---|
| 21 | * M68HC11-Float:: Floating Point
|
|---|
| 22 | * M68HC11-opcodes:: Opcodes
|
|---|
| 23 | @end menu
|
|---|
| 24 |
|
|---|
| 25 | @node M68HC11-Opts
|
|---|
| 26 | @section M68HC11 and M68HC12 Options
|
|---|
| 27 |
|
|---|
| 28 | @cindex options, M68HC11
|
|---|
| 29 | @cindex M68HC11 options
|
|---|
| 30 | The Motorola 68HC11 and 68HC12 version of @code{@value{AS}} have a few machine
|
|---|
| 31 | dependent options.
|
|---|
| 32 |
|
|---|
| 33 | @table @code
|
|---|
| 34 |
|
|---|
| 35 | @cindex @samp{-m68hc11}
|
|---|
| 36 | @item -m68hc11
|
|---|
| 37 | This option switches the assembler in the M68HC11 mode. In this mode,
|
|---|
| 38 | the assembler only accepts 68HC11 operands and mnemonics. It produces
|
|---|
| 39 | code for the 68HC11.
|
|---|
| 40 |
|
|---|
| 41 | @cindex @samp{-m68hc12}
|
|---|
| 42 | @item -m68hc12
|
|---|
| 43 | This option switches the assembler in the M68HC12 mode. In this mode,
|
|---|
| 44 | the assembler also accepts 68HC12 operands and mnemonics. It produces
|
|---|
| 45 | code for the 68HC12. A few 68HC11 instructions are replaced by
|
|---|
| 46 | some 68HC12 instructions as recommended by Motorola specifications.
|
|---|
| 47 |
|
|---|
| 48 | @cindex @samp{-m68hcs12}
|
|---|
| 49 | @item -m68hcs12
|
|---|
| 50 | This option switches the assembler in the M68HCS12 mode. This mode is
|
|---|
| 51 | similar to @samp{-m68hc12} but specifies to assemble for the 68HCS12
|
|---|
| 52 | series. The only difference is on the assembling of the @samp{movb}
|
|---|
| 53 | and @samp{movw} instruction when a PC-relative operand is used.
|
|---|
| 54 |
|
|---|
| 55 | @cindex @samp{-mshort}
|
|---|
| 56 | @item -mshort
|
|---|
| 57 | This option controls the ABI and indicates to use a 16-bit integer ABI.
|
|---|
| 58 | It has no effect on the assembled instructions.
|
|---|
| 59 | This is the default.
|
|---|
| 60 |
|
|---|
| 61 | @cindex @samp{-mlong}
|
|---|
| 62 | @item -mlong
|
|---|
| 63 | This option controls the ABI and indicates to use a 32-bit integer ABI.
|
|---|
| 64 |
|
|---|
| 65 | @cindex @samp{-mshort-double}
|
|---|
| 66 | @item -mshort-double
|
|---|
| 67 | This option controls the ABI and indicates to use a 32-bit float ABI.
|
|---|
| 68 | This is the default.
|
|---|
| 69 |
|
|---|
| 70 | @cindex @samp{-mlong-double}
|
|---|
| 71 | @item -mlong-double
|
|---|
| 72 | This option controls the ABI and indicates to use a 64-bit float ABI.
|
|---|
| 73 |
|
|---|
| 74 | @cindex @samp{--strict-direct-mode}
|
|---|
| 75 | @item --strict-direct-mode
|
|---|
| 76 | You can use the @samp{--strict-direct-mode} option to disable
|
|---|
| 77 | the automatic translation of direct page mode addressing into
|
|---|
| 78 | extended mode when the instruction does not support direct mode.
|
|---|
| 79 | For example, the @samp{clr} instruction does not support direct page
|
|---|
| 80 | mode addressing. When it is used with the direct page mode,
|
|---|
| 81 | @code{@value{AS}} will ignore it and generate an absolute addressing.
|
|---|
| 82 | This option prevents @code{@value{AS}} from doing this, and the wrong
|
|---|
| 83 | usage of the direct page mode will raise an error.
|
|---|
| 84 |
|
|---|
| 85 | @cindex @samp{--short-branchs}
|
|---|
| 86 | @item --short-branchs
|
|---|
| 87 | The @samp{--short-branchs} option turns off the translation of
|
|---|
| 88 | relative branches into absolute branches when the branch offset is
|
|---|
| 89 | out of range. By default @code{@value{AS}} transforms the relative
|
|---|
| 90 | branch (@samp{bsr}, @samp{bgt}, @samp{bge}, @samp{beq}, @samp{bne},
|
|---|
| 91 | @samp{ble}, @samp{blt}, @samp{bhi}, @samp{bcc}, @samp{bls},
|
|---|
| 92 | @samp{bcs}, @samp{bmi}, @samp{bvs}, @samp{bvs}, @samp{bra}) into
|
|---|
| 93 | an absolute branch when the offset is out of the -128 .. 127 range.
|
|---|
| 94 | In that case, the @samp{bsr} instruction is translated into a
|
|---|
| 95 | @samp{jsr}, the @samp{bra} instruction is translated into a
|
|---|
| 96 | @samp{jmp} and the conditional branchs instructions are inverted and
|
|---|
| 97 | followed by a @samp{jmp}. This option disables these translations
|
|---|
| 98 | and @code{@value{AS}} will generate an error if a relative branch
|
|---|
| 99 | is out of range. This option does not affect the optimization
|
|---|
| 100 | associated to the @samp{jbra}, @samp{jbsr} and @samp{jbXX} pseudo opcodes.
|
|---|
| 101 |
|
|---|
| 102 | @cindex @samp{--force-long-branchs}
|
|---|
| 103 | @item --force-long-branchs
|
|---|
| 104 | The @samp{--force-long-branchs} option forces the translation of
|
|---|
| 105 | relative branches into absolute branches. This option does not affect
|
|---|
| 106 | the optimization associated to the @samp{jbra}, @samp{jbsr} and
|
|---|
| 107 | @samp{jbXX} pseudo opcodes.
|
|---|
| 108 |
|
|---|
| 109 | @cindex @samp{--print-insn-syntax}
|
|---|
| 110 | @item --print-insn-syntax
|
|---|
| 111 | You can use the @samp{--print-insn-syntax} option to obtain the
|
|---|
| 112 | syntax description of the instruction when an error is detected.
|
|---|
| 113 |
|
|---|
| 114 | @cindex @samp{--print-opcodes}
|
|---|
| 115 | @item --print-opcodes
|
|---|
| 116 | The @samp{--print-opcodes} option prints the list of all the
|
|---|
| 117 | instructions with their syntax. The first item of each line
|
|---|
| 118 | represents the instruction name and the rest of the line indicates
|
|---|
| 119 | the possible operands for that instruction. The list is printed
|
|---|
| 120 | in alphabetical order. Once the list is printed @code{@value{AS}}
|
|---|
| 121 | exits.
|
|---|
| 122 |
|
|---|
| 123 | @cindex @samp{--generate-example}
|
|---|
| 124 | @item --generate-example
|
|---|
| 125 | The @samp{--generate-example} option is similar to @samp{--print-opcodes}
|
|---|
| 126 | but it generates an example for each instruction instead.
|
|---|
| 127 | @end table
|
|---|
| 128 |
|
|---|
| 129 | @node M68HC11-Syntax
|
|---|
| 130 | @section Syntax
|
|---|
| 131 |
|
|---|
| 132 | @cindex M68HC11 syntax
|
|---|
| 133 | @cindex syntax, M68HC11
|
|---|
| 134 |
|
|---|
| 135 | In the M68HC11 syntax, the instruction name comes first and it may
|
|---|
| 136 | be followed by one or several operands (up to three). Operands are
|
|---|
| 137 | separated by comma (@samp{,}). In the normal mode,
|
|---|
| 138 | @code{@value{AS}} will complain if too many operands are specified for
|
|---|
| 139 | a given instruction. In the MRI mode (turned on with @samp{-M} option),
|
|---|
| 140 | it will treat them as comments. Example:
|
|---|
| 141 |
|
|---|
| 142 | @smallexample
|
|---|
| 143 | inx
|
|---|
| 144 | lda #23
|
|---|
| 145 | bset 2,x #4
|
|---|
| 146 | brclr *bot #8 foo
|
|---|
| 147 | @end smallexample
|
|---|
| 148 |
|
|---|
| 149 | @cindex M68HC11 addressing modes
|
|---|
| 150 | @cindex addressing modes, M68HC11
|
|---|
| 151 | The following addressing modes are understood for 68HC11 and 68HC12:
|
|---|
| 152 | @table @dfn
|
|---|
| 153 | @item Immediate
|
|---|
| 154 | @samp{#@var{number}}
|
|---|
| 155 |
|
|---|
| 156 | @item Address Register
|
|---|
| 157 | @samp{@var{number},X}, @samp{@var{number},Y}
|
|---|
| 158 |
|
|---|
| 159 | The @var{number} may be omitted in which case 0 is assumed.
|
|---|
| 160 |
|
|---|
| 161 | @item Direct Addressing mode
|
|---|
| 162 | @samp{*@var{symbol}}, or @samp{*@var{digits}}
|
|---|
| 163 |
|
|---|
| 164 | @item Absolute
|
|---|
| 165 | @samp{@var{symbol}}, or @samp{@var{digits}}
|
|---|
| 166 | @end table
|
|---|
| 167 |
|
|---|
| 168 | The M68HC12 has other more complex addressing modes. All of them
|
|---|
| 169 | are supported and they are represented below:
|
|---|
| 170 |
|
|---|
| 171 | @table @dfn
|
|---|
| 172 | @item Constant Offset Indexed Addressing Mode
|
|---|
| 173 | @samp{@var{number},@var{reg}}
|
|---|
| 174 |
|
|---|
| 175 | The @var{number} may be omitted in which case 0 is assumed.
|
|---|
| 176 | The register can be either @samp{X}, @samp{Y}, @samp{SP} or
|
|---|
| 177 | @samp{PC}. The assembler will use the smaller post-byte definition
|
|---|
| 178 | according to the constant value (5-bit constant offset, 9-bit constant
|
|---|
| 179 | offset or 16-bit constant offset). If the constant is not known by
|
|---|
| 180 | the assembler it will use the 16-bit constant offset post-byte and the value
|
|---|
| 181 | will be resolved at link time.
|
|---|
| 182 |
|
|---|
| 183 | @item Offset Indexed Indirect
|
|---|
| 184 | @samp{[@var{number},@var{reg}]}
|
|---|
| 185 |
|
|---|
| 186 | The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
|
|---|
| 187 |
|
|---|
| 188 | @item Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement
|
|---|
| 189 | @samp{@var{number},-@var{reg}}
|
|---|
| 190 | @samp{@var{number},+@var{reg}}
|
|---|
| 191 | @samp{@var{number},@var{reg}-}
|
|---|
| 192 | @samp{@var{number},@var{reg}+}
|
|---|
| 193 |
|
|---|
| 194 | The number must be in the range @samp{-8}..@samp{+8} and must not be 0.
|
|---|
| 195 | The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
|
|---|
| 196 |
|
|---|
| 197 | @item Accumulator Offset
|
|---|
| 198 | @samp{@var{acc},@var{reg}}
|
|---|
| 199 |
|
|---|
| 200 | The accumulator register can be either @samp{A}, @samp{B} or @samp{D}.
|
|---|
| 201 | The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
|
|---|
| 202 |
|
|---|
| 203 | @item Accumulator D offset indexed-indirect
|
|---|
| 204 | @samp{[D,@var{reg}]}
|
|---|
| 205 |
|
|---|
| 206 | The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}.
|
|---|
| 207 |
|
|---|
| 208 | @end table
|
|---|
| 209 |
|
|---|
| 210 | For example:
|
|---|
| 211 |
|
|---|
| 212 | @smallexample
|
|---|
| 213 | ldab 1024,sp
|
|---|
| 214 | ldd [10,x]
|
|---|
| 215 | orab 3,+x
|
|---|
| 216 | stab -2,y-
|
|---|
| 217 | ldx a,pc
|
|---|
| 218 | sty [d,sp]
|
|---|
| 219 | @end smallexample
|
|---|
| 220 |
|
|---|
| 221 |
|
|---|
| 222 | @node M68HC11-Modifiers
|
|---|
| 223 | @section Symbolic Operand Modifiers
|
|---|
| 224 |
|
|---|
| 225 | @cindex M68HC11 modifiers
|
|---|
| 226 | @cindex syntax, M68HC11
|
|---|
| 227 |
|
|---|
| 228 | The assembler supports several modifiers when using symbol addresses
|
|---|
| 229 | in 68HC11 and 68HC12 instruction operands. The general syntax is
|
|---|
| 230 | the following:
|
|---|
| 231 |
|
|---|
| 232 | @smallexample
|
|---|
| 233 | %modifier(symbol)
|
|---|
| 234 | @end smallexample
|
|---|
| 235 |
|
|---|
| 236 | @table @code
|
|---|
| 237 | @cindex symbol modifiers
|
|---|
| 238 | @item %addr
|
|---|
| 239 | This modifier indicates to the assembler and linker to use
|
|---|
| 240 | the 16-bit physical address corresponding to the symbol. This is intended
|
|---|
| 241 | to be used on memory window systems to map a symbol in the memory bank window.
|
|---|
| 242 | If the symbol is in a memory expansion part, the physical address
|
|---|
| 243 | corresponds to the symbol address within the memory bank window.
|
|---|
| 244 | If the symbol is not in a memory expansion part, this is the symbol address
|
|---|
| 245 | (using or not using the %addr modifier has no effect in that case).
|
|---|
| 246 |
|
|---|
| 247 | @item %page
|
|---|
| 248 | This modifier indicates to use the memory page number corresponding
|
|---|
| 249 | to the symbol. If the symbol is in a memory expansion part, its page
|
|---|
| 250 | number is computed by the linker as a number used to map the page containing
|
|---|
| 251 | the symbol in the memory bank window. If the symbol is not in a memory
|
|---|
| 252 | expansion part, the page number is 0.
|
|---|
| 253 |
|
|---|
| 254 | @item %hi
|
|---|
| 255 | This modifier indicates to use the 8-bit high part of the physical
|
|---|
| 256 | address of the symbol.
|
|---|
| 257 |
|
|---|
| 258 | @item %lo
|
|---|
| 259 | This modifier indicates to use the 8-bit low part of the physical
|
|---|
| 260 | address of the symbol.
|
|---|
| 261 |
|
|---|
| 262 | @end table
|
|---|
| 263 |
|
|---|
| 264 | For example a 68HC12 call to a function @samp{foo_example} stored in memory
|
|---|
| 265 | expansion part could be written as follows:
|
|---|
| 266 |
|
|---|
| 267 | @smallexample
|
|---|
| 268 | call %addr(foo_example),%page(foo_example)
|
|---|
| 269 | @end smallexample
|
|---|
| 270 |
|
|---|
| 271 | and this is equivalent to
|
|---|
| 272 |
|
|---|
| 273 | @smallexample
|
|---|
| 274 | call foo_example
|
|---|
| 275 | @end smallexample
|
|---|
| 276 |
|
|---|
| 277 | And for 68HC11 it could be written as follows:
|
|---|
| 278 |
|
|---|
| 279 | @smallexample
|
|---|
| 280 | ldab #%page(foo_example)
|
|---|
| 281 | stab _page_switch
|
|---|
| 282 | jsr %addr(foo_example)
|
|---|
| 283 | @end smallexample
|
|---|
| 284 |
|
|---|
| 285 | @node M68HC11-Directives
|
|---|
| 286 | @section Assembler Directives
|
|---|
| 287 |
|
|---|
| 288 | @cindex assembler directives, M68HC11
|
|---|
| 289 | @cindex assembler directives, M68HC12
|
|---|
| 290 | @cindex M68HC11 assembler directives
|
|---|
| 291 | @cindex M68HC12 assembler directives
|
|---|
| 292 |
|
|---|
| 293 | The 68HC11 and 68HC12 version of @code{@value{AS}} have the following
|
|---|
| 294 | specific assembler directives:
|
|---|
| 295 |
|
|---|
| 296 | @table @code
|
|---|
| 297 | @item .relax
|
|---|
| 298 | @cindex assembler directive .relax, M68HC11
|
|---|
| 299 | @cindex M68HC11 assembler directive .relax
|
|---|
| 300 | The relax directive is used by the @samp{GNU Compiler} to emit a specific
|
|---|
| 301 | relocation to mark a group of instructions for linker relaxation.
|
|---|
| 302 | The sequence of instructions within the group must be known to the linker
|
|---|
| 303 | so that relaxation can be performed.
|
|---|
| 304 |
|
|---|
| 305 | @item .mode [mshort|mlong|mshort-double|mlong-double]
|
|---|
| 306 | @cindex assembler directive .mode, M68HC11
|
|---|
| 307 | @cindex M68HC11 assembler directive .mode
|
|---|
| 308 | This directive specifies the ABI. It overrides the @samp{-mshort},
|
|---|
| 309 | @samp{-mlong}, @samp{-mshort-double} and @samp{-mlong-double} options.
|
|---|
| 310 |
|
|---|
| 311 | @item .far @var{symbol}
|
|---|
| 312 | @cindex assembler directive .far, M68HC11
|
|---|
| 313 | @cindex M68HC11 assembler directive .far
|
|---|
| 314 | This directive marks the symbol as a @samp{far} symbol meaning that it
|
|---|
| 315 | uses a @samp{call/rtc} calling convention as opposed to @samp{jsr/rts}.
|
|---|
| 316 | During a final link, the linker will identify references to the @samp{far}
|
|---|
| 317 | symbol and will verify the proper calling convention.
|
|---|
| 318 |
|
|---|
| 319 | @item .interrupt @var{symbol}
|
|---|
| 320 | @cindex assembler directive .interrupt, M68HC11
|
|---|
| 321 | @cindex M68HC11 assembler directive .interrupt
|
|---|
| 322 | This directive marks the symbol as an interrupt entry point.
|
|---|
| 323 | This information is then used by the debugger to correctly unwind the
|
|---|
| 324 | frame across interrupts.
|
|---|
| 325 |
|
|---|
| 326 | @item .xrefb @var{symbol}
|
|---|
| 327 | @cindex assembler directive .xrefb, M68HC11
|
|---|
| 328 | @cindex M68HC11 assembler directive .xrefb
|
|---|
| 329 | This directive is defined for compatibility with the
|
|---|
| 330 | @samp{Specification for Motorola 8 and 16-Bit Assembly Language Input
|
|---|
| 331 | Standard} and is ignored.
|
|---|
| 332 |
|
|---|
| 333 | @end table
|
|---|
| 334 |
|
|---|
| 335 | @node M68HC11-Float
|
|---|
| 336 | @section Floating Point
|
|---|
| 337 |
|
|---|
| 338 | @cindex floating point, M68HC11
|
|---|
| 339 | @cindex M68HC11 floating point
|
|---|
| 340 | Packed decimal (P) format floating literals are not supported.
|
|---|
| 341 | Feel free to add the code!
|
|---|
| 342 |
|
|---|
| 343 | The floating point formats generated by directives are these.
|
|---|
| 344 |
|
|---|
| 345 | @table @code
|
|---|
| 346 | @cindex @code{float} directive, M68HC11
|
|---|
| 347 | @item .float
|
|---|
| 348 | @code{Single} precision floating point constants.
|
|---|
| 349 |
|
|---|
| 350 | @cindex @code{double} directive, M68HC11
|
|---|
| 351 | @item .double
|
|---|
| 352 | @code{Double} precision floating point constants.
|
|---|
| 353 |
|
|---|
| 354 | @cindex @code{extend} directive M68HC11
|
|---|
| 355 | @cindex @code{ldouble} directive M68HC11
|
|---|
| 356 | @item .extend
|
|---|
| 357 | @itemx .ldouble
|
|---|
| 358 | @code{Extended} precision (@code{long double}) floating point constants.
|
|---|
| 359 | @end table
|
|---|
| 360 |
|
|---|
| 361 | @need 2000
|
|---|
| 362 | @node M68HC11-opcodes
|
|---|
| 363 | @section Opcodes
|
|---|
| 364 |
|
|---|
| 365 | @cindex M68HC11 opcodes
|
|---|
| 366 | @cindex opcodes, M68HC11
|
|---|
| 367 | @cindex instruction set, M68HC11
|
|---|
| 368 |
|
|---|
| 369 | @menu
|
|---|
| 370 | * M68HC11-Branch:: Branch Improvement
|
|---|
| 371 | @end menu
|
|---|
| 372 |
|
|---|
| 373 | @node M68HC11-Branch
|
|---|
| 374 | @subsection Branch Improvement
|
|---|
| 375 |
|
|---|
| 376 | @cindex pseudo-opcodes, M68HC11
|
|---|
| 377 | @cindex M68HC11 pseudo-opcodes
|
|---|
| 378 | @cindex branch improvement, M68HC11
|
|---|
| 379 | @cindex M68HC11 branch improvement
|
|---|
| 380 |
|
|---|
| 381 | Certain pseudo opcodes are permitted for branch instructions.
|
|---|
| 382 | They expand to the shortest branch instruction that reach the
|
|---|
| 383 | target. Generally these mnemonics are made by prepending @samp{j} to
|
|---|
| 384 | the start of Motorola mnemonic. These pseudo opcodes are not affected
|
|---|
| 385 | by the @samp{--short-branchs} or @samp{--force-long-branchs} options.
|
|---|
| 386 |
|
|---|
| 387 | The following table summarizes the pseudo-operations.
|
|---|
| 388 |
|
|---|
| 389 | @smallexample
|
|---|
| 390 | Displacement Width
|
|---|
| 391 | +-------------------------------------------------------------+
|
|---|
| 392 | | Options |
|
|---|
| 393 | | --short-branchs --force-long-branchs |
|
|---|
| 394 | +--------------------------+----------------------------------+
|
|---|
| 395 | Op |BYTE WORD | BYTE WORD |
|
|---|
| 396 | +--------------------------+----------------------------------+
|
|---|
| 397 | bsr | bsr <pc-rel> <error> | jsr <abs> |
|
|---|
| 398 | bra | bra <pc-rel> <error> | jmp <abs> |
|
|---|
| 399 | jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> |
|
|---|
| 400 | jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> |
|
|---|
| 401 | bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> |
|
|---|
| 402 | jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> |
|
|---|
| 403 | | jmp <abs> | |
|
|---|
| 404 | +--------------------------+----------------------------------+
|
|---|
| 405 | XX: condition
|
|---|
| 406 | NX: negative of condition XX
|
|---|
| 407 |
|
|---|
| 408 | @end smallexample
|
|---|
| 409 |
|
|---|
| 410 | @table @code
|
|---|
| 411 | @item jbsr
|
|---|
| 412 | @itemx jbra
|
|---|
| 413 | These are the simplest jump pseudo-operations; they always map to one
|
|---|
| 414 | particular machine instruction, depending on the displacement to the
|
|---|
| 415 | branch target.
|
|---|
| 416 |
|
|---|
| 417 | @item jb@var{XX}
|
|---|
| 418 | Here, @samp{jb@var{XX}} stands for an entire family of pseudo-operations,
|
|---|
| 419 | where @var{XX} is a conditional branch or condition-code test. The full
|
|---|
| 420 | list of pseudo-ops in this family is:
|
|---|
| 421 | @smallexample
|
|---|
| 422 | jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo
|
|---|
| 423 | jbcs jbne jblt jble jbls jbvc jbmi
|
|---|
| 424 | @end smallexample
|
|---|
| 425 |
|
|---|
| 426 | For the cases of non-PC relative displacements and long displacements,
|
|---|
| 427 | @code{@value{AS}} issues a longer code fragment in terms of
|
|---|
| 428 | @var{NX}, the opposite condition to @var{XX}. For example, for the
|
|---|
| 429 | non-PC relative case:
|
|---|
| 430 | @smallexample
|
|---|
| 431 | jb@var{XX} foo
|
|---|
| 432 | @end smallexample
|
|---|
| 433 | gives
|
|---|
| 434 | @smallexample
|
|---|
| 435 | b@var{NX}s oof
|
|---|
| 436 | jmp foo
|
|---|
| 437 | oof:
|
|---|
| 438 | @end smallexample
|
|---|
| 439 |
|
|---|
| 440 | @end table
|
|---|
| 441 |
|
|---|
| 442 |
|
|---|