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

1.1     ! root        1: .\"
        !             2: .\"    Copyright (c) 1982 Regents of the University of California
        !             3: .\"    @(#)asdocs4.me 1.9 7/1/83
        !             4: .\"
        !             5: .EQ
        !             6: delim $$
        !             7: .EN
        !             8: .SH 1 "Machine instructions"
        !             9: .pp
        !            10: The syntax of machine instruction statements accepted by
        !            11: .i as
        !            12: is generally similar to the syntax of \*(DM.
        !            13: There are differences,
        !            14: however.
        !            15: .SH 2 "Character set"
        !            16: .pp
        !            17: .i As
        !            18: uses the character
        !            19: .q \*(DL
        !            20: instead of
        !            21: .q # 
        !            22: for immediate constants,
        !            23: and the character
        !            24: .q *
        !            25: instead of
        !            26: .q @ 
        !            27: for indirection.
        !            28: Opcodes and register names
        !            29: are spelled with lower-case rather than upper-case letters.
        !            30: .SH 2 "Specifying Displacement Lengths"
        !            31: .pp
        !            32: Under certain circumstances,
        !            33: the following constructs are (optionally) recognized by
        !            34: .i as
        !            35: to indicate the number of bytes to allocate for
        !            36: the displacement used when constructing
        !            37: displacement and displacement deferred addressing modes:
        !            38: .(b
        !            39: .TS
        !            40: center;
        !            41: c c l
        !            42: cb cb l.
        !            43: primary        alternate       length
        !            44: _
        !            45: B\`    B^      byte (1 byte)
        !            46: W\`    W^      word (2 bytes)
        !            47: L\`    L^      long word (4 bytes)
        !            48: .TE
        !            49: .)b
        !            50: .pp
        !            51: One can also use lower case
        !            52: .b b ,
        !            53: .b w
        !            54: or
        !            55: .b l
        !            56: instead of the upper
        !            57: case letters.
        !            58: There must be no space between the size specifier letter and the
        !            59: .q "^"
        !            60: or
        !            61: .q "\`" .
        !            62: The constructs
        !            63: .b "S^"
        !            64: and
        !            65: .b "G^"
        !            66: are not recognized
        !            67: by
        !            68: .i as ,
        !            69: as they are by the \*(DM assembler.
        !            70: It is preferred to use the 
        !            71: .q "\`" displacement specifier,
        !            72: so that the
        !            73: .q "^"
        !            74: is not
        !            75: misinterpreted as the
        !            76: .b xor
        !            77: operator.
        !            78: .pp
        !            79: Literal values
        !            80: (including floating-point literals used where the
        !            81: hardware expects a floating-point operand)
        !            82: are assembled as short
        !            83: literals if possible,
        !            84: hence not needing the
        !            85: .b "S^"
        !            86: \*(DM directive.
        !            87: .pp
        !            88: If the displacement length modifier is present,
        !            89: then the displacement is 
        !            90: .b always
        !            91: assembled with that displacement,
        !            92: even if it will fit into a smaller field,
        !            93: or if significance is lost.
        !            94: If the length modifier is not present,
        !            95: and if the value of the displacement is known exactly in
        !            96: .i as 's
        !            97: first pass,
        !            98: then
        !            99: .i as
        !           100: determines the length automatically,
        !           101: assembling it in the shortest possible way,
        !           102: Otherwise,
        !           103: .i  as
        !           104: will use the value specified by the
        !           105: .b \-d
        !           106: argument,
        !           107: which defaults to 4 bytes.
        !           108: .SH 2 "case\fIx\fP Instructions"
        !           109: .pp
        !           110: .i As
        !           111: considers the instructions
        !           112: .b caseb ,
        !           113: .b casel ,
        !           114: .b casew
        !           115: to have three operands.
        !           116: The displacements must be explicitly computed by 
        !           117: .i as ,
        !           118: using one or more
        !           119: .b .word
        !           120: statements.
        !           121: .SH 2 "Extended branch instructions"
        !           122: .pp
        !           123: These opcodes (formed in general
        !           124: by substituting a
        !           125: .q j
        !           126: for the initial
        !           127: .q b
        !           128: of the standard opcodes)
        !           129: take as branch destinations
        !           130: the name of a label in the current subsegment.
        !           131: It is an error if the destination is known to be in a different subsegment,
        !           132: and it is a warning if the destination is not defined within
        !           133: the object module being assembled.
        !           134: .pp
        !           135: If the branch destination is close enough,
        !           136: then the corresponding
        !           137: short branch
        !           138: .q b
        !           139: instruction is assembled.
        !           140: Otherwise the assembler choses a sequence
        !           141: of one or more instructions which together have the same effect as if the
        !           142: .q b
        !           143: instruction had a larger span.
        !           144: In general,
        !           145: .i as
        !           146: chooses the inverse branch followed by a
        !           147: .b brw ,
        !           148: but a
        !           149: .b brw
        !           150: is sometimes pooled among several
        !           151: .q j
        !           152: instructions with the same destination.
        !           153: .pp
        !           154: .i As
        !           155: is unable to perform the same long/short branch generation
        !           156: for other instructions with a fixed byte displacement,
        !           157: such as the
        !           158: .b sob ,
        !           159: .b aob 
        !           160: families,
        !           161: or for the
        !           162: .b acbx
        !           163: family of instructions which has a fixed word displacement.
        !           164: This would be desirable,
        !           165: but is prohibitive because of the complexity of these instructions.
        !           166: .pp
        !           167: If the
        !           168: .b \-J
        !           169: assembler option is given,
        !           170: a
        !           171: .b jmp
        !           172: instruction is used instead of a
        !           173: .b brw
        !           174: instruction
        !           175: for
        !           176: .b ALL
        !           177: .q j
        !           178: instructions with distant destinations.
        !           179: This makes assembly of large (>32K bytes)
        !           180: programs (inefficiently)
        !           181: possible.
        !           182: .i As
        !           183: does not try to use clever combinations of
        !           184: .b brb ,
        !           185: .b brw
        !           186: and
        !           187: .b jmp
        !           188: instructions.
        !           189: The
        !           190: .b jmp
        !           191: instructions use PC relative addressing,
        !           192: with the length of the offset given by the
        !           193: .b \-d
        !           194: assembler
        !           195: option.
        !           196: .pp
        !           197: These are the extended branch instructions
        !           198: .i as
        !           199: recognizes:
        !           200: .(b
        !           201: .TS
        !           202: center;
        !           203: lb lb lb.
        !           204: jeql   jeqlu   jneq    jnequ
        !           205: jgeq   jgequ   jgtr    jgtru
        !           206: jleq   jlequ   jlss    jlssu
        !           207: jbcc   jbsc    jbcs    jbss
        !           208: 
        !           209: jlbc   jlbs
        !           210: jcc    jcs     
        !           211: jvc    jvs
        !           212: jbc    jbs
        !           213: jbr
        !           214: .TE
        !           215: .)b
        !           216: .pp
        !           217: Note that
        !           218: .b jbr
        !           219: turns into
        !           220: .b brb
        !           221: if its target is close enough;
        !           222: otherwise a
        !           223: .b brw
        !           224: is used.
        !           225: .SH 1 "Diagnostics"
        !           226: .pp
        !           227: Diagnostics are intended to be self explanatory and appear on
        !           228: the standard output.
        !           229: Diagnostics either report an
        !           230: .i error
        !           231: or a
        !           232: .i warning.
        !           233: Error diagnostics complain about lexical, syntactic and some
        !           234: semantic errors, and abort the assembly.
        !           235: .pp
        !           236: The majority of the warnings complain about the use of \*(VX
        !           237: features not supported by all implementations of the architecture.
        !           238: .i As
        !           239: will warn if new opcodes are used,
        !           240: if
        !           241: .q G
        !           242: or
        !           243: .q H
        !           244: floating point numbers are used
        !           245: and will complain about mixed floating conversions.
        !           246: .SH 1 "Limits"
        !           247: .(b
        !           248: .TS
        !           249: center;
        !           250: l l.
        !           251: limit  what
        !           252: _
        !           253: Arbitrary\**   Files to assemble
        !           254: BUFSIZ Significant characters per name
        !           255: Arbitrary      Characters per input line
        !           256: Arbitrary      Characters per string
        !           257: Arbitrary      Symbols
        !           258: 4      Text segments
        !           259: 4      Data segments
        !           260: .TE
        !           261: .)b
        !           262: .(f
        !           263: \**Although the number of characters available to the \fIargv\fP line
        !           264: is restricted by \*(UX to 10240.
        !           265: .)f
        !           266: .SH 1 "Annoyances and Future Work"
        !           267: .pp
        !           268: Most of the annoyances deal with restrictions on the extended
        !           269: branch instructions.
        !           270: .pp
        !           271: .i As
        !           272: only uses a two level algorithm for resolving extended branch
        !           273: instructions into short or long displacements.
        !           274: What is really needed is a general mechanism
        !           275: to turn a short conditional jump into a 
        !           276: reverse conditional jump over one of
        !           277: .b two
        !           278: possible unconditional branches,
        !           279: either a
        !           280: .b brw
        !           281: or a 
        !           282: .b jmp
        !           283: instruction.
        !           284: Currently, the 
        !           285: .b \-J
        !           286: forces the
        !           287: .b jmp
        !           288: instruction to
        !           289: .i always
        !           290: be used,
        !           291: instead of the
        !           292: shorter
        !           293: .b brw
        !           294: instruction when needed.
        !           295: .pp
        !           296: The assembler should also recognize extended branch instructions for
        !           297: .b sob ,
        !           298: .b aob ,
        !           299: and
        !           300: .b acbx
        !           301: instructions.
        !           302: .b Sob
        !           303: instructions will be easy,
        !           304: .b aob
        !           305: will be harder because the synthesized instruction
        !           306: uses the index operand twice,
        !           307: so one must be careful of side effects,
        !           308: and the
        !           309: .b acbx
        !           310: family will be much harder (in the general case)
        !           311: because the comparison depends on the sign of the addend operand,
        !           312: and two operands are used more than once.
        !           313: Augmenting
        !           314: .i as
        !           315: with these extended loop instructions
        !           316: will allow the peephole optimizer to produce much better
        !           317: loop optimizations,
        !           318: since it currently assumes the worst
        !           319: case about the size of the loop body.
        !           320: .pp
        !           321: The string temporary file is not put in memory when the -V flag is set.
        !           322: The string table in the generated a.out contains some strings
        !           323: and names that are never referenced from the symbol table;
        !           324: the loader removes these unreferenced strings, however.

unix.superglobalmegacorp.com

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