| 1 | This is as.info, produced by makeinfo version 4.3 from as.texinfo. | 
|---|
| 2 |  | 
|---|
| 3 | START-INFO-DIR-ENTRY | 
|---|
| 4 | * As: (as).                     The GNU assembler. | 
|---|
| 5 | * Gas: (as).                    The GNU assembler. | 
|---|
| 6 | END-INFO-DIR-ENTRY | 
|---|
| 7 |  | 
|---|
| 8 | This file documents the GNU Assembler "as". | 
|---|
| 9 |  | 
|---|
| 10 | Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 | 
|---|
| 11 | Free Software Foundation, Inc. | 
|---|
| 12 |  | 
|---|
| 13 | Permission is granted to copy, distribute and/or modify this document | 
|---|
| 14 | under the terms of the GNU Free Documentation License, Version 1.1 or | 
|---|
| 15 | any later version published by the Free Software Foundation; with no | 
|---|
| 16 | Invariant Sections, with no Front-Cover Texts, and with no Back-Cover | 
|---|
| 17 | Texts.  A copy of the license is included in the section entitled "GNU | 
|---|
| 18 | Free Documentation License". | 
|---|
| 19 |  | 
|---|
| 20 |  | 
|---|
| 21 | File: as.info,  Node: callj-i960,  Next: Compare-and-branch-i960,  Up: Opcodes for i960 | 
|---|
| 22 |  | 
|---|
| 23 | `callj' | 
|---|
| 24 | ....... | 
|---|
| 25 |  | 
|---|
| 26 | You can write `callj' to have the assembler or the linker determine | 
|---|
| 27 | the most appropriate form of subroutine call: `call', `bal', or | 
|---|
| 28 | `calls'.  If the assembly source contains enough information--a | 
|---|
| 29 | `.leafproc' or `.sysproc' directive defining the operand--then `as' | 
|---|
| 30 | translates the `callj'; if not, it simply emits the `callj', leaving it | 
|---|
| 31 | for the linker to resolve. | 
|---|
| 32 |  | 
|---|
| 33 |  | 
|---|
| 34 | File: as.info,  Node: Compare-and-branch-i960,  Prev: callj-i960,  Up: Opcodes for i960 | 
|---|
| 35 |  | 
|---|
| 36 | Compare-and-Branch | 
|---|
| 37 | .................. | 
|---|
| 38 |  | 
|---|
| 39 | The 960 architectures provide combined Compare-and-Branch | 
|---|
| 40 | instructions that permit you to store the branch target in the lower 13 | 
|---|
| 41 | bits of the instruction word itself.  However, if you specify a branch | 
|---|
| 42 | target far enough away that its address won't fit in 13 bits, the | 
|---|
| 43 | assembler can either issue an error, or convert your Compare-and-Branch | 
|---|
| 44 | instruction into separate instructions to do the compare and the branch. | 
|---|
| 45 |  | 
|---|
| 46 | Whether `as' gives an error or expands the instruction depends on | 
|---|
| 47 | two choices you can make: whether you use the `-no-relax' option, and | 
|---|
| 48 | whether you use a "Compare and Branch" instruction or a "Compare and | 
|---|
| 49 | Jump" instruction.  The "Jump" instructions are _always_ expanded if | 
|---|
| 50 | necessary; the "Branch" instructions are expanded when necessary | 
|---|
| 51 | _unless_ you specify `-no-relax'--in which case `as' gives an error | 
|---|
| 52 | instead. | 
|---|
| 53 |  | 
|---|
| 54 | These are the Compare-and-Branch instructions, their "Jump" variants, | 
|---|
| 55 | and the instruction pairs they may expand into: | 
|---|
| 56 |  | 
|---|
| 57 | Compare and | 
|---|
| 58 | Branch      Jump       Expanded to | 
|---|
| 59 | ------    ------       ------------ | 
|---|
| 60 | bbc                 chkbit; bno | 
|---|
| 61 | bbs                 chkbit; bo | 
|---|
| 62 | cmpibe    cmpije       cmpi; be | 
|---|
| 63 | cmpibg    cmpijg       cmpi; bg | 
|---|
| 64 | cmpibge   cmpijge       cmpi; bge | 
|---|
| 65 | cmpibl    cmpijl       cmpi; bl | 
|---|
| 66 | cmpible   cmpijle       cmpi; ble | 
|---|
| 67 | cmpibno   cmpijno       cmpi; bno | 
|---|
| 68 | cmpibne   cmpijne       cmpi; bne | 
|---|
| 69 | cmpibo    cmpijo       cmpi; bo | 
|---|
| 70 | cmpobe    cmpoje       cmpo; be | 
|---|
| 71 | cmpobg    cmpojg       cmpo; bg | 
|---|
| 72 | cmpobge   cmpojge       cmpo; bge | 
|---|
| 73 | cmpobl    cmpojl       cmpo; bl | 
|---|
| 74 | cmpoble   cmpojle       cmpo; ble | 
|---|
| 75 | cmpobne   cmpojne       cmpo; bne | 
|---|
| 76 |  | 
|---|
| 77 |  | 
|---|
| 78 | File: as.info,  Node: IP2K-Dependent,  Next: M32R-Dependent,  Prev: i960-Dependent,  Up: Machine Dependencies | 
|---|
| 79 |  | 
|---|
| 80 | IP2K Dependent Features | 
|---|
| 81 | ======================= | 
|---|
| 82 |  | 
|---|
| 83 | * Menu: | 
|---|
| 84 |  | 
|---|
| 85 | * IP2K-Opts::                   IP2K Options | 
|---|
| 86 |  | 
|---|
| 87 |  | 
|---|
| 88 | File: as.info,  Node: IP2K-Opts,  Up: IP2K-Dependent | 
|---|
| 89 |  | 
|---|
| 90 | IP2K Options | 
|---|
| 91 | ------------ | 
|---|
| 92 |  | 
|---|
| 93 | The Ubicom IP2K version of `as' has a few machine dependent options: | 
|---|
| 94 |  | 
|---|
| 95 | `-mip2022ext' | 
|---|
| 96 | `as' can assemble the extended IP2022 instructions, but it will | 
|---|
| 97 | only do so if this is specifically allowed via this command line | 
|---|
| 98 | option. | 
|---|
| 99 |  | 
|---|
| 100 | `-mip2022' | 
|---|
| 101 | This option restores the assembler's default behaviour of not | 
|---|
| 102 | permitting the extended IP2022 instructions to be assembled. | 
|---|
| 103 |  | 
|---|
| 104 |  | 
|---|
| 105 | File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies | 
|---|
| 106 |  | 
|---|
| 107 | M32R Dependent Features | 
|---|
| 108 | ======================= | 
|---|
| 109 |  | 
|---|
| 110 | * Menu: | 
|---|
| 111 |  | 
|---|
| 112 | * M32R-Opts::                   M32R Options | 
|---|
| 113 | * M32R-Warnings::               M32R Warnings | 
|---|
| 114 |  | 
|---|
| 115 |  | 
|---|
| 116 | File: as.info,  Node: M32R-Opts,  Next: M32R-Warnings,  Up: M32R-Dependent | 
|---|
| 117 |  | 
|---|
| 118 | M32R Options | 
|---|
| 119 | ------------ | 
|---|
| 120 |  | 
|---|
| 121 | The Renease M32R version of `as' has a few machine dependent options: | 
|---|
| 122 |  | 
|---|
| 123 | `-m32rx' | 
|---|
| 124 | `as' can assemble code for several different members of the | 
|---|
| 125 | Renesas M32R family.  Normally the default is to assemble code for | 
|---|
| 126 | the M32R microprocessor.  This option may be used to change the | 
|---|
| 127 | default to the M32RX microprocessor, which adds some more | 
|---|
| 128 | instructions to the basic M32R instruction set, and some | 
|---|
| 129 | additional parameters to some of the original instructions. | 
|---|
| 130 |  | 
|---|
| 131 | `-m32r' | 
|---|
| 132 | This option can be used to restore the assembler's default | 
|---|
| 133 | behaviour of assembling for the M32R microprocessor.  This can be | 
|---|
| 134 | useful if the default has been changed by a previous command line | 
|---|
| 135 | option. | 
|---|
| 136 |  | 
|---|
| 137 | `-warn-explicit-parallel-conflicts' | 
|---|
| 138 | Instructs `as' to produce warning messages when questionable | 
|---|
| 139 | parallel instructions are encountered.  This option is enabled by | 
|---|
| 140 | default, but `gcc' disables it when it invokes `as' directly. | 
|---|
| 141 | Questionable instructions are those whoes behaviour would be | 
|---|
| 142 | different if they were executed sequentially.  For example the | 
|---|
| 143 | code fragment `mv r1, r2 || mv r3, r1' produces a different result | 
|---|
| 144 | from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3 | 
|---|
| 145 | and then r2 into r1, whereas the later moves r2 into r1 and r3. | 
|---|
| 146 |  | 
|---|
| 147 | `-Wp' | 
|---|
| 148 | This is a shorter synonym for the | 
|---|
| 149 | _-warn-explicit-parallel-conflicts_ option. | 
|---|
| 150 |  | 
|---|
| 151 | `-no-warn-explicit-parallel-conflicts' | 
|---|
| 152 | Instructs `as' not to produce warning messages when questionable | 
|---|
| 153 | parallel instructions are encountered. | 
|---|
| 154 |  | 
|---|
| 155 | `-Wnp' | 
|---|
| 156 | This is a shorter synonym for the | 
|---|
| 157 | _-no-warn-explicit-parallel-conflicts_ option. | 
|---|
| 158 |  | 
|---|
| 159 |  | 
|---|
| 160 | File: as.info,  Node: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent | 
|---|
| 161 |  | 
|---|
| 162 | M32R Warnings | 
|---|
| 163 | ------------- | 
|---|
| 164 |  | 
|---|
| 165 | There are several warning and error messages that can be produced by | 
|---|
| 166 | `as' which are specific to the M32R: | 
|---|
| 167 |  | 
|---|
| 168 | `output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?' | 
|---|
| 169 | This message is only produced if warnings for explicit parallel | 
|---|
| 170 | conflicts have been enabled.  It indicates that the assembler has | 
|---|
| 171 | encountered a parallel instruction in which the destination | 
|---|
| 172 | register of the left hand instruction is used as an input register | 
|---|
| 173 | in the right hand instruction.  For example in this code fragment | 
|---|
| 174 | `mv r1, r2 || neg r3, r1' register r1 is the destination of the | 
|---|
| 175 | move instruction and the input to the neg instruction. | 
|---|
| 176 |  | 
|---|
| 177 | `output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?' | 
|---|
| 178 | This message is only produced if warnings for explicit parallel | 
|---|
| 179 | conflicts have been enabled.  It indicates that the assembler has | 
|---|
| 180 | encountered a parallel instruction in which the destination | 
|---|
| 181 | register of the right hand instruction is used as an input | 
|---|
| 182 | register in the left hand instruction.  For example in this code | 
|---|
| 183 | fragment `mv r1, r2 || neg r2, r3' register r2 is the destination | 
|---|
| 184 | of the neg instruction and the input to the move instruction. | 
|---|
| 185 |  | 
|---|
| 186 | `instruction `...' is for the M32RX only' | 
|---|
| 187 | This message is produced when the assembler encounters an | 
|---|
| 188 | instruction which is only supported by the M32Rx processor, and | 
|---|
| 189 | the `-m32rx' command line flag has not been specified to allow | 
|---|
| 190 | assembly of such instructions. | 
|---|
| 191 |  | 
|---|
| 192 | `unknown instruction `...'' | 
|---|
| 193 | This message is produced when the assembler encounters an | 
|---|
| 194 | instruction which it doe snot recognise. | 
|---|
| 195 |  | 
|---|
| 196 | `only the NOP instruction can be issued in parallel on the m32r' | 
|---|
| 197 | This message is produced when the assembler encounters a parallel | 
|---|
| 198 | instruction which does not involve a NOP instruction and the | 
|---|
| 199 | `-m32rx' command line flag has not been specified.  Only the M32Rx | 
|---|
| 200 | processor is able to execute two instructions in parallel. | 
|---|
| 201 |  | 
|---|
| 202 | `instruction `...' cannot be executed in parallel.' | 
|---|
| 203 | This message is produced when the assembler encounters a parallel | 
|---|
| 204 | instruction which is made up of one or two instructions which | 
|---|
| 205 | cannot be executed in parallel. | 
|---|
| 206 |  | 
|---|
| 207 | `Instructions share the same execution pipeline' | 
|---|
| 208 | This message is produced when the assembler encounters a parallel | 
|---|
| 209 | instruction whoes components both use the same execution pipeline. | 
|---|
| 210 |  | 
|---|
| 211 | `Instructions write to the same destination register.' | 
|---|
| 212 | This message is produced when the assembler encounters a parallel | 
|---|
| 213 | instruction where both components attempt to modify the same | 
|---|
| 214 | register.  For example these code fragments will produce this | 
|---|
| 215 | message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2, | 
|---|
| 216 | @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx | 
|---|
| 217 | r3, r4' (Both write to the condition bit) | 
|---|
| 218 |  | 
|---|
| 219 |  | 
|---|
| 220 | File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies | 
|---|
| 221 |  | 
|---|
| 222 | M680x0 Dependent Features | 
|---|
| 223 | ========================= | 
|---|
| 224 |  | 
|---|
| 225 | * Menu: | 
|---|
| 226 |  | 
|---|
| 227 | * M68K-Opts::                   M680x0 Options | 
|---|
| 228 | * M68K-Syntax::                 Syntax | 
|---|
| 229 | * M68K-Moto-Syntax::            Motorola Syntax | 
|---|
| 230 | * M68K-Float::                  Floating Point | 
|---|
| 231 | * M68K-Directives::             680x0 Machine Directives | 
|---|
| 232 | * M68K-opcodes::                Opcodes | 
|---|
| 233 |  | 
|---|
| 234 |  | 
|---|
| 235 | File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent | 
|---|
| 236 |  | 
|---|
| 237 | M680x0 Options | 
|---|
| 238 | -------------- | 
|---|
| 239 |  | 
|---|
| 240 | The Motorola 680x0 version of `as' has a few machine dependent | 
|---|
| 241 | options: | 
|---|
| 242 |  | 
|---|
| 243 | `-l' | 
|---|
| 244 | You can use the `-l' option to shorten the size of references to | 
|---|
| 245 | undefined symbols.  If you do not use the `-l' option, references | 
|---|
| 246 | to undefined symbols are wide enough for a full `long' (32 bits). | 
|---|
| 247 | (Since `as' cannot know where these symbols end up, `as' can only | 
|---|
| 248 | allocate space for the linker to fill in later.  Since `as' does | 
|---|
| 249 | not know how far away these symbols are, it allocates as much | 
|---|
| 250 | space as it can.)  If you use this option, the references are only | 
|---|
| 251 | one word wide (16 bits).  This may be useful if you want the | 
|---|
| 252 | object file to be as small as possible, and you know that the | 
|---|
| 253 | relevant symbols are always less than 17 bits away. | 
|---|
| 254 |  | 
|---|
| 255 | `--register-prefix-optional' | 
|---|
| 256 | For some configurations, especially those where the compiler | 
|---|
| 257 | normally does not prepend an underscore to the names of user | 
|---|
| 258 | variables, the assembler requires a `%' before any use of a | 
|---|
| 259 | register name.  This is intended to let the assembler distinguish | 
|---|
| 260 | between C variables and functions named `a0' through `a7', and so | 
|---|
| 261 | on.  The `%' is always accepted, but is not required for certain | 
|---|
| 262 | configurations, notably `sun3'.  The `--register-prefix-optional' | 
|---|
| 263 | option may be used to permit omitting the `%' even for | 
|---|
| 264 | configurations for which it is normally required.  If this is | 
|---|
| 265 | done, it will generally be impossible to refer to C variables and | 
|---|
| 266 | functions with the same names as register names. | 
|---|
| 267 |  | 
|---|
| 268 | `--bitwise-or' | 
|---|
| 269 | Normally the character `|' is treated as a comment character, which | 
|---|
| 270 | means that it can not be used in expressions.  The `--bitwise-or' | 
|---|
| 271 | option turns `|' into a normal character.  In this mode, you must | 
|---|
| 272 | either use C style comments, or start comments with a `#' character | 
|---|
| 273 | at the beginning of a line. | 
|---|
| 274 |  | 
|---|
| 275 | `--base-size-default-16  --base-size-default-32' | 
|---|
| 276 | If you use an addressing mode with a base register without | 
|---|
| 277 | specifying the size, `as' will normally use the full 32 bit value. | 
|---|
| 278 | For example, the addressing mode `%a0@(%d0)' is equivalent to | 
|---|
| 279 | `%a0@(%d0:l)'.  You may use the `--base-size-default-16' option to | 
|---|
| 280 | tell `as' to default to using the 16 bit value.  In this case, | 
|---|
| 281 | `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'.  You may use the | 
|---|
| 282 | `--base-size-default-32' option to restore the default behaviour. | 
|---|
| 283 |  | 
|---|
| 284 | `--disp-size-default-16  --disp-size-default-32' | 
|---|
| 285 | If you use an addressing mode with a displacement, and the value | 
|---|
| 286 | of the displacement is not known, `as' will normally assume that | 
|---|
| 287 | the value is 32 bits.  For example, if the symbol `disp' has not | 
|---|
| 288 | been defined, `as' will assemble the addressing mode | 
|---|
| 289 | `%a0@(disp,%d0)' as though `disp' is a 32 bit value.  You may use | 
|---|
| 290 | the `--disp-size-default-16' option to tell `as' to instead assume | 
|---|
| 291 | that the displacement is 16 bits.  In this case, `as' will | 
|---|
| 292 | assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value.  You | 
|---|
| 293 | may use the `--disp-size-default-32' option to restore the default | 
|---|
| 294 | behaviour. | 
|---|
| 295 |  | 
|---|
| 296 | `--pcrel' | 
|---|
| 297 | Always keep branches PC-relative.  In the M680x0 architecture all | 
|---|
| 298 | branches are defined as PC-relative.  However, on some processors | 
|---|
| 299 | they are limited to word displacements maximum.  When `as' needs a | 
|---|
| 300 | long branch that is not available, it normally emits an absolute | 
|---|
| 301 | jump instead.  This option disables this substitution.  When this | 
|---|
| 302 | option is given and no long branches are available, only word | 
|---|
| 303 | branches will be emitted.  An error message will be generated if a | 
|---|
| 304 | word branch cannot reach its target.  This option has no effect on | 
|---|
| 305 | 68020 and other processors that have long branches.  *note Branch | 
|---|
| 306 | Improvement: M68K-Branch.. | 
|---|
| 307 |  | 
|---|
| 308 | `-m68000' | 
|---|
| 309 | `as' can assemble code for several different members of the | 
|---|
| 310 | Motorola 680x0 family.  The default depends upon how `as' was | 
|---|
| 311 | configured when it was built; normally, the default is to assemble | 
|---|
| 312 | code for the 68020 microprocessor.  The following options may be | 
|---|
| 313 | used to change the default.  These options control which | 
|---|
| 314 | instructions and addressing modes are permitted.  The members of | 
|---|
| 315 | the 680x0 family are very similar.  For detailed information about | 
|---|
| 316 | the differences, see the Motorola manuals. | 
|---|
| 317 |  | 
|---|
| 318 | `-m68000' | 
|---|
| 319 | `-m68ec000' | 
|---|
| 320 | `-m68hc000' | 
|---|
| 321 | `-m68hc001' | 
|---|
| 322 | `-m68008' | 
|---|
| 323 | `-m68302' | 
|---|
| 324 | `-m68306' | 
|---|
| 325 | `-m68307' | 
|---|
| 326 | `-m68322' | 
|---|
| 327 | `-m68356' | 
|---|
| 328 | Assemble for the 68000. `-m68008', `-m68302', and so on are | 
|---|
| 329 | synonyms for `-m68000', since the chips are the same from the | 
|---|
| 330 | point of view of the assembler. | 
|---|
| 331 |  | 
|---|
| 332 | `-m68010' | 
|---|
| 333 | Assemble for the 68010. | 
|---|
| 334 |  | 
|---|
| 335 | `-m68020' | 
|---|
| 336 | `-m68ec020' | 
|---|
| 337 | Assemble for the 68020.  This is normally the default. | 
|---|
| 338 |  | 
|---|
| 339 | `-m68030' | 
|---|
| 340 | `-m68ec030' | 
|---|
| 341 | Assemble for the 68030. | 
|---|
| 342 |  | 
|---|
| 343 | `-m68040' | 
|---|
| 344 | `-m68ec040' | 
|---|
| 345 | Assemble for the 68040. | 
|---|
| 346 |  | 
|---|
| 347 | `-m68060' | 
|---|
| 348 | `-m68ec060' | 
|---|
| 349 | Assemble for the 68060. | 
|---|
| 350 |  | 
|---|
| 351 | `-mcpu32' | 
|---|
| 352 | `-m68330' | 
|---|
| 353 | `-m68331' | 
|---|
| 354 | `-m68332' | 
|---|
| 355 | `-m68333' | 
|---|
| 356 | `-m68334' | 
|---|
| 357 | `-m68336' | 
|---|
| 358 | `-m68340' | 
|---|
| 359 | `-m68341' | 
|---|
| 360 | `-m68349' | 
|---|
| 361 | `-m68360' | 
|---|
| 362 | Assemble for the CPU32 family of chips. | 
|---|
| 363 |  | 
|---|
| 364 | `-m5200' | 
|---|
| 365 | Assemble for the ColdFire family of chips. | 
|---|
| 366 |  | 
|---|
| 367 | `-m68881' | 
|---|
| 368 | `-m68882' | 
|---|
| 369 | Assemble 68881 floating point instructions.  This is the | 
|---|
| 370 | default for the 68020, 68030, and the CPU32.  The 68040 and | 
|---|
| 371 | 68060 always support floating point instructions. | 
|---|
| 372 |  | 
|---|
| 373 | `-mno-68881' | 
|---|
| 374 | Do not assemble 68881 floating point instructions.  This is | 
|---|
| 375 | the default for 68000 and the 68010.  The 68040 and 68060 | 
|---|
| 376 | always support floating point instructions, even if this | 
|---|
| 377 | option is used. | 
|---|
| 378 |  | 
|---|
| 379 | `-m68851' | 
|---|
| 380 | Assemble 68851 MMU instructions.  This is the default for the | 
|---|
| 381 | 68020, 68030, and 68060.  The 68040 accepts a somewhat | 
|---|
| 382 | different set of MMU instructions; `-m68851' and `-m68040' | 
|---|
| 383 | should not be used together. | 
|---|
| 384 |  | 
|---|
| 385 | `-mno-68851' | 
|---|
| 386 | Do not assemble 68851 MMU instructions.  This is the default | 
|---|
| 387 | for the 68000, 68010, and the CPU32.  The 68040 accepts a | 
|---|
| 388 | somewhat different set of MMU instructions. | 
|---|
| 389 |  | 
|---|
| 390 |  | 
|---|
| 391 | File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent | 
|---|
| 392 |  | 
|---|
| 393 | Syntax | 
|---|
| 394 | ------ | 
|---|
| 395 |  | 
|---|
| 396 | This syntax for the Motorola 680x0 was developed at MIT. | 
|---|
| 397 |  | 
|---|
| 398 | The 680x0 version of `as' uses instructions names and syntax | 
|---|
| 399 | compatible with the Sun assembler.  Intervening periods are ignored; | 
|---|
| 400 | for example, `movl' is equivalent to `mov.l'. | 
|---|
| 401 |  | 
|---|
| 402 | In the following table APC stands for any of the address registers | 
|---|
| 403 | (`%a0' through `%a7'), the program counter (`%pc'), the zero-address | 
|---|
| 404 | relative to the program counter (`%zpc'), a suppressed address register | 
|---|
| 405 | (`%za0' through `%za7'), or it may be omitted entirely.  The use of | 
|---|
| 406 | SIZE means one of `w' or `l', and it may be omitted, along with the | 
|---|
| 407 | leading colon, unless a scale is also specified.  The use of SCALE | 
|---|
| 408 | means one of `1', `2', `4', or `8', and it may always be omitted along | 
|---|
| 409 | with the leading colon. | 
|---|
| 410 |  | 
|---|
| 411 | The following addressing modes are understood: | 
|---|
| 412 | "Immediate" | 
|---|
| 413 | `#NUMBER' | 
|---|
| 414 |  | 
|---|
| 415 | "Data Register" | 
|---|
| 416 | `%d0' through `%d7' | 
|---|
| 417 |  | 
|---|
| 418 | "Address Register" | 
|---|
| 419 | `%a0' through `%a7' | 
|---|
| 420 | `%a7' is also known as `%sp', i.e. the Stack Pointer.  `%a6' is | 
|---|
| 421 | also known as `%fp', the Frame Pointer. | 
|---|
| 422 |  | 
|---|
| 423 | "Address Register Indirect" | 
|---|
| 424 | `%a0@' through `%a7@' | 
|---|
| 425 |  | 
|---|
| 426 | "Address Register Postincrement" | 
|---|
| 427 | `%a0@+' through `%a7@+' | 
|---|
| 428 |  | 
|---|
| 429 | "Address Register Predecrement" | 
|---|
| 430 | `%a0@-' through `%a7@-' | 
|---|
| 431 |  | 
|---|
| 432 | "Indirect Plus Offset" | 
|---|
| 433 | `APC@(NUMBER)' | 
|---|
| 434 |  | 
|---|
| 435 | "Index" | 
|---|
| 436 | `APC@(NUMBER,REGISTER:SIZE:SCALE)' | 
|---|
| 437 |  | 
|---|
| 438 | The NUMBER may be omitted. | 
|---|
| 439 |  | 
|---|
| 440 | "Postindex" | 
|---|
| 441 | `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)' | 
|---|
| 442 |  | 
|---|
| 443 | The ONUMBER or the REGISTER, but not both, may be omitted. | 
|---|
| 444 |  | 
|---|
| 445 | "Preindex" | 
|---|
| 446 | `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)' | 
|---|
| 447 |  | 
|---|
| 448 | The NUMBER may be omitted.  Omitting the REGISTER produces the | 
|---|
| 449 | Postindex addressing mode. | 
|---|
| 450 |  | 
|---|
| 451 | "Absolute" | 
|---|
| 452 | `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'. | 
|---|
| 453 |  | 
|---|
| 454 |  | 
|---|
| 455 | File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent | 
|---|
| 456 |  | 
|---|
| 457 | Motorola Syntax | 
|---|
| 458 | --------------- | 
|---|
| 459 |  | 
|---|
| 460 | The standard Motorola syntax for this chip differs from the syntax | 
|---|
| 461 | already discussed (*note Syntax: M68K-Syntax.).  `as' can accept | 
|---|
| 462 | Motorola syntax for operands, even if MIT syntax is used for other | 
|---|
| 463 | operands in the same instruction.  The two kinds of syntax are fully | 
|---|
| 464 | compatible. | 
|---|
| 465 |  | 
|---|
| 466 | In the following table APC stands for any of the address registers | 
|---|
| 467 | (`%a0' through `%a7'), the program counter (`%pc'), the zero-address | 
|---|
| 468 | relative to the program counter (`%zpc'), or a suppressed address | 
|---|
| 469 | register (`%za0' through `%za7').  The use of SIZE means one of `w' or | 
|---|
| 470 | `l', and it may always be omitted along with the leading dot.  The use | 
|---|
| 471 | of SCALE means one of `1', `2', `4', or `8', and it may always be | 
|---|
| 472 | omitted along with the leading asterisk. | 
|---|
| 473 |  | 
|---|
| 474 | The following additional addressing modes are understood: | 
|---|
| 475 |  | 
|---|
| 476 | "Address Register Indirect" | 
|---|
| 477 | `(%a0)' through `(%a7)' | 
|---|
| 478 | `%a7' is also known as `%sp', i.e. the Stack Pointer.  `%a6' is | 
|---|
| 479 | also known as `%fp', the Frame Pointer. | 
|---|
| 480 |  | 
|---|
| 481 | "Address Register Postincrement" | 
|---|
| 482 | `(%a0)+' through `(%a7)+' | 
|---|
| 483 |  | 
|---|
| 484 | "Address Register Predecrement" | 
|---|
| 485 | `-(%a0)' through `-(%a7)' | 
|---|
| 486 |  | 
|---|
| 487 | "Indirect Plus Offset" | 
|---|
| 488 | `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'. | 
|---|
| 489 |  | 
|---|
| 490 | The NUMBER may also appear within the parentheses, as in | 
|---|
| 491 | `(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted | 
|---|
| 492 | (with an address register, omitting the NUMBER produces Address | 
|---|
| 493 | Register Indirect mode). | 
|---|
| 494 |  | 
|---|
| 495 | "Index" | 
|---|
| 496 | `NUMBER(APC,REGISTER.SIZE*SCALE)' | 
|---|
| 497 |  | 
|---|
| 498 | The NUMBER may be omitted, or it may appear within the | 
|---|
| 499 | parentheses.  The APC may be omitted.  The REGISTER and the APC | 
|---|
| 500 | may appear in either order.  If both APC and REGISTER are address | 
|---|
| 501 | registers, and the SIZE and SCALE are omitted, then the first | 
|---|
| 502 | register is taken as the base register, and the second as the | 
|---|
| 503 | index register. | 
|---|
| 504 |  | 
|---|
| 505 | "Postindex" | 
|---|
| 506 | `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)' | 
|---|
| 507 |  | 
|---|
| 508 | The ONUMBER, or the REGISTER, or both, may be omitted.  Either the | 
|---|
| 509 | NUMBER or the APC may be omitted, but not both. | 
|---|
| 510 |  | 
|---|
| 511 | "Preindex" | 
|---|
| 512 | `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)' | 
|---|
| 513 |  | 
|---|
| 514 | The NUMBER, or the APC, or the REGISTER, or any two of them, may | 
|---|
| 515 | be omitted.  The ONUMBER may be omitted.  The REGISTER and the APC | 
|---|
| 516 | may appear in either order.  If both APC and REGISTER are address | 
|---|
| 517 | registers, and the SIZE and SCALE are omitted, then the first | 
|---|
| 518 | register is taken as the base register, and the second as the | 
|---|
| 519 | index register. | 
|---|
| 520 |  | 
|---|
| 521 |  | 
|---|
| 522 | File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent | 
|---|
| 523 |  | 
|---|
| 524 | Floating Point | 
|---|
| 525 | -------------- | 
|---|
| 526 |  | 
|---|
| 527 | Packed decimal (P) format floating literals are not supported.  Feel | 
|---|
| 528 | free to add the code! | 
|---|
| 529 |  | 
|---|
| 530 | The floating point formats generated by directives are these. | 
|---|
| 531 |  | 
|---|
| 532 | `.float' | 
|---|
| 533 | `Single' precision floating point constants. | 
|---|
| 534 |  | 
|---|
| 535 | `.double' | 
|---|
| 536 | `Double' precision floating point constants. | 
|---|
| 537 |  | 
|---|
| 538 | `.extend' | 
|---|
| 539 | `.ldouble' | 
|---|
| 540 | `Extended' precision (`long double') floating point constants. | 
|---|
| 541 |  | 
|---|
| 542 |  | 
|---|
| 543 | File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent | 
|---|
| 544 |  | 
|---|
| 545 | 680x0 Machine Directives | 
|---|
| 546 | ------------------------ | 
|---|
| 547 |  | 
|---|
| 548 | In order to be compatible with the Sun assembler the 680x0 assembler | 
|---|
| 549 | understands the following directives. | 
|---|
| 550 |  | 
|---|
| 551 | `.data1' | 
|---|
| 552 | This directive is identical to a `.data 1' directive. | 
|---|
| 553 |  | 
|---|
| 554 | `.data2' | 
|---|
| 555 | This directive is identical to a `.data 2' directive. | 
|---|
| 556 |  | 
|---|
| 557 | `.even' | 
|---|
| 558 | This directive is a special case of the `.align' directive; it | 
|---|
| 559 | aligns the output to an even byte boundary. | 
|---|
| 560 |  | 
|---|
| 561 | `.skip' | 
|---|
| 562 | This directive is identical to a `.space' directive. | 
|---|
| 563 |  | 
|---|
| 564 |  | 
|---|
| 565 | File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent | 
|---|
| 566 |  | 
|---|
| 567 | Opcodes | 
|---|
| 568 | ------- | 
|---|
| 569 |  | 
|---|
| 570 | * Menu: | 
|---|
| 571 |  | 
|---|
| 572 | * M68K-Branch::                 Branch Improvement | 
|---|
| 573 | * M68K-Chars::                  Special Characters | 
|---|
| 574 |  | 
|---|
| 575 |  | 
|---|
| 576 | File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes | 
|---|
| 577 |  | 
|---|
| 578 | Branch Improvement | 
|---|
| 579 | .................. | 
|---|
| 580 |  | 
|---|
| 581 | Certain pseudo opcodes are permitted for branch instructions.  They | 
|---|
| 582 | expand to the shortest branch instruction that reach the target. | 
|---|
| 583 | Generally these mnemonics are made by substituting `j' for `b' at the | 
|---|
| 584 | start of a Motorola mnemonic. | 
|---|
| 585 |  | 
|---|
| 586 | The following table summarizes the pseudo-operations.  A `*' flags | 
|---|
| 587 | cases that are more fully described after the table: | 
|---|
| 588 |  | 
|---|
| 589 | Displacement | 
|---|
| 590 | +------------------------------------------------------------ | 
|---|
| 591 | |                68020           68000/10, not PC-relative OK | 
|---|
| 592 | Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    ** | 
|---|
| 593 | +------------------------------------------------------------ | 
|---|
| 594 | jbsr |bsrs    bsrw    bsrl            jsr | 
|---|
| 595 | jra |bras    braw    bral            jmp | 
|---|
| 596 | *     jXX |bXXs    bXXw    bXXl            bNXs;jmp | 
|---|
| 597 | *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp | 
|---|
| 598 | fjXX | N/A    fbXXw   fbXXl            N/A | 
|---|
| 599 |  | 
|---|
| 600 | XX: condition | 
|---|
| 601 | NX: negative of condition XX | 
|---|
| 602 | `*'--see full description below | 
|---|
| 603 | `**'--this expansion mode is disallowed by `--pcrel' | 
|---|
| 604 | `jbsr' | 
|---|
| 605 | `jra' | 
|---|
| 606 | These are the simplest jump pseudo-operations; they always map to | 
|---|
| 607 | one particular machine instruction, depending on the displacement | 
|---|
| 608 | to the branch target.  This instruction will be a byte or word | 
|---|
| 609 | branch is that is sufficient.  Otherwise, a long branch will be | 
|---|
| 610 | emitted if available.  If no long branches are available and the | 
|---|
| 611 | `--pcrel' option is not given, an absolute long jump will be | 
|---|
| 612 | emitted instead.  If no long branches are available, the `--pcrel' | 
|---|
| 613 | option is given, and a word branch cannot reach the target, an | 
|---|
| 614 | error message is generated. | 
|---|
| 615 |  | 
|---|
| 616 | In addition to standard branch operands, `as' allows these | 
|---|
| 617 | pseudo-operations to have all operands that are allowed for jsr | 
|---|
| 618 | and jmp, substituting these instructions if the operand given is | 
|---|
| 619 | not valid for a branch instruction. | 
|---|
| 620 |  | 
|---|
| 621 | `jXX' | 
|---|
| 622 | Here, `jXX' stands for an entire family of pseudo-operations, | 
|---|
| 623 | where XX is a conditional branch or condition-code test.  The full | 
|---|
| 624 | list of pseudo-ops in this family is: | 
|---|
| 625 | jhi   jls   jcc   jcs   jne   jeq   jvc | 
|---|
| 626 | jvs   jpl   jmi   jge   jlt   jgt   jle | 
|---|
| 627 |  | 
|---|
| 628 | Usually, each of these pseudo-operations expands to a single branch | 
|---|
| 629 | instruction.  However, if a word branch is not sufficient, no long | 
|---|
| 630 | branches are available, and the `--pcrel' option is not given, `as' | 
|---|
| 631 | issues a longer code fragment in terms of NX, the opposite | 
|---|
| 632 | condition to XX.  For example, under these conditions: | 
|---|
| 633 | jXX foo | 
|---|
| 634 | gives | 
|---|
| 635 | bNXs oof | 
|---|
| 636 | jmp foo | 
|---|
| 637 | oof: | 
|---|
| 638 |  | 
|---|
| 639 | `dbXX' | 
|---|
| 640 | The full family of pseudo-operations covered here is | 
|---|
| 641 | dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc | 
|---|
| 642 | dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble | 
|---|
| 643 | dbf    dbra   dbt | 
|---|
| 644 |  | 
|---|
| 645 | Motorola `dbXX' instructions allow word displacements only.  When | 
|---|
| 646 | a word displacement is sufficient, each of these pseudo-operations | 
|---|
| 647 | expands to the corresponding Motorola instruction.  When a word | 
|---|
| 648 | displacement is not sufficient and long branches are available, | 
|---|
| 649 | when the source reads `dbXX foo', `as' emits | 
|---|
| 650 | dbXX oo1 | 
|---|
| 651 | bras oo2 | 
|---|
| 652 | oo1:bral foo | 
|---|
| 653 | oo2: | 
|---|
| 654 |  | 
|---|
| 655 | If, however, long branches are not available and the `--pcrel' | 
|---|
| 656 | option is not given, `as' emits | 
|---|
| 657 | dbXX oo1 | 
|---|
| 658 | bras oo2 | 
|---|
| 659 | oo1:jmp foo | 
|---|
| 660 | oo2: | 
|---|
| 661 |  | 
|---|
| 662 | `fjXX' | 
|---|
| 663 | This family includes | 
|---|
| 664 | fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf | 
|---|
| 665 | fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt | 
|---|
| 666 | fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt | 
|---|
| 667 | fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge | 
|---|
| 668 | fjugt  fjule  fjult  fjun | 
|---|
| 669 |  | 
|---|
| 670 | Each of these pseudo-operations always expands to a single Motorola | 
|---|
| 671 | coprocessor branch instruction, word or long.  All Motorola | 
|---|
| 672 | coprocessor branch instructions allow both word and long | 
|---|
| 673 | displacements. | 
|---|
| 674 |  | 
|---|
| 675 |  | 
|---|
| 676 | File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes | 
|---|
| 677 |  | 
|---|
| 678 | Special Characters | 
|---|
| 679 | .................. | 
|---|
| 680 |  | 
|---|
| 681 | The immediate character is `#' for Sun compatibility.  The line-comment | 
|---|
| 682 | character is `|' (unless the `--bitwise-or' option is used).  If a `#' | 
|---|
| 683 | appears at the beginning of a line, it is treated as a comment unless | 
|---|
| 684 | it looks like `# line file', in which case it is treated normally. | 
|---|
| 685 |  | 
|---|
| 686 |  | 
|---|
| 687 | File: as.info,  Node: M68HC11-Dependent,  Next: M88K-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies | 
|---|
| 688 |  | 
|---|
| 689 | M68HC11 and M68HC12 Dependent Features | 
|---|
| 690 | ====================================== | 
|---|
| 691 |  | 
|---|
| 692 | * Menu: | 
|---|
| 693 |  | 
|---|
| 694 | * M68HC11-Opts::                   M68HC11 and M68HC12 Options | 
|---|
| 695 | * M68HC11-Syntax::                 Syntax | 
|---|
| 696 | * M68HC11-Modifiers::              Symbolic Operand Modifiers | 
|---|
| 697 | * M68HC11-Directives::             Assembler Directives | 
|---|
| 698 | * M68HC11-Float::                  Floating Point | 
|---|
| 699 | * M68HC11-opcodes::                Opcodes | 
|---|
| 700 |  | 
|---|
| 701 |  | 
|---|
| 702 | File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent | 
|---|
| 703 |  | 
|---|
| 704 | M68HC11 and M68HC12 Options | 
|---|
| 705 | --------------------------- | 
|---|
| 706 |  | 
|---|
| 707 | The Motorola 68HC11 and 68HC12 version of `as' have a few machine | 
|---|
| 708 | dependent options. | 
|---|
| 709 |  | 
|---|
| 710 | `-m68hc11' | 
|---|
| 711 | This option switches the assembler in the M68HC11 mode. In this | 
|---|
| 712 | mode, the assembler only accepts 68HC11 operands and mnemonics. It | 
|---|
| 713 | produces code for the 68HC11. | 
|---|
| 714 |  | 
|---|
| 715 | `-m68hc12' | 
|---|
| 716 | This option switches the assembler in the M68HC12 mode. In this | 
|---|
| 717 | mode, the assembler also accepts 68HC12 operands and mnemonics. It | 
|---|
| 718 | produces code for the 68HC12. A few 68HC11 instructions are | 
|---|
| 719 | replaced by some 68HC12 instructions as recommended by Motorola | 
|---|
| 720 | specifications. | 
|---|
| 721 |  | 
|---|
| 722 | `-m68hcs12' | 
|---|
| 723 | This option switches the assembler in the M68HCS12 mode.  This | 
|---|
| 724 | mode is similar to `-m68hc12' but specifies to assemble for the | 
|---|
| 725 | 68HCS12 series.  The only difference is on the assembling of the | 
|---|
| 726 | `movb' and `movw' instruction when a PC-relative operand is used. | 
|---|
| 727 |  | 
|---|
| 728 | `-mshort' | 
|---|
| 729 | This option controls the ABI and indicates to use a 16-bit integer | 
|---|
| 730 | ABI.  It has no effect on the assembled instructions.  This is the | 
|---|
| 731 | default. | 
|---|
| 732 |  | 
|---|
| 733 | `-mlong' | 
|---|
| 734 | This option controls the ABI and indicates to use a 32-bit integer | 
|---|
| 735 | ABI. | 
|---|
| 736 |  | 
|---|
| 737 | `-mshort-double' | 
|---|
| 738 | This option controls the ABI and indicates to use a 32-bit float | 
|---|
| 739 | ABI.  This is the default. | 
|---|
| 740 |  | 
|---|
| 741 | `-mlong-double' | 
|---|
| 742 | This option controls the ABI and indicates to use a 64-bit float | 
|---|
| 743 | ABI. | 
|---|
| 744 |  | 
|---|
| 745 | `--strict-direct-mode' | 
|---|
| 746 | You can use the `--strict-direct-mode' option to disable the | 
|---|
| 747 | automatic translation of direct page mode addressing into extended | 
|---|
| 748 | mode when the instruction does not support direct mode.  For | 
|---|
| 749 | example, the `clr' instruction does not support direct page mode | 
|---|
| 750 | addressing. When it is used with the direct page mode, `as' will | 
|---|
| 751 | ignore it and generate an absolute addressing.  This option | 
|---|
| 752 | prevents `as' from doing this, and the wrong usage of the direct | 
|---|
| 753 | page mode will raise an error. | 
|---|
| 754 |  | 
|---|
| 755 | `--short-branchs' | 
|---|
| 756 | The `--short-branchs' option turns off the translation of relative | 
|---|
| 757 | branches into absolute branches when the branch offset is out of | 
|---|
| 758 | range. By default `as' transforms the relative branch (`bsr', | 
|---|
| 759 | `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', `bls', | 
|---|
| 760 | `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch when | 
|---|
| 761 | the offset is out of the -128 .. 127 range.  In that case, the | 
|---|
| 762 | `bsr' instruction is translated into a `jsr', the `bra' | 
|---|
| 763 | instruction is translated into a `jmp' and the conditional branchs | 
|---|
| 764 | instructions are inverted and followed by a `jmp'. This option | 
|---|
| 765 | disables these translations and `as' will generate an error if a | 
|---|
| 766 | relative branch is out of range. This option does not affect the | 
|---|
| 767 | optimization associated to the `jbra', `jbsr' and `jbXX' pseudo | 
|---|
| 768 | opcodes. | 
|---|
| 769 |  | 
|---|
| 770 | `--force-long-branchs' | 
|---|
| 771 | The `--force-long-branchs' option forces the translation of | 
|---|
| 772 | relative branches into absolute branches. This option does not | 
|---|
| 773 | affect the optimization associated to the `jbra', `jbsr' and | 
|---|
| 774 | `jbXX' pseudo opcodes. | 
|---|
| 775 |  | 
|---|
| 776 | `--print-insn-syntax' | 
|---|
| 777 | You can use the `--print-insn-syntax' option to obtain the syntax | 
|---|
| 778 | description of the instruction when an error is detected. | 
|---|
| 779 |  | 
|---|
| 780 | `--print-opcodes' | 
|---|
| 781 | The `--print-opcodes' option prints the list of all the | 
|---|
| 782 | instructions with their syntax. The first item of each line | 
|---|
| 783 | represents the instruction name and the rest of the line indicates | 
|---|
| 784 | the possible operands for that instruction. The list is printed in | 
|---|
| 785 | alphabetical order. Once the list is printed `as' exits. | 
|---|
| 786 |  | 
|---|
| 787 | `--generate-example' | 
|---|
| 788 | The `--generate-example' option is similar to `--print-opcodes' | 
|---|
| 789 | but it generates an example for each instruction instead. | 
|---|
| 790 |  | 
|---|
| 791 |  | 
|---|
| 792 | File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent | 
|---|
| 793 |  | 
|---|
| 794 | Syntax | 
|---|
| 795 | ------ | 
|---|
| 796 |  | 
|---|
| 797 | In the M68HC11 syntax, the instruction name comes first and it may | 
|---|
| 798 | be followed by one or several operands (up to three). Operands are | 
|---|
| 799 | separated by comma (`,'). In the normal mode, `as' will complain if too | 
|---|
| 800 | many operands are specified for a given instruction. In the MRI mode | 
|---|
| 801 | (turned on with `-M' option), it will treat them as comments. Example: | 
|---|
| 802 |  | 
|---|
| 803 | inx | 
|---|
| 804 | lda  #23 | 
|---|
| 805 | bset 2,x #4 | 
|---|
| 806 | brclr *bot #8 foo | 
|---|
| 807 |  | 
|---|
| 808 | The following addressing modes are understood for 68HC11 and 68HC12: | 
|---|
| 809 | "Immediate" | 
|---|
| 810 | `#NUMBER' | 
|---|
| 811 |  | 
|---|
| 812 | "Address Register" | 
|---|
| 813 | `NUMBER,X', `NUMBER,Y' | 
|---|
| 814 |  | 
|---|
| 815 | The NUMBER may be omitted in which case 0 is assumed. | 
|---|
| 816 |  | 
|---|
| 817 | "Direct Addressing mode" | 
|---|
| 818 | `*SYMBOL', or `*DIGITS' | 
|---|
| 819 |  | 
|---|
| 820 | "Absolute" | 
|---|
| 821 | `SYMBOL', or `DIGITS' | 
|---|
| 822 |  | 
|---|
| 823 | The M68HC12 has other more complex addressing modes. All of them are | 
|---|
| 824 | supported and they are represented below: | 
|---|
| 825 |  | 
|---|
| 826 | "Constant Offset Indexed Addressing Mode" | 
|---|
| 827 | `NUMBER,REG' | 
|---|
| 828 |  | 
|---|
| 829 | The NUMBER may be omitted in which case 0 is assumed.  The | 
|---|
| 830 | register can be either `X', `Y', `SP' or `PC'.  The assembler will | 
|---|
| 831 | use the smaller post-byte definition according to the constant | 
|---|
| 832 | value (5-bit constant offset, 9-bit constant offset or 16-bit | 
|---|
| 833 | constant offset).  If the constant is not known by the assembler | 
|---|
| 834 | it will use the 16-bit constant offset post-byte and the value | 
|---|
| 835 | will be resolved at link time. | 
|---|
| 836 |  | 
|---|
| 837 | "Offset Indexed Indirect" | 
|---|
| 838 | `[NUMBER,REG]' | 
|---|
| 839 |  | 
|---|
| 840 | The register can be either `X', `Y', `SP' or `PC'. | 
|---|
| 841 |  | 
|---|
| 842 | "Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement" | 
|---|
| 843 | `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+' | 
|---|
| 844 |  | 
|---|
| 845 | The number must be in the range `-8'..`+8' and must not be 0.  The | 
|---|
| 846 | register can be either `X', `Y', `SP' or `PC'. | 
|---|
| 847 |  | 
|---|
| 848 | "Accumulator Offset" | 
|---|
| 849 | `ACC,REG' | 
|---|
| 850 |  | 
|---|
| 851 | The accumulator register can be either `A', `B' or `D'.  The | 
|---|
| 852 | register can be either `X', `Y', `SP' or `PC'. | 
|---|
| 853 |  | 
|---|
| 854 | "Accumulator D offset indexed-indirect" | 
|---|
| 855 | `[D,REG]' | 
|---|
| 856 |  | 
|---|
| 857 | The register can be either `X', `Y', `SP' or `PC'. | 
|---|
| 858 |  | 
|---|
| 859 | For example: | 
|---|
| 860 |  | 
|---|
| 861 | ldab 1024,sp | 
|---|
| 862 | ldd [10,x] | 
|---|
| 863 | orab 3,+x | 
|---|
| 864 | stab -2,y- | 
|---|
| 865 | ldx a,pc | 
|---|
| 866 | sty [d,sp] | 
|---|
| 867 |  | 
|---|
| 868 |  | 
|---|
| 869 | File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent | 
|---|
| 870 |  | 
|---|
| 871 | Symbolic Operand Modifiers | 
|---|
| 872 | -------------------------- | 
|---|
| 873 |  | 
|---|
| 874 | The assembler supports several modifiers when using symbol addresses | 
|---|
| 875 | in 68HC11 and 68HC12 instruction operands.  The general syntax is the | 
|---|
| 876 | following: | 
|---|
| 877 |  | 
|---|
| 878 | %modifier(symbol) | 
|---|
| 879 |  | 
|---|
| 880 | `%addr' | 
|---|
| 881 | This modifier indicates to the assembler and linker to use the | 
|---|
| 882 | 16-bit physical address corresponding to the symbol.  This is | 
|---|
| 883 | intended to be used on memory window systems to map a symbol in | 
|---|
| 884 | the memory bank window.  If the symbol is in a memory expansion | 
|---|
| 885 | part, the physical address corresponds to the symbol address | 
|---|
| 886 | within the memory bank window.  If the symbol is not in a memory | 
|---|
| 887 | expansion part, this is the symbol address (using or not using the | 
|---|
| 888 | %addr modifier has no effect in that case). | 
|---|
| 889 |  | 
|---|
| 890 | `%page' | 
|---|
| 891 | This modifier indicates to use the memory page number corresponding | 
|---|
| 892 | to the symbol.  If the symbol is in a memory expansion part, its | 
|---|
| 893 | page number is computed by the linker as a number used to map the | 
|---|
| 894 | page containing the symbol in the memory bank window.  If the | 
|---|
| 895 | symbol is not in a memory expansion part, the page number is 0. | 
|---|
| 896 |  | 
|---|
| 897 | `%hi' | 
|---|
| 898 | This modifier indicates to use the 8-bit high part of the physical | 
|---|
| 899 | address of the symbol. | 
|---|
| 900 |  | 
|---|
| 901 | `%lo' | 
|---|
| 902 | This modifier indicates to use the 8-bit low part of the physical | 
|---|
| 903 | address of the symbol. | 
|---|
| 904 |  | 
|---|
| 905 | For example a 68HC12 call to a function `foo_example' stored in | 
|---|
| 906 | memory expansion part could be written as follows: | 
|---|
| 907 |  | 
|---|
| 908 | call %addr(foo_example),%page(foo_example) | 
|---|
| 909 |  | 
|---|
| 910 | and this is equivalent to | 
|---|
| 911 |  | 
|---|
| 912 | call foo_example | 
|---|
| 913 |  | 
|---|
| 914 | And for 68HC11 it could be written as follows: | 
|---|
| 915 |  | 
|---|
| 916 | ldab #%page(foo_example) | 
|---|
| 917 | stab _page_switch | 
|---|
| 918 | jsr  %addr(foo_example) | 
|---|
| 919 |  | 
|---|
| 920 |  | 
|---|
| 921 | File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent | 
|---|
| 922 |  | 
|---|
| 923 | Assembler Directives | 
|---|
| 924 | -------------------- | 
|---|
| 925 |  | 
|---|
| 926 | The 68HC11 and 68HC12 version of `as' have the following specific | 
|---|
| 927 | assembler directives: | 
|---|
| 928 |  | 
|---|
| 929 | `.relax' | 
|---|
| 930 | The relax directive is used by the `GNU Compiler' to emit a | 
|---|
| 931 | specific relocation to mark a group of instructions for linker | 
|---|
| 932 | relaxation.  The sequence of instructions within the group must be | 
|---|
| 933 | known to the linker so that relaxation can be performed. | 
|---|
| 934 |  | 
|---|
| 935 | `.mode [mshort|mlong|mshort-double|mlong-double]' | 
|---|
| 936 | This directive specifies the ABI.  It overrides the `-mshort', | 
|---|
| 937 | `-mlong', `-mshort-double' and `-mlong-double' options. | 
|---|
| 938 |  | 
|---|
| 939 | `.far SYMBOL' | 
|---|
| 940 | This directive marks the symbol as a `far' symbol meaning that it | 
|---|
| 941 | uses a `call/rtc' calling convention as opposed to `jsr/rts'. | 
|---|
| 942 | During a final link, the linker will identify references to the | 
|---|
| 943 | `far' symbol and will verify the proper calling convention. | 
|---|
| 944 |  | 
|---|
| 945 | `.interrupt SYMBOL' | 
|---|
| 946 | This directive marks the symbol as an interrupt entry point.  This | 
|---|
| 947 | information is then used by the debugger to correctly unwind the | 
|---|
| 948 | frame across interrupts. | 
|---|
| 949 |  | 
|---|
| 950 | `.xrefb SYMBOL' | 
|---|
| 951 | This directive is defined for compatibility with the | 
|---|
| 952 | `Specification for Motorola 8 and 16-Bit Assembly Language Input | 
|---|
| 953 | Standard' and is ignored. | 
|---|
| 954 |  | 
|---|
| 955 |  | 
|---|
| 956 | File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent | 
|---|
| 957 |  | 
|---|
| 958 | Floating Point | 
|---|
| 959 | -------------- | 
|---|
| 960 |  | 
|---|
| 961 | Packed decimal (P) format floating literals are not supported.  Feel | 
|---|
| 962 | free to add the code! | 
|---|
| 963 |  | 
|---|
| 964 | The floating point formats generated by directives are these. | 
|---|
| 965 |  | 
|---|
| 966 | `.float' | 
|---|
| 967 | `Single' precision floating point constants. | 
|---|
| 968 |  | 
|---|
| 969 | `.double' | 
|---|
| 970 | `Double' precision floating point constants. | 
|---|
| 971 |  | 
|---|
| 972 | `.extend' | 
|---|
| 973 | `.ldouble' | 
|---|
| 974 | `Extended' precision (`long double') floating point constants. | 
|---|
| 975 |  | 
|---|
| 976 |  | 
|---|
| 977 | File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent | 
|---|
| 978 |  | 
|---|
| 979 | Opcodes | 
|---|
| 980 | ------- | 
|---|
| 981 |  | 
|---|
| 982 | * Menu: | 
|---|
| 983 |  | 
|---|
| 984 | * M68HC11-Branch::                 Branch Improvement | 
|---|
| 985 |  | 
|---|
| 986 |  | 
|---|
| 987 | File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes | 
|---|
| 988 |  | 
|---|
| 989 | Branch Improvement | 
|---|
| 990 | .................. | 
|---|
| 991 |  | 
|---|
| 992 | Certain pseudo opcodes are permitted for branch instructions.  They | 
|---|
| 993 | expand to the shortest branch instruction that reach the target. | 
|---|
| 994 | Generally these mnemonics are made by prepending `j' to the start of | 
|---|
| 995 | Motorola mnemonic. These pseudo opcodes are not affected by the | 
|---|
| 996 | `--short-branchs' or `--force-long-branchs' options. | 
|---|
| 997 |  | 
|---|
| 998 | The following table summarizes the pseudo-operations. | 
|---|
| 999 |  | 
|---|
| 1000 | Displacement Width | 
|---|
| 1001 | +-------------------------------------------------------------+ | 
|---|
| 1002 | |                     Options                                 | | 
|---|
| 1003 | |    --short-branchs            --force-long-branchs          | | 
|---|
| 1004 | +--------------------------+----------------------------------+ | 
|---|
| 1005 | Op |BYTE             WORD     | BYTE          WORD               | | 
|---|
| 1006 | +--------------------------+----------------------------------+ | 
|---|
| 1007 | bsr | bsr <pc-rel>    <error>  |               jsr <abs>          | | 
|---|
| 1008 | bra | bra <pc-rel>    <error>  |               jmp <abs>          | | 
|---|
| 1009 | jbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          | | 
|---|
| 1010 | jbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          | | 
|---|
| 1011 | bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  | | 
|---|
| 1012 | jbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  | | 
|---|
| 1013 | |                jmp <abs> |                                  | | 
|---|
| 1014 | +--------------------------+----------------------------------+ | 
|---|
| 1015 | XX: condition | 
|---|
| 1016 | NX: negative of condition XX | 
|---|
| 1017 |  | 
|---|
| 1018 | `jbsr' | 
|---|
| 1019 | `jbra' | 
|---|
| 1020 | These are the simplest jump pseudo-operations; they always map to | 
|---|
| 1021 | one particular machine instruction, depending on the displacement | 
|---|
| 1022 | to the branch target. | 
|---|
| 1023 |  | 
|---|
| 1024 | `jbXX' | 
|---|
| 1025 | Here, `jbXX' stands for an entire family of pseudo-operations, | 
|---|
| 1026 | where XX is a conditional branch or condition-code test.  The full | 
|---|
| 1027 | list of pseudo-ops in this family is: | 
|---|
| 1028 | jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo | 
|---|
| 1029 | jbcs   jbne   jblt   jble   jbls   jbvc   jbmi | 
|---|
| 1030 |  | 
|---|
| 1031 | For the cases of non-PC relative displacements and long | 
|---|
| 1032 | displacements, `as' issues a longer code fragment in terms of NX, | 
|---|
| 1033 | the opposite condition to XX.  For example, for the non-PC | 
|---|
| 1034 | relative case: | 
|---|
| 1035 | jbXX foo | 
|---|
| 1036 | gives | 
|---|
| 1037 | bNXs oof | 
|---|
| 1038 | jmp foo | 
|---|
| 1039 | oof: | 
|---|
| 1040 |  | 
|---|
| 1041 |  | 
|---|
| 1042 | File: as.info,  Node: M88K-Dependent,  Next: MIPS-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies | 
|---|
| 1043 |  | 
|---|
| 1044 | Motorola M88K Dependent Features | 
|---|
| 1045 | ================================ | 
|---|
| 1046 |  | 
|---|
| 1047 | * Menu: | 
|---|
| 1048 |  | 
|---|
| 1049 | * M88K Directives::     M88K Machine Directives | 
|---|
| 1050 |  | 
|---|
| 1051 |  | 
|---|
| 1052 | File: as.info,  Node: M88K Directives,  Up: M88K-Dependent | 
|---|
| 1053 |  | 
|---|
| 1054 | M88K Machine Directives | 
|---|
| 1055 | ----------------------- | 
|---|
| 1056 |  | 
|---|
| 1057 | The M88K version of the assembler supports the following machine | 
|---|
| 1058 | directives: | 
|---|
| 1059 |  | 
|---|
| 1060 | `.align' | 
|---|
| 1061 | This directive aligns the section program counter on the next | 
|---|
| 1062 | 4-byte boundary. | 
|---|
| 1063 |  | 
|---|
| 1064 | `.dfloat EXPR' | 
|---|
| 1065 | This assembles a double precision (64-bit) floating point constant. | 
|---|
| 1066 |  | 
|---|
| 1067 | `.ffloat EXPR' | 
|---|
| 1068 | This assembles a single precision (32-bit) floating point constant. | 
|---|
| 1069 |  | 
|---|
| 1070 | `.half EXPR' | 
|---|
| 1071 | This directive assembles a half-word (16-bit) constant. | 
|---|
| 1072 |  | 
|---|
| 1073 | `.word EXPR' | 
|---|
| 1074 | This assembles a word (32-bit) constant. | 
|---|
| 1075 |  | 
|---|
| 1076 | `.string "STR"' | 
|---|
| 1077 | This directive behaves like the standard `.ascii' directive for | 
|---|
| 1078 | copying STR into the object file.  The string is not terminated | 
|---|
| 1079 | with a null byte. | 
|---|
| 1080 |  | 
|---|
| 1081 | `.set SYMBOL, VALUE' | 
|---|
| 1082 | This directive creates a symbol named SYMBOL which is an alias for | 
|---|
| 1083 | another symbol (possibly not yet defined).  This should not be | 
|---|
| 1084 | confused with the mnemonic `set', which is a legitimate M88K | 
|---|
| 1085 | instruction. | 
|---|
| 1086 |  | 
|---|
| 1087 | `.def SYMBOL, VALUE' | 
|---|
| 1088 | This directive is synonymous with `.set' and is presumably provided | 
|---|
| 1089 | for compatibility with other M88K assemblers. | 
|---|
| 1090 |  | 
|---|
| 1091 | `.bss SYMBOL, LENGTH, ALIGN' | 
|---|
| 1092 | Reserve LENGTH bytes in the bss section for a local SYMBOL, | 
|---|
| 1093 | aligned to the power of two specified by ALIGN.  LENGTH and ALIGN | 
|---|
| 1094 | must be positive absolute expressions.  This directive differs | 
|---|
| 1095 | from `.lcomm' only in that it permits you to specify an alignment. | 
|---|
| 1096 | *Note `.lcomm': Lcomm. | 
|---|
| 1097 |  | 
|---|
| 1098 |  | 
|---|
| 1099 | File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: M88K-Dependent,  Up: Machine Dependencies | 
|---|
| 1100 |  | 
|---|
| 1101 | MIPS Dependent Features | 
|---|
| 1102 | ======================= | 
|---|
| 1103 |  | 
|---|
| 1104 | GNU `as' for MIPS architectures supports several different MIPS | 
|---|
| 1105 | processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For | 
|---|
| 1106 | information about the MIPS instruction set, see `MIPS RISC | 
|---|
| 1107 | Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview | 
|---|
| 1108 | of MIPS assembly conventions, see "Appendix D: Assembly Language | 
|---|
| 1109 | Programming" in the same work. | 
|---|
| 1110 |  | 
|---|
| 1111 | * Menu: | 
|---|
| 1112 |  | 
|---|
| 1113 | * MIPS Opts::           Assembler options | 
|---|
| 1114 | * MIPS Object::         ECOFF object code | 
|---|
| 1115 | * MIPS Stabs::          Directives for debugging information | 
|---|
| 1116 | * MIPS ISA::            Directives to override the ISA level | 
|---|
| 1117 | * MIPS autoextend::     Directives for extending MIPS 16 bit instructions | 
|---|
| 1118 | * MIPS insn::           Directive to mark data as an instruction | 
|---|
| 1119 | * MIPS option stack::   Directives to save and restore options | 
|---|
| 1120 | * MIPS ASE instruction generation overrides:: Directives to control | 
|---|
| 1121 | generation of MIPS ASE instructions | 
|---|
| 1122 |  | 
|---|
| 1123 |  | 
|---|
| 1124 | File: as.info,  Node: MIPS Opts,  Next: MIPS Object,  Up: MIPS-Dependent | 
|---|
| 1125 |  | 
|---|
| 1126 | Assembler options | 
|---|
| 1127 | ----------------- | 
|---|
| 1128 |  | 
|---|
| 1129 | The MIPS configurations of GNU `as' support these special options: | 
|---|
| 1130 |  | 
|---|
| 1131 | `-G NUM' | 
|---|
| 1132 | This option sets the largest size of an object that can be | 
|---|
| 1133 | referenced implicitly with the `gp' register.  It is only accepted | 
|---|
| 1134 | for targets that use ECOFF format.  The default value is 8. | 
|---|
| 1135 |  | 
|---|
| 1136 | `-EB' | 
|---|
| 1137 | `-EL' | 
|---|
| 1138 | Any MIPS configuration of `as' can select big-endian or | 
|---|
| 1139 | little-endian output at run time (unlike the other GNU development | 
|---|
| 1140 | tools, which must be configured for one or the other).  Use `-EB' | 
|---|
| 1141 | to select big-endian output, and `-EL' for little-endian. | 
|---|
| 1142 |  | 
|---|
| 1143 | `-mips1' | 
|---|
| 1144 | `-mips2' | 
|---|
| 1145 | `-mips3' | 
|---|
| 1146 | `-mips4' | 
|---|
| 1147 | `-mips5' | 
|---|
| 1148 | `-mips32' | 
|---|
| 1149 | `-mips32r2' | 
|---|
| 1150 | `-mips64' | 
|---|
| 1151 | Generate code for a particular MIPS Instruction Set Architecture | 
|---|
| 1152 | level.  `-mips1' corresponds to the R2000 and R3000 processors, | 
|---|
| 1153 | `-mips2' to the R6000 processor, `-mips3' to the R4000 processor, | 
|---|
| 1154 | and `-mips4' to the R8000 and R10000 processors.  `-mips5', | 
|---|
| 1155 | `-mips32', `-mips32r2', and `-mips64' correspond to generic MIPS | 
|---|
| 1156 | V, MIPS32, MIPS32 RELEASE 2, and MIPS64 ISA processors, | 
|---|
| 1157 | respectively.  You can also switch instruction sets during the | 
|---|
| 1158 | assembly; see *Note Directives to override the ISA level: MIPS ISA. | 
|---|
| 1159 |  | 
|---|
| 1160 | `-mgp32' | 
|---|
| 1161 | `-mfp32' | 
|---|
| 1162 | Some macros have different expansions for 32-bit and 64-bit | 
|---|
| 1163 | registers.  The register sizes are normally inferred from the ISA | 
|---|
| 1164 | and ABI, but these flags force a certain group of registers to be | 
|---|
| 1165 | treated as 32 bits wide at all times.  `-mgp32' controls the size | 
|---|
| 1166 | of general-purpose registers and `-mfp32' controls the size of | 
|---|
| 1167 | floating-point registers. | 
|---|
| 1168 |  | 
|---|
| 1169 | On some MIPS variants there is a 32-bit mode flag; when this flag | 
|---|
| 1170 | is set, 64-bit instructions generate a trap.  Also, some 32-bit | 
|---|
| 1171 | OSes only save the 32-bit registers on a context switch, so it is | 
|---|
| 1172 | essential never to use the 64-bit registers. | 
|---|
| 1173 |  | 
|---|
| 1174 | `-mgp64' | 
|---|
| 1175 | Assume that 64-bit general purpose registers are available.  This | 
|---|
| 1176 | is provided in the interests of symmetry with -gp32. | 
|---|
| 1177 |  | 
|---|
| 1178 | `-mips16' | 
|---|
| 1179 | `-no-mips16' | 
|---|
| 1180 | Generate code for the MIPS 16 processor.  This is equivalent to | 
|---|
| 1181 | putting `.set mips16' at the start of the assembly file. | 
|---|
| 1182 | `-no-mips16' turns off this option. | 
|---|
| 1183 |  | 
|---|
| 1184 | `-mips3d' | 
|---|
| 1185 | `-no-mips3d' | 
|---|
| 1186 | Generate code for the MIPS-3D Application Specific Extension. | 
|---|
| 1187 | This tells the assembler to accept MIPS-3D instructions. | 
|---|
| 1188 | `-no-mips3d' turns off this option. | 
|---|
| 1189 |  | 
|---|
| 1190 | `-mdmx' | 
|---|
| 1191 | `-no-mdmx' | 
|---|
| 1192 | Generate code for the MDMX Application Specific Extension.  This | 
|---|
| 1193 | tells the assembler to accept MDMX instructions.  `-no-mdmx' turns | 
|---|
| 1194 | off this option. | 
|---|
| 1195 |  | 
|---|
| 1196 | `-mfix7000' | 
|---|
| 1197 | `-mno-fix7000' | 
|---|
| 1198 | Cause nops to be inserted if the read of the destination register | 
|---|
| 1199 | of an mfhi or mflo instruction occurs in the following two | 
|---|
| 1200 | instructions. | 
|---|
| 1201 |  | 
|---|
| 1202 | `-mfix-vr4122-bugs' | 
|---|
| 1203 | `-no-mfix-vr4122-bugs' | 
|---|
| 1204 | Insert `nop' instructions to avoid errors in certain versions of | 
|---|
| 1205 | the vr4122 core.  This option is intended to be used on | 
|---|
| 1206 | GCC-generated code: it is not designed to catch errors in | 
|---|
| 1207 | hand-written assembler code. | 
|---|
| 1208 |  | 
|---|
| 1209 | `-m4010' | 
|---|
| 1210 | `-no-m4010' | 
|---|
| 1211 | Generate code for the LSI R4010 chip.  This tells the assembler to | 
|---|
| 1212 | accept the R4010 specific instructions (`addciu', `ffc', etc.), | 
|---|
| 1213 | and to not schedule `nop' instructions around accesses to the `HI' | 
|---|
| 1214 | and `LO' registers.  `-no-m4010' turns off this option. | 
|---|
| 1215 |  | 
|---|
| 1216 | `-m4650' | 
|---|
| 1217 | `-no-m4650' | 
|---|
| 1218 | Generate code for the MIPS R4650 chip.  This tells the assembler | 
|---|
| 1219 | to accept the `mad' and `madu' instruction, and to not schedule | 
|---|
| 1220 | `nop' instructions around accesses to the `HI' and `LO' registers. | 
|---|
| 1221 | `-no-m4650' turns off this option. | 
|---|
| 1222 |  | 
|---|
| 1223 | `-m3900' | 
|---|
| 1224 | `-no-m3900' | 
|---|
| 1225 | `-m4100' | 
|---|
| 1226 | `-no-m4100' | 
|---|
| 1227 | For each option `-mNNNN', generate code for the MIPS RNNNN chip. | 
|---|
| 1228 | This tells the assembler to accept instructions specific to that | 
|---|
| 1229 | chip, and to schedule for that chip's hazards. | 
|---|
| 1230 |  | 
|---|
| 1231 | `-march=CPU' | 
|---|
| 1232 | Generate code for a particular MIPS cpu.  It is exactly equivalent | 
|---|
| 1233 | to `-mCPU', except that there are more value of CPU understood. | 
|---|
| 1234 | Valid CPU value are: | 
|---|
| 1235 |  | 
|---|
| 1236 | 2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130, | 
|---|
| 1237 | vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231, | 
|---|
| 1238 | rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, 10000, | 
|---|
| 1239 | 12000, mips32-4k, sb1 | 
|---|
| 1240 |  | 
|---|
| 1241 | `-mtune=CPU' | 
|---|
| 1242 | Schedule and tune for a particular MIPS cpu.  Valid CPU values are | 
|---|
| 1243 | identical to `-march=CPU'. | 
|---|
| 1244 |  | 
|---|
| 1245 | `-mabi=ABI' | 
|---|
| 1246 | Record which ABI the source code uses.  The recognized arguments | 
|---|
| 1247 | are: `32', `n32', `o64', `64' and `eabi'. | 
|---|
| 1248 |  | 
|---|
| 1249 | `-nocpp' | 
|---|
| 1250 | This option is ignored.  It is accepted for command-line | 
|---|
| 1251 | compatibility with other assemblers, which use it to turn off C | 
|---|
| 1252 | style preprocessing.  With GNU `as', there is no need for | 
|---|
| 1253 | `-nocpp', because the GNU assembler itself never runs the C | 
|---|
| 1254 | preprocessor. | 
|---|
| 1255 |  | 
|---|
| 1256 | `--construct-floats' | 
|---|
| 1257 | `--no-construct-floats' | 
|---|
| 1258 | The `--no-construct-floats' option disables the construction of | 
|---|
| 1259 | double width floating point constants by loading the two halves of | 
|---|
| 1260 | the value into the two single width floating point registers that | 
|---|
| 1261 | make up the double width register.  This feature is useful if the | 
|---|
| 1262 | processor support the FR bit in its status  register, and this bit | 
|---|
| 1263 | is known (by the programmer) to be set.  This bit prevents the | 
|---|
| 1264 | aliasing of the double width register by the single width | 
|---|
| 1265 | registers. | 
|---|
| 1266 |  | 
|---|
| 1267 | By default `--construct-floats' is selected, allowing construction | 
|---|
| 1268 | of these floating point constants. | 
|---|
| 1269 |  | 
|---|
| 1270 | `--trap' | 
|---|
| 1271 | `--no-break' | 
|---|
| 1272 | `as' automatically macro expands certain division and | 
|---|
| 1273 | multiplication instructions to check for overflow and division by | 
|---|
| 1274 | zero.  This option causes `as' to generate code to take a trap | 
|---|
| 1275 | exception rather than a break exception when an error is detected. | 
|---|
| 1276 | The trap instructions are only supported at Instruction Set | 
|---|
| 1277 | Architecture level 2 and higher. | 
|---|
| 1278 |  | 
|---|
| 1279 | `--break' | 
|---|
| 1280 | `--no-trap' | 
|---|
| 1281 | Generate code to take a break exception rather than a trap | 
|---|
| 1282 | exception when an error is detected.  This is the default. | 
|---|
| 1283 |  | 
|---|
| 1284 | `-n' | 
|---|
| 1285 | When this option is used, `as' will issue a warning every time it | 
|---|
| 1286 | generates a nop instruction from a macro. | 
|---|
| 1287 |  | 
|---|
| 1288 |  | 
|---|
| 1289 | File: as.info,  Node: MIPS Object,  Next: MIPS Stabs,  Prev: MIPS Opts,  Up: MIPS-Dependent | 
|---|
| 1290 |  | 
|---|
| 1291 | MIPS ECOFF object code | 
|---|
| 1292 | ---------------------- | 
|---|
| 1293 |  | 
|---|
| 1294 | Assembling for a MIPS ECOFF target supports some additional sections | 
|---|
| 1295 | besides the usual `.text', `.data' and `.bss'.  The additional sections | 
|---|
| 1296 | are `.rdata', used for read-only data, `.sdata', used for small data, | 
|---|
| 1297 | and `.sbss', used for small common objects. | 
|---|
| 1298 |  | 
|---|
| 1299 | When assembling for ECOFF, the assembler uses the `$gp' (`$28') | 
|---|
| 1300 | register to form the address of a "small object".  Any object in the | 
|---|
| 1301 | `.sdata' or `.sbss' sections is considered "small" in this sense.  For | 
|---|
| 1302 | external objects, or for objects in the `.bss' section, you can use the | 
|---|
| 1303 | `gcc' `-G' option to control the size of objects addressed via `$gp'; | 
|---|
| 1304 | the default value is 8, meaning that a reference to any object eight | 
|---|
| 1305 | bytes or smaller uses `$gp'.  Passing `-G 0' to `as' prevents it from | 
|---|
| 1306 | using the `$gp' register on the basis of object size (but the assembler | 
|---|
| 1307 | uses `$gp' for objects in `.sdata' or `sbss' in any case).  The size of | 
|---|
| 1308 | an object in the `.bss' section is set by the `.comm' or `.lcomm' | 
|---|
| 1309 | directive that defines it.  The size of an external object may be set | 
|---|
| 1310 | with the `.extern' directive.  For example, `.extern sym,4' declares | 
|---|
| 1311 | that the object at `sym' is 4 bytes in length, whie leaving `sym' | 
|---|
| 1312 | otherwise undefined. | 
|---|
| 1313 |  | 
|---|
| 1314 | Using small ECOFF objects requires linker support, and assumes that | 
|---|
| 1315 | the `$gp' register is correctly initialized (normally done | 
|---|
| 1316 | automatically by the startup code).  MIPS ECOFF assembly code must not | 
|---|
| 1317 | modify the `$gp' register. | 
|---|
| 1318 |  | 
|---|
| 1319 |  | 
|---|
| 1320 | File: as.info,  Node: MIPS Stabs,  Next: MIPS ISA,  Prev: MIPS Object,  Up: MIPS-Dependent | 
|---|
| 1321 |  | 
|---|
| 1322 | Directives for debugging information | 
|---|
| 1323 | ------------------------------------ | 
|---|
| 1324 |  | 
|---|
| 1325 | MIPS ECOFF `as' supports several directives used for generating | 
|---|
| 1326 | debugging information which are not support by traditional MIPS | 
|---|
| 1327 | assemblers.  These are `.def', `.endef', `.dim', `.file', `.scl', | 
|---|
| 1328 | `.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'. | 
|---|
| 1329 | The debugging information generated by the three `.stab' directives can | 
|---|
| 1330 | only be read by GDB, not by traditional MIPS debuggers (this | 
|---|
| 1331 | enhancement is required to fully support C++ debugging).  These | 
|---|
| 1332 | directives are primarily used by compilers, not assembly language | 
|---|
| 1333 | programmers! | 
|---|
| 1334 |  | 
|---|