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

1.1     ! root        1: .\"
        !             2: .\"    Copyright (c) 1982 Regents of the University of California
        !             3: .\"    @(#)asdocs2.me 1.6 2/11/83
        !             4: .\"
        !             5: .EQ
        !             6: delim $$
        !             7: .EN
        !             8: .SH 1 "Statements"
        !             9: .pp
        !            10: A source program is composed of a sequence of
        !            11: .i statements .
        !            12: Statements are separated either by new-lines
        !            13: or by semicolons.
        !            14: There are two kinds of statements: null statements
        !            15: and keyword statements.
        !            16: Either kind of statement may be preceded by
        !            17: one or more labels.
        !            18: .SH 2 "Named Global Labels"
        !            19: .pp
        !            20: A global label consists of a name followed
        !            21: by a colon.
        !            22: The effect of a name label is to assign the current
        !            23: value and type of the location counter
        !            24: to the name.
        !            25: An error is indicated in pass 1 if the
        !            26: name is already defined;
        !            27: an error is indicated in pass 2 if the
        !            28: value assigned changes the definition
        !            29: of the label.
        !            30: .pp
        !            31: A global label is referenced by its name.
        !            32: .pp
        !            33: Global labels beginning with a
        !            34: .q "\|L\|"
        !            35: are discarded unless the
        !            36: .b \-L
        !            37: option
        !            38: is in effect.
        !            39: .SH 2 "Numeric Local Labels"
        !            40: .pp
        !            41: A numeric label consists of a digit  $0$ to $9$
        !            42: followed by a colon.
        !            43: Such a label serves to define temporary symbols of the form
        !            44: .q "$n roman b$"
        !            45: and
        !            46: .q "$n roman f$" ,
        !            47: where $n$
        !            48: is the digit of the label.
        !            49: As in the case of name labels,
        !            50: a numeric label assigns
        !            51: the current value and type of the location counter
        !            52: to the temporary symbol.
        !            53: However, several numeric labels with the same digit
        !            54: may be used within the same assembly.
        !            55: References to symbols of the form
        !            56: .q "$n roman b$"
        !            57: refer to the first numeric label
        !            58: .q "$n$:"
        !            59: .i b ackwards
        !            60: from the reference;
        !            61: .q "$n roman f$"
        !            62: symbols refer to the first numeric label
        !            63: .q "$n$:"
        !            64: .i f orwards
        !            65: from the reference.
        !            66: Such numeric labels conserve the inventive powers
        !            67: of the human programmer.
        !            68: .pp
        !            69: For various reasons,
        !            70: .i as
        !            71: turns local labels into labels of the form
        !            72: $roman L n roman ".\*(DL" m$.
        !            73: Although unlikely,
        !            74: these generated labels may conflict
        !            75: with programmer defined labels.
        !            76: .SH 2 "Null statements"
        !            77: .pp
        !            78: A null statement is an empty statement ignored by the assembler.
        !            79: A null statement may be labeled, however.
        !            80: .SH 2 "Keyword statements"
        !            81: .pp
        !            82: A keyword statement begins with one of the many predefined
        !            83: keywords known to
        !            84: .i as ;
        !            85: the syntax of the remainder of the statement depends
        !            86: on the keyword.
        !            87: All instruction opcodes are keywords.
        !            88: The remaining keywords are assembler pseudo-operations,
        !            89: also called
        !            90: .i directives .
        !            91: The pseudo-operations are listed in \(sc8,
        !            92: together with the syntax they require.
        !            93: .SH 1 "Expressions"
        !            94: .pp
        !            95: An expression is a sequence of symbols representing a value.
        !            96: Its constituents are identifiers,
        !            97: constants,
        !            98: operators,
        !            99: and parentheses.
        !           100: Each expression has a type.
        !           101: .pp
        !           102: All operators in expressions are fundamentally binary in
        !           103: nature.
        !           104: Arithmetic is two's complement and has 32 bits of precision.
        !           105: .i As
        !           106: can not do arithmetic on floating point numbers, quad or octal
        !           107: precision scalar numbers.
        !           108: There are four levels of precedence,
        !           109: listed here from
        !           110: lowest precedence level to highest:
        !           111: .(b
        !           112: .TS
        !           113: center;
        !           114: c l.
        !           115: precedence     operators
        !           116: _
        !           117: binary $+$, $-$
        !           118: binary \fI\(bv\fP\|, $&$, $italic "^"$, $!$
        !           119: binary $*$, $/$, $%$,
        !           120: unary  $-$, $italic "~"$
        !           121: .TE
        !           122: .)b
        !           123: .pp
        !           124: All operators of the same precedence are evaluated strictly left to right,
        !           125: except for the evaluation order enforced by parenthesis.
        !           126: .SH 2 "Expression Operators"
        !           127: .pp
        !           128: The operators are:
        !           129: .(b
        !           130: .TS
        !           131: center;
        !           132: c l.
        !           133: operator       meaning
        !           134: _
        !           135: $+$    addition
        !           136: $-$    (binary) subtraction
        !           137: $*$    multiplication
        !           138: $/$    division
        !           139: $%$    modulo
        !           140: $-$    (unary) 2's complement
        !           141: $&$    bitwise and
        !           142: $\(bv$ bitwise or
        !           143: $italic "^"$   bitwise exclusive or
        !           144: $!$    bitwise or not
        !           145: $italic "~"$   bitwise 1's complement
        !           146: $>$    logical right shift
        !           147: $>>$   logical right shift
        !           148: $<$    logical left shift
        !           149: $<<$   logical left shift
        !           150: .TE
        !           151: .)b
        !           152: .pp
        !           153: Expressions may be grouped by use of parentheses,
        !           154: .q "("
        !           155: and
        !           156: .q ")".
        !           157: .SH 2 "Data Types"
        !           158: .pp
        !           159: The assembler manipulates several different
        !           160: types of expressions.
        !           161: The types likely to be met explicitly are:
        !           162: .nr ii \w'undefined\ \ 'u
        !           163: .ip "undefined" 
        !           164: Upon first encounter,
        !           165: each symbol is undefined.
        !           166: It may become undefined if it is assigned an undefined expression.
        !           167: It is an error to attempt to assemble an undefined
        !           168: expression in pass 2;
        !           169: in pass 1,
        !           170: it is not (except that
        !           171: certain keywords require operands which are not undefined).
        !           172: .ip "undefined\ external" 
        !           173: A symbol which is declared
        !           174: .b .globl
        !           175: but not defined
        !           176: in the current assembly is an undefined external.
        !           177: If such a symbol is declared,
        !           178: the link editor
        !           179: .i ld
        !           180: must be used to load the assembler's output with
        !           181: another routine that defines the undefined reference.
        !           182: .ip "absolute"
        !           183: An absolute symbol is defined ultimately from a constant.
        !           184: Its value is unaffected by any possible future applications
        !           185: of the link-editor to the output file.
        !           186: .ip "text"
        !           187: The value of a text symbol is measured
        !           188: with respect to the beginning of the text segment of the program.
        !           189: If the assembler output is link-edited,
        !           190: its text symbols may change in value
        !           191: since the program need
        !           192: not be the first in the link editor's output.
        !           193: Most text symbols are defined by appearing as labels.
        !           194: At the start of an assembly,
        !           195: the value of
        !           196: .q "\|\fB.\fP\|"
        !           197: is
        !           198: .q "text 0" .
        !           199: .ip "data"
        !           200: The value of a data symbol is measured
        !           201: with respect to the origin of the data segment of a program.
        !           202: Like text symbols,
        !           203: the value of a data symbol may change
        !           204: during a subsequent link-editor run since previously
        !           205: loaded programs may have data segments.
        !           206: After the first
        !           207: .b .data
        !           208: statement,
        !           209: the value of
        !           210: .q "\|\fB.\fP\|"
        !           211: is
        !           212: .q "data 0".
        !           213: .ip "bss"
        !           214: The value of a bss symbol is measured from
        !           215: the beginning of the bss segment of a program.
        !           216: Like text and data symbols,
        !           217: the value of a bss symbol
        !           218: may change during a subsequent link-editor run,
        !           219: since previously loaded programs may have bss segments.
        !           220: .ip "external\ absolute,\ text,\ data,\ or\ bss" 
        !           221: Symbols declared
        !           222: .b .globl
        !           223: but defined within an assembly as absolute,
        !           224: text,
        !           225: data,
        !           226: or bss
        !           227: symbols may be used exactly as if they were not
        !           228: declared
        !           229: .b .globl ;
        !           230: however, their value and type are available
        !           231: to the link editor so that the program may be loaded with others
        !           232: that reference these symbols.
        !           233: .ip "register"
        !           234: The symbols
        !           235: .(q
        !           236: .b "r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15"
        !           237: .b "ap fp sp pc"
        !           238: .)q
        !           239: are predefined
        !           240: as register symbols.
        !           241: In addition, the 
        !           242: .q "%"
        !           243: operator converts the following absolute expression whose
        !           244: value is between 0 and 15 into a register reference.
        !           245: .ip "other\ types\ \ " 
        !           246: Each keyword known to the assembler has a type which
        !           247: is used to select the routine which processes
        !           248: the associated keyword statement.
        !           249: The behavior of such symbols
        !           250: when not used as keywords is the same as if they were absolute.
        !           251: .SH 2 "Type Propagation in Expressions"
        !           252: .pp
        !           253: When operands are combined by expression operators,
        !           254: the result has a type which depends on the types
        !           255: of the operands and on the operator.
        !           256: The rules involved are complex to state but
        !           257: were intended to be sensible and predictable.
        !           258: For purposes of expression evaluation the
        !           259: important types are
        !           260: .(b
        !           261: .TS
        !           262: center;
        !           263: l.
        !           264: undefined
        !           265: absolute
        !           266: text
        !           267: data
        !           268: bss
        !           269: undefined external
        !           270: other
        !           271: .TE
        !           272: .)b
        !           273: .pp
        !           274: The combination rules are then
        !           275: .nr ii 5n
        !           276: .np
        !           277: If one of the operands is undefined,
        !           278: the result is undefined.
        !           279: .np
        !           280: If both operands are absolute,
        !           281: the result is absolute.
        !           282: .np
        !           283: If an absolute is combined with one of the
        !           284: .q "other types"
        !           285: mentioned above,
        !           286: the result has the other type.
        !           287: An
        !           288: .q "other type"
        !           289: combined with an explicitly
        !           290: discussed type other than absolute
        !           291: it acts like an absolute.
        !           292: .pp
        !           293: Further rules applying to particular operators are:
        !           294: .ip "$+$"
        !           295: If one operand is text-, data-, or bss-segment
        !           296: relocatable, or is an undefined external,
        !           297: the result has the postulated type and the other operand
        !           298: must be absolute.
        !           299: .ip $-$
        !           300: If the first operand is a relocatable
        !           301: text-, data-, or bss-segment symbol, the second operand
        !           302: may be absolute (in which case the result has the
        !           303: type of the first operand);
        !           304: or the second operand may have the same type
        !           305: as the first (in which case the result is absolute).
        !           306: If the first operand is external undefined,
        !           307: the second must be absolute.
        !           308: All other combinations are illegal.
        !           309: .ip others
        !           310: It is illegal to apply these operators to any but absolute symbols.

unix.superglobalmegacorp.com

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