|
|
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.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.