|
|
1.1 ! root 1: .pa 1 ! 2: .he '1/15/73''AS (I)' ! 3: .ti 0 ! 4: NAME as -- assembler ! 5: .sp ! 6: .ti 0 ! 7: SYNOPSIS as__ [ -_ ] name918 ... ! 8: .sp ! 9: .ti 0 ! 10: DESCRIPTION as__ ! 11: assembles the concatenation of name\d1\u, .... as__ ! 12: is based on the DEC-provided assembler PAL-11R [1], although ! 13: it was coded locally. ! 14: Therefore, only the differences will be recorded. ! 15: .sp ! 16: If the optional first argument ! 17: -_ is used, ! 18: all undefined symbols in the assembly ! 19: are treated as global. ! 20: .sp ! 21: Character changes are: ! 22: .sp ! 23: for use ! 24: @ * ! 25: # $ ! 26: ; / ! 27: .sp ! 28: In as__, the character ";" is a logical new line; several operations ! 29: may appear on one line if separated by ";". ! 30: Several new expression operators have been provided: ! 31: .sp ! 32: \\> right shift (logical) ! 33: \\< left shift ! 34: * multiplication ! 35: \\/ division ! 36: .nf ! 37: % remainder (no longer means "register") ! 38: | inclusive or ! 39: .fi ! 40: ! one's complement ! 41: [] parentheses for grouping ! 42: .nf ! 43: ^ result has value of left, type of right ! 44: .sp ! 45: .fi ! 46: For example location 0 (relocatable) can be written "0^."; ! 47: another way to denote register 2 is "2^r0". ! 48: ! 49: All of the preceding operators are binary; if ! 50: a left operand is missing, it is taken ! 51: to be 0. ! 52: The "!" operator adds its left operand to the one's ! 53: complement of its right operand. ! 54: ! 55: All operators evaluate left-to-right except for ! 56: the effect of brackets; all operators have the ! 57: same priority. ! 58: ! 59: There is a conditional assembly operation code different ! 60: from that of PAL-11R (whose conditionals are not provided): ! 61: .sp ! 62: .if expression ! 63: ... ! 64: .endif ! 65: .sp ! 66: If the expression__________ evaluates to non-zero, the section of ! 67: code between the ".if" and the ".endif" is assembled; otherwise ! 68: it is ignored. ".if"s may be nested. ! 69: .sp ! 70: Temporary labels like those introduced by Knuth [2] may ! 71: be employed. ! 72: A temporary label is defined as follows: ! 73: .sp ! 74: n: ! 75: .sp ! 76: where n_ is a digit 0 ... 9. Symbols of the form "n_f" refer to the ! 77: first label "n_:" following the use of the symbol; those ! 78: of the form "n_b" refer to the last "n_:". The same "n_" may ! 79: be used many times. ! 80: Labels of this form are less taxing both on the ! 81: imagination of the programmer and on the symbol table space ! 82: of the assembler. ! 83: .sp ! 84: The PAL-11R opcodes ".word", ".eot" and ".end" are redundant and are omitted. ! 85: .sp ! 86: The symbols ! 87: .sp ! 88: r0 ... r5 ! 89: fr0 ... fr5 (floating-point registers) ! 90: sp ! 91: pc ! 92: .. ! 93: .sp ! 94: are predefined with appropriate values. ! 95: ".." is the relocation constant and is added to ! 96: each relocatable reference. ! 97: On a PDP-11 with relocation hardware, its value is ! 98: 0; on most systems without protection, ! 99: its value is 40000(8). ! 100: .sp ! 101: The new opcode "sys" is used to specify system ! 102: calls. ! 103: Names for system calls are predefined. ! 104: See section (II). ! 105: .sp ! 106: The opcodes "bes" (branch on error set) ! 107: and "bec" (branch on error clear) ! 108: are defined to test the error status bit ! 109: set on return from system calls. ! 110: .sp ! 111: Strings of characters may be assembled in a way more ! 112: convenient than PAL-11's ".ascii" operation (which is, ! 113: therefore, omitted). Strings are included between the ! 114: string quotes "<" and ">": ! 115: .sp ! 116: <here is a string> ! 117: .sp ! 118: Escape sequences exist to enter non graphic ! 119: and other difficult characters. These sequences are ! 120: also effective in single and double character constants introduced ! 121: by single (') and double (") quotes respectively. ! 122: .sp ! 123: use___ for___ ! 124: \\n newline (012) ! 125: \\0 NULL (000) ! 126: \\> > ! 127: \\t TAB (011) ! 128: \\a ACK (006) ! 129: \\r CR (015) ! 130: \\p ESC (033) ! 131: \\\\ \\ (134) ! 132: .sp ! 133: as__ provides a primitive segmentation facility. ! 134: There are three segments: text____, data____ and ! 135: bss___. ! 136: The text segment is ordinarily used for ! 137: code. The data segment is provided ! 138: for initialized but variable data. ! 139: The bss segment cannot be initialized, but ! 140: symbols may be defined to lie within this ! 141: segment. ! 142: In the future, it is expected that the ! 143: text segment will be write-protected and sharable. ! 144: Assembly begins in the text segment. ! 145: The pseudo-operations ! 146: ! 147: .text ! 148: .data ! 149: .bss ! 150: ! 151: cause the assembler ! 152: to switch to the text, data, or bss segment respectively. ! 153: Segmentation is useful at present ! 154: for two reasons: ! 155: Non-initialized ! 156: tables and variables, if placed ! 157: in the bss segment, occupy no space in the ! 158: output file. ! 159: Also, alternative use of the ! 160: text and data segments provides a primitive ! 161: dual location-counter feature. ! 162: ! 163: In the output file, all text-segment information comes ! 164: first, followed by all data-segment information, ! 165: and finally bss information. ! 166: Within each segment, information appears in ! 167: the order written. ! 168: ! 169: Note: ! 170: since nothing explicit can be assembled ! 171: into the bss segment, the usual appearance ! 172: of this segment is in the following style: ! 173: ! 174: .bss ! 175: var1: .=.+2 ! 176: tab1: .=.+100. ! 177: ... ! 178: ! 179: That is, space is reserved but nothing explicit ! 180: is placed in it. ! 181: ! 182: As is evident from the example, it is legal to ! 183: assign to the location counter ".". ! 184: It is also permissible in segments other than ".bss". ! 185: The restriction is made, however, ! 186: that the value so assigned must be defined ! 187: in the first pass and it must be a value ! 188: associated with the same segment as ".". ! 189: ! 190: The pseudo-op ! 191: ! 192: .comm symbol,expression ! 193: ! 194: makes symbol______ an undefined global symbol, ! 195: and places the value of the expression in ! 196: the value field of the symbol's definition. ! 197: Thus the above declaration is equivalent to ! 198: ! 199: .globl symbol ! 200: symbol = expression ^ symbol ! 201: ! 202: The treatment of such a symbol by the loader ld(I) ! 203: is as follows: ! 204: If another routine in the same load defines the symbol to be an ordinary ! 205: text, data, bss, or absolute symbol, ! 206: that definition takes precedence and the symbol ! 207: acts like a normal undefined external. ! 208: If however no other routine defines the symbol, the loader ! 209: defines it as an external bss-segment symbol ! 210: and reserves n_ bytes after its location, ! 211: where n_ is the value of the expression in the .comm ! 212: operation. ! 213: Thus ".comm x,100" ! 214: effectively declares x to be a common region 100 ! 215: bytes long. ! 216: Note: all such declarations for the same symbol ! 217: in various routines should request the same amount ! 218: of space. ! 219: .sp ! 220: The binary output of the assembler is placed on the file "a.out" in the ! 221: current directory. ! 222: a.out_____ also contains the symbol table from the assembly ! 223: and relocation bits. ! 224: The output of the assembler is executable immediately ! 225: if the assembly was error-free and if there were no ! 226: unresolved external references. ! 227: The link editor ld__ may be used to combine several ! 228: assembly outputs and resolve global symbols. ! 229: .sp ! 230: The assembler does not produce a listing of the source program. ! 231: This is not a serious drawback; the debugger db__ discussed ! 232: below is sufficiently powerful to render a printed ! 233: octal translation of the source unnecessary. ! 234: ! 235: On the last pages of this section is a list of all the assembler's ! 236: built-in symbols. ! 237: In the case of instructions, the addressing modes ! 238: are as follows: ! 239: ! 240: .nf ! 241: src, dst source, destination ! 242: r general register ! 243: fsrc,fdst floating source, destination ! 244: fr floating register ! 245: exp expression ! 246: ! 247: .fi ! 248: The names of certain 11/45 opcodes are different ! 249: from those in the 11/45 manual ! 250: to draw analogies with existing 11/20 instructions. ! 251: ..pa +2 ! 252: ! 253: .ti 0 ! 254: FILES /etc/as2 pass 2 of the assembler ! 255: .br ! 256: /tmp/atm1? temporary ! 257: .br ! 258: /tmp/atm2? temporary ! 259: .br ! 260: /tmp/atm3? temporary ! 261: .br ! 262: a.out object ! 263: .sp ! 264: .ti 0 ! 265: SEE ALSO ld(I), ! 266: nm(I), ! 267: sh(I), ! 268: un(I), ! 269: db(I), ! 270: a.out(V), ! 271: [1] PAL-11R Assembler; ! 272: DEC-11-ASDB-D, ! 273: [2] Knuth, ! 274: .ul ! 275: The Art of Computer Programming, ! 276: Vol. I; Fundamental Algorithms., ! 277: "UNIX Assembler Manual" (in preparation). ! 278: .sp ! 279: .ti 0 ! 280: DIAGNOSTICS When ! 281: an input file cannot be read, its name ! 282: followed by a question mark is typed and assembly ! 283: ceases. ! 284: When syntactic or semantic errors occur, a single-character diagnostic is typed out ! 285: together with the line number and the file name in which it ! 286: occurred. Errors in pass 1 cause cancellation of pass 2. ! 287: The possible errors are: ! 288: .sp ! 289: .in +6 ! 290: .ti -6 ! 291: ) parentheses error ! 292: .ti -6 ! 293: ] parentheses error ! 294: .ti -6 ! 295: < String not terminated properly ! 296: .ti -6 ! 297: * Indirection ("*_") used illegally ! 298: .ti -6 ! 299: .li ! 300: . Illegal assignment to "." ! 301: .ti -6 ! 302: A error in A_ddress ! 303: .ti -6 ! 304: B B_ranch instruction is odd or too remote ! 305: .ti -6 ! 306: E error in E_xpression ! 307: .ti -6 ! 308: F error in local ("F_" or "b") type symbol ! 309: .ti -6 ! 310: G G_arbage (unknown) character ! 311: .ti -6 ! 312: I End of file inside an If__ ! 313: .ti -6 ! 314: M M_ultiply defined symbol as label ! 315: .ti -6 ! 316: O O_dd-- word quantity assembled at odd address ! 317: .ti -6 ! 318: P P_hase error-- "." different in pass 1 and 2 ! 319: .ti -6 ! 320: R R_elocation error ! 321: .ti -6 ! 322: U U_ndefined symbol ! 323: .ti -6 ! 324: X syntaX_ error ! 325: .in -6 ! 326: .sp ! 327: .ti 0 ! 328: BUGS Symbol table overflow is not checked. ! 329: .sp ! 330: If "." is moved backwards by an odd number of bytes, ! 331: relocation bits are corrupted.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.