Annotation of 43BSDReno/share/doc/ps1/05.as/asdocs3.me, revision 1.1

1.1     ! root        1: .\"
        !             2: .\"    Copyright (c) 1982 Regents of the University of California
        !             3: .\"    @(#)asdocs3.me 1.6 2/11/83
        !             4: .\"
        !             5: .EQ
        !             6: delim $$
        !             7: .EN
        !             8: .SH 1 "Pseudo-operations (Directives)"
        !             9: .pp
        !            10: The keywords listed below introduce directives or instructions,
        !            11: and influence the later behavior of the assembler for this statement.
        !            12: The metanotation
        !            13: .ce 1
        !            14: [ stuff ]
        !            15: .ce 0
        !            16: means that 0 or more instances of the given
        !            17: .q stuff
        !            18: may appear.
        !            19: .pp
        !            20: .b Boldface
        !            21: tokens must appear literally;
        !            22: words in
        !            23: .i italic
        !            24: words are substitutable.
        !            25: .pp
        !            26: The pseudo\-operations listed below
        !            27: are grouped into functional categories.
        !            28: .SH 2 "Interface to a Previous Pass"
        !            29: .(b
        !            30: .in -2n
        !            31: .TS
        !            32: lb l.
        !            33: \&.ABORT
        !            34: .TE
        !            35: .in +2n
        !            36: .)b
        !            37: .pp
        !            38: As soon as the assembler sees this directive,
        !            39: it ignores all further input
        !            40: (but it does read to the end of file),
        !            41: and aborts the assembly.
        !            42: No files are created.
        !            43: It is anticipated that this would be used in a pipe interconnected
        !            44: version of a compiler,
        !            45: where the first major syntax error would
        !            46: cause the compiler to issue this directive,
        !            47: saving unnecessary work in assembling code
        !            48: that would have to be discarded anyway.
        !            49: .(b
        !            50: .in -2n
        !            51: .TS
        !            52: lb l.
        !            53: \&.file        $string$
        !            54: .TE
        !            55: .in +2n
        !            56: .)b
        !            57: .pp
        !            58: This directive causes the assembler to think it is in file
        !            59: .i string ,
        !            60: so error messages reflect the proper source file.
        !            61: .(b
        !            62: .in -2n
        !            63: .TS
        !            64: lb l.
        !            65: \&.line        $expression$
        !            66: .TE
        !            67: .in +2n
        !            68: .)b
        !            69: .pp
        !            70: This directive causes the assembler to think it is on line
        !            71: .i expression
        !            72: so error messages reflect the proper source file.
        !            73: .pp
        !            74: The only effect of assembling multiple files specified in the command string
        !            75: is to insert the
        !            76: .i file
        !            77: and
        !            78: .i line
        !            79: directives,
        !            80: with the appropriate values,
        !            81: at the beginning of the source from each file.
        !            82: .(b
        !            83: .in -2n
        !            84: .TS
        !            85: lb l.
        !            86: #      $expression$ $string$
        !            87: #      $expression$
        !            88: .TE
        !            89: .in +2n
        !            90: .)b
        !            91: .pp
        !            92: This is the only instance where a comment is meaningful to the assembler.
        !            93: The
        !            94: .q "#"
        !            95: .ul 1
        !            96: must
        !            97: be in the first column.
        !            98: This meta comment causes the assembler
        !            99: to believe it is on line
        !           100: .i expression .
        !           101: The second argument,
        !           102: if included,
        !           103: causes the assembler to believe it is in file
        !           104: .i string ,
        !           105: otherwise the current file name does not change.
        !           106: .SH 2 "Location Counter Control"
        !           107: .(b
        !           108: .in -2n
        !           109: .TS
        !           110: lb l.
        !           111: \&.data        [ $expression$ ]
        !           112: \&.text        [ $expression$ ]
        !           113: .TE
        !           114: .in +2n
        !           115: .)b
        !           116: .pp
        !           117: These two pseudo-operations cause the
        !           118: assembler to begin assembling into the indicated text or data
        !           119: subsegment.
        !           120: If specified,
        !           121: the
        !           122: .i expression
        !           123: must be defined and absolute;
        !           124: an omitted
        !           125: .i expression
        !           126: is treated as zero.
        !           127: The effect of a
        !           128: .b .data
        !           129: directive is treated
        !           130: as a
        !           131: .b .text
        !           132: directive if the
        !           133: .b \-R
        !           134: assembly flag is set.
        !           135: Assembly starts in the
        !           136: .b ".text"
        !           137: 0 subsegment.
        !           138: .pp
        !           139: The directives
        !           140: .b .align
        !           141: and
        !           142: .b .org
        !           143: also control the placement of the location counter.
        !           144: .sh 2 "Filled Data"
        !           145: .(b
        !           146: .in -2n
        !           147: .TS
        !           148: lb l.
        !           149: \&.align       $align\*(USexpr$ [ \fB,\fP $fill\*(USexpr$ ]
        !           150: .TE
        !           151: .in +2n
        !           152: .)b
        !           153: .pp
        !           154: The location counter is adjusted
        !           155: so that the
        !           156: .i expression
        !           157: lowest bits of the location counter become zero.
        !           158: This is done by
        !           159: assembling from 0 to $2 sup align\*(USexpr$ bytes,
        !           160: taken from the low order byte of $fill\*(USexpr$.
        !           161: If present,
        !           162: $fill\*(USexpr$ must be absolute;
        !           163: otherwise it defaults to 0.
        !           164: Thus
        !           165: .q ".align 2"
        !           166: pads by null bytes to make the location counter
        !           167: evenly divisible by 4.
        !           168: The
        !           169: .i align_expr
        !           170: must be defined,
        !           171: absolute, nonnegative,
        !           172: and less than 16.
        !           173: .pp
        !           174: Warning:
        !           175: the subsegment concatenation convention
        !           176: and the current loader conventions
        !           177: may not preserve attempts at aligning
        !           178: to more than 2 low-order zero bits.
        !           179: .(b
        !           180: .in -2n
        !           181: .TS
        !           182: lb l.
        !           183: \&.org $org\*(USexpr$ [ \fB,\fP $fill\*(USexpr$ ]
        !           184: .TE
        !           185: .in +2n
        !           186: .)b
        !           187: .pp
        !           188: The location counter is set equal to the value of $org\*(USexpr$,
        !           189: which must be defined and absolute.
        !           190: The value of the $org\*(USexpr$
        !           191: must be greater than the current value
        !           192: of the location counter.
        !           193: Space between the current value of the location counter
        !           194: and the desired value are filled with bytes taken from the
        !           195: low order byte of $fill\*(USexpr$,
        !           196: which must be absolute and defaults to 0.
        !           197: .(b
        !           198: .in -2n
        !           199: .TS
        !           200: lb l.
        !           201: \&.space       $space\*(USexpr$ [ \fB,\fP $fill\*(USexpr$ ]
        !           202: .TE
        !           203: .in +2n
        !           204: .)b
        !           205: .pp
        !           206: The location counter is advanced by
        !           207: $space\*(USexpr$ bytes.
        !           208: $Space\*(USexpr$ must be defined and absolute.
        !           209: The space is filled in with bytes taken from the low order
        !           210: byte of $fill\*(USexpr$,
        !           211: which must be defined and absolute.
        !           212: $Fill\*(USexpr$ defaults to 0.
        !           213: The
        !           214: .b .fill
        !           215: directive is a more general way to accomplish the
        !           216: .b .space
        !           217: directive.
        !           218: .(b
        !           219: .in -2n
        !           220: .TS
        !           221: lb l.
        !           222: \&.fill        $rep\*(USexpr$\fB,\fP $size\*(USexpr$\fB,\fP $fill\*(USexpr$
        !           223: .TE
        !           224: .in +2n
        !           225: .)b
        !           226: .pp
        !           227: All three expressions must be absolute.
        !           228: .i fill\*(USexpr ,
        !           229: treated as an expression of size
        !           230: .i size\*(USexpr
        !           231: bytes,
        !           232: is assembled and replicated
        !           233: .i rep\*(USexpr
        !           234: times.
        !           235: The effect is to advance the current location counter
        !           236: .i rep\*(USexpr
        !           237: \(**
        !           238: .i size\*(USexpr
        !           239: bytes.
        !           240: .i size\*(USexpr
        !           241: must be between 1 and 8.
        !           242: .SH 2 "Symbol Definitions"
        !           243: .SH 2 "Initialized Data"
        !           244: .(b
        !           245: .in -2n
        !           246: .TS
        !           247: lb l.
        !           248: \&.byte        $expr$ [ \fB,\fP $expr$ ]
        !           249: \&.word        $expr$ [ \fB,\fP $expr$ ]
        !           250: \&.int $expr$ [ \fB,\fP $expr$ ]
        !           251: \&.long        $expr$ [ \fB,\fP $expr$ ]
        !           252: .TE
        !           253: .in +2n
        !           254: .)b
        !           255: .pp
        !           256: The
        !           257: .i expression s
        !           258: in the comma-separated
        !           259: list are truncated to the size indicated by the key word:
        !           260: .(b
        !           261: .in -2n
        !           262: .TS
        !           263: center;
        !           264: c l
        !           265: cb n.
        !           266: keyword        length (bits)
        !           267: _
        !           268: \&.byte        8
        !           269: \&.word        16
        !           270: \&.int 32
        !           271: \&.long        32
        !           272: .TE
        !           273: .in +2n
        !           274: .)b
        !           275: and assembled in successive locations.
        !           276: The
        !           277: .i expression s
        !           278: must be absolute.
        !           279: .pp
        !           280: Each
        !           281: .i expression
        !           282: may optionally be of the form:
        !           283: .(b
        !           284: .TS
        !           285: center;
        !           286: l.
        !           287: $expression sub 1$ : $expression sub 2$
        !           288: .TE
        !           289: .)b
        !           290: In this case,
        !           291: the value of $expression sub 2$ is truncated
        !           292: to $expression sub 1$ bits,
        !           293: and assembled in the next $expression sub 1$ bit field
        !           294: which fits in the natural data size being assembled.
        !           295: Bits which are skipped because a field does not fit are filled with zeros.
        !           296: Thus,
        !           297: .q "\fB.byte\fP 123"
        !           298: is equivalent to
        !           299: .q "\fB.byte\fP 8:123" ,
        !           300: and
        !           301: .q "\fB.byte\fP 3:1,2:1,5:1"
        !           302: assembles two bytes, containing the values 9 and 1.
        !           303: .pp
        !           304: .b NB:
        !           305: Bit field initialization with the colon operator is likely
        !           306: to disappear in future releases of the assembler.
        !           307: .(b
        !           308: .in -2n
        !           309: .TS
        !           310: lb l.
        !           311: \&.quad        $number$ [ , $number$ ]
        !           312: \&.octa        $number$ [ , $number$ ]
        !           313: \&.float       $number$ [ , $number$ ]
        !           314: \&.double      $number$ [ , $number$ ]
        !           315: \&.ffloat      $number$ [ , $number$ ]
        !           316: \&.dfloat      $number$ [ , $number$ ]
        !           317: \&.gfloat      $number$ [ , $number$ ]
        !           318: \&.hfloat      $number$ [ , $number$ ]
        !           319: .TE
        !           320: .in +2n
        !           321: .)b
        !           322: .pp
        !           323: These initialize Bignums (see \(sc3.2.2)
        !           324: in successive locations whose size is a function on the key word.
        !           325: The type of the Bignums
        !           326: (determined by the exponent field, or lack thereof)
        !           327: may not agree with type implied by the key word.
        !           328: The following table shows the key words,
        !           329: their size,
        !           330: and the data types for the Bignums they expect.
        !           331: .(b
        !           332: .in -2n
        !           333: .TS
        !           334: center;
        !           335: c  l l l
        !           336: rb n l l.
        !           337: keyword        format  length (bits)   valid $number$(s)
        !           338: _
        !           339: \&.quad        quad scalar     64      scalar
        !           340: \&.octa        octal scalar    128     scalar
        !           341: \&.float       F float 32      F, D and scalar
        !           342: \&.ffloat      F float 32      F, D and scalar
        !           343: \&.double      D float 64      F, D and scalar
        !           344: \&.dfloat      D float 64      F, D and scalar
        !           345: \&.gfloat      G float 64      G scalar
        !           346: \&.hfloat      H float 128     H scalar
        !           347: .TE
        !           348: .in +2n
        !           349: .)b
        !           350: .pp
        !           351: .i As
        !           352: will correctly perform other floating point conversions while initializing,
        !           353: but issues a warning message.
        !           354: .i As
        !           355: performs all floating point initializations and conversions
        !           356: using only the facilities defined
        !           357: in the original (native) architecture.
        !           358: .(b
        !           359: .in -2n
        !           360: .TS
        !           361: lb l.
        !           362: \&.ascii       $string$ [ , $string$]
        !           363: \&.asciz       $string$ [ , $string$]
        !           364: .TE
        !           365: .in +2n
        !           366: .)b
        !           367: .pp
        !           368: Each
        !           369: .i string
        !           370: in the list is assembled into successive locations,
        !           371: with the first letter in the string being placed
        !           372: into the first location, etc.
        !           373: The
        !           374: .b .ascii
        !           375: directive will not null pad the string;
        !           376: the
        !           377: .b .asciz
        !           378: directive will null pad the string.
        !           379: (Recall that strings are known by their length,
        !           380: and need not be terminated with a null,
        !           381: and that the \*(CL conventions for escaping are understood.)
        !           382: The
        !           383: .b .ascii
        !           384: directive is identical to:
        !           385: .br
        !           386: .b .byte
        !           387: $string sub 0$
        !           388: .b ,
        !           389: $string sub 1$
        !           390: .b ,
        !           391: $...$
        !           392: .br
        !           393: .(b
        !           394: .in -2n
        !           395: .TS
        !           396: lb l.
        !           397: \&.comm        $name$\fB,\fP $expression$
        !           398: .TE
        !           399: .in +2n
        !           400: .)b
        !           401: .pp
        !           402: Provided the
        !           403: .i name
        !           404: is not defined elsewhere,
        !           405: its type is made
        !           406: .q "undefined external" ,
        !           407: and its value is
        !           408: .i expression .
        !           409: In fact the
        !           410: .i name
        !           411: behaves
        !           412: in the current assembly just like an
        !           413: undefined external.
        !           414: However,
        !           415: the link editor
        !           416: .i ld
        !           417: has been special-cased
        !           418: so that all external symbols which are not otherwise defined,
        !           419: and which have a non-zero value,
        !           420: are defined to lie in the bss segment,
        !           421: and enough space is left after the symbol to hold
        !           422: .i expression
        !           423: bytes.
        !           424: .(b
        !           425: .in -2n
        !           426: .TS
        !           427: lb l.
        !           428: \&.lcomm       $name$\fB,\fP $expression$
        !           429: .TE
        !           430: .in +2n
        !           431: .)b
        !           432: .pp
        !           433: .i expression
        !           434: bytes will be allocated in the bss segment and
        !           435: .i name
        !           436: assigned the location of the first byte,
        !           437: but the
        !           438: .i name
        !           439: is not declared
        !           440: as global and hence will be unknown to the link editor.
        !           441: .(b
        !           442: .in -2n
        !           443: .TS
        !           444: lb l.
        !           445: \&.globl       $name$
        !           446: .TE
        !           447: .in +2n
        !           448: .)b
        !           449: .pp
        !           450: This statement makes the
        !           451: .i name
        !           452: external.
        !           453: If it is otherwise defined (by
        !           454: .b .set
        !           455: or by
        !           456: appearance as a label)
        !           457: it acts within the assembly exactly as if
        !           458: the
        !           459: .b .globl
        !           460: statement were not given;
        !           461: however,
        !           462: the link editor may be used
        !           463: to combine this object module with other modules referring to this symbol.
        !           464: .pp
        !           465: Conversely,
        !           466: if the given symbol is not defined
        !           467: within the current assembly,
        !           468: the link editor can combine the output of this assembly
        !           469: with that of others which define the symbol.
        !           470: The assembler makes all otherwise
        !           471: undefined symbols external.
        !           472: .(b
        !           473: .in -2n
        !           474: .TS
        !           475: lb l.
        !           476: \&.set $name$\fB,\fP $expression$
        !           477: .TE
        !           478: .in +2n
        !           479: .)b
        !           480: .pp
        !           481: The ($name$, $expression$)
        !           482: pair is entered into the symbol table.
        !           483: Multiple
        !           484: .b .set
        !           485: statements with the same name are legal;
        !           486: the most recent value replaces all previous values.
        !           487: .(b
        !           488: .in -2n
        !           489: .TS
        !           490: lb l.
        !           491: \&.lsym\&      $name$\fB,\fP $expression$
        !           492: .TE
        !           493: .in +2n
        !           494: .)b
        !           495: .pp
        !           496: A unique and otherwise unreferencable instance of the
        !           497: ($name$, $expression$)
        !           498: pair is created in the symbol table.
        !           499: The Fortran 77 compiler uses this mechanism to pass local symbol definitions
        !           500: to the link editor and debugger.
        !           501: .(b
        !           502: .in -2n
        !           503: .TS
        !           504: lb l.
        !           505: \&.stabs       $string$, $expr sub 1$, $expr sub 2$, $expr sub 3$, $expr sub 4$
        !           506: \&.stabn       $expr sub 1$, $expr sub 2$, $expr sub 3$, $expr sub 4$
        !           507: \&.stabd       $expr sub 1$, $expr sub 2$, $expr sub 3$
        !           508: .TE
        !           509: .in +2n
        !           510: .)b
        !           511: .pp
        !           512: The
        !           513: .i stab
        !           514: directives place symbols in the symbol table for the symbolic
        !           515: debugger,
        !           516: .i sdb \**.
        !           517: .(f
        !           518: \**Katseff, H.P.
        !           519: .i "Sdb: A Symbol Debugger."
        !           520: Bell Laboratories, Holmdel,
        !           521: NJ.  April 12, 1979.
        !           522: .br
        !           523: Katseff, H.P.
        !           524: .i "Symbol Table Format for Sdb",
        !           525: File 39394,
        !           526: Bell Laboratories, Holmdel, NJ. March 14, 1979.
        !           527: .)f
        !           528: A
        !           529: .q stab
        !           530: is a 
        !           531: .i s ymbol
        !           532: .i tab le
        !           533: entry.
        !           534: The
        !           535: .b .stabs
        !           536: is a string stab, the
        !           537: .b .stabn
        !           538: is a stab not having a string,
        !           539: and the
        !           540: .b .stabd
        !           541: is a 
        !           542: .q dot
        !           543: stab that implicitly references
        !           544: .q dot ,
        !           545: the current location counter.
        !           546: .pp
        !           547: The
        !           548: .i string
        !           549: in the
        !           550: .b .stabs
        !           551: directive is the name of a symbol.
        !           552: If the symbol name is zero,
        !           553: the
        !           554: .b .stabn
        !           555: directive may be used instead.
        !           556: .pp
        !           557: The other expressions are stored
        !           558: in the name list structure
        !           559: of the symbol table
        !           560: and preserved by the loader for reference by
        !           561: .i sdb ;
        !           562: the value of the expressions are peculiar to formats required by
        !           563: .i sdb .
        !           564: .nr ii \w'$expr sub 1$\ \ 'u
        !           565: .ip $expr sub 1$
        !           566: is used as a symbol table tag
        !           567: (nlist field
        !           568: .i n\*(UStype ).
        !           569: .ip $expr sub 2$
        !           570: seems to always be zero
        !           571: (nlist field
        !           572: .i n\*(USother ).
        !           573: .ip $expr sub 3$
        !           574: is used for either the
        !           575: source line number,
        !           576: or for a nesting level
        !           577: (nlist field
        !           578: .i n\*(USdesc ).
        !           579: .ip $expr sub 4$
        !           580: is used as tag specific information
        !           581: (nlist field
        !           582: .i n\*(USvalue ).
        !           583: In the
        !           584: case of the
        !           585: .b .stabd
        !           586: directive, this expression is nonexistent, and
        !           587: is taken to be the value of the location counter
        !           588: at the following instruction.
        !           589: Since there is no associated name for a
        !           590: .b .stabd
        !           591: directive,
        !           592: it can
        !           593: only be used in circumstances where the name is zero.
        !           594: The effect of a
        !           595: .b .stabd
        !           596: directive can be achieved by one of the other
        !           597: .b .stab x
        !           598: directives in the following manner:
        !           599: .br
        !           600: $bold .stabn$ $expr sub 1$, $expr sub 2$, $expr sub 3$, $roman LL n$
        !           601: .br
        !           602: $roman LL n bold :$
        !           603: .pp
        !           604: The
        !           605: .b .stabd
        !           606: directive is preferred,
        !           607: because it does not clog the symbol
        !           608: table with labels used only for the stab symbol entries.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.