[cc]mc | .so =fmac=/ugh .TP [cc]mc PDP-11 Cross Assembler Reference Manual [cc]mc | .AU [cc]mc Jack Waugh [cc]mc | .PD "May 31, 1978" .bp 1 .HE "PDP-11 Cross Assembler Reference Manual" [cc]mc .fo ''- # -'' [cc]mc | .mh "Overview" [cc]mc This manual describes the Cross Assembler for PDP-11's that is available under the Software Tools Subsystem on the Prime 400 computer of the Georgia Tech School of Information and Computer Science. The availability of the assembler makes it possible to develop assembly language programs for the GT40 on the Prime, where a useful set of program development tools (text editors, a macro processor, etc.) exists. .pp This manual does not attempt to cover the characteristics of the object machine at all. For that information, the reader is referred to any of Digital Equipment Corporation's PDP-11 Processor Handbooks and to their [cc]mc | [ul GT40/GT42 User's Guide]. [cc]mc .pp Although the cross assembler could be used (possibly with some modifications) to develop code for any PDP-11, it is heavily oriented toward the GT40 as an object machine. The GT40 is a PDP-11-based, refresh-CRT, graphic computer. The assembler has as predefined symbols all the display processor instructions of the GT40, as well as the bus addresses of its peripheral device registers. .# At present, the only form of executable object code the assembler produces is that required by the GT40's down-line bootstrap loader. .# [cc]mc | .CH "Assembler Invocation" .SH "Invoking Command" [cc]mc The invocation syntax is: [cc]mc | .be [cc]mc as11 [g][l[a]] [cc]mc | .ee [cc]mc The source program is always read from standard input. If "l" is specified, an object code listing will be written to standard output (STDOUT1); it will be generated for all passes if "a" is specified, otherwise only during the last pass. If the "g" option is specified, the object code will be written to the second output port (STDOUT2) in GT40 ROM loader format. If invoked with no argument, the assembler will check a program for errors but will produce neither a listing nor a GT40 load. .pp Since the listing and the GT40 load, if both requested, go to different output ports, it is possible to redirect the listing to a file while loading the GT40. If the source program is on a file called "term.s", for example, the following command will do this: [cc]mc | .be [cc]mc term.s> as11 gl >listing [cc]mc | .ee .SH "Listing Format" [cc]mc When listing is enabled, a line of listing output is produced every time a word or byte is generated and every time a symbol is assigned to (except for the automatic incrementing of the location counter every time a word or byte is generated). Each line of listing output begins with the line number of the source line responsible for the action being reported, followed by a colon (as in error messages). When an assignment is being reported, the symbol being assigned to is listed, followed by an equal sign, then the octal value that the symbol takes on. If the type that the symbol is taking on is not 'Absolute', a single letter type code is printed immediately to the right of the value (U for Undefined, O for Instruction (for Opcode symbol), R for Register, E for .even, b for .byte, S for .struct, r for .reserve, or B for Branch). When code is generated, the listed line is similar to the one for an assignment, except that in place of the variable assigned to, the address of the word or byte that is being generated is printed (in octal) within grouping symbols (read "contents of"). The grouping symbols are round parentheses when a word is being generated, and curly braces when a byte is being generated. [cc]mc | .SH "Error Messages" [cc]mc When a syntactic or semantic error is detected during assembly, an error message is written to the error output port (ERROUT or STDOUT3, usually assigned to the terminal). The error message always begins with the line number of the source line that incurred the error. If errors are detected during any pass, that pass is allowed to finish, but no more passes are made. .pp During the initial passes, references to undefined symbols do not constitute errors. Repeated passes are made over the input (the cost of lexical analysis being paid only during the first) so long as no errors are detected and the number of references to undefined symbols keeps decreasing. If a pass produces undefined references, but no fewer than the previous pass did, one final pass is made in which all the undefined references count as semantic errors and error messages are produced pointing to all the input lines that have them. .pp On the other hand, if a pass occurs in which (1) there are no undefined references, (2) there are no errors, and (3) either "g" was specified in the invoking command, or "l" without "a" was specified, then a final pass is made in which the listing (if requested) is produced and the GT40 load stream (if requested) is also produced. [cc]mc | .CH "Lexical Conventions" [cc]mc Before any other processing is done on the assembly language source code, it is broken down into tokens, all of which are entered into the symbol table. [cc]mc | .SH "Comments" [cc]mc Comments are indicated by a sharp ("#"). The commentary text consists of all the characters between the sharp and the end of the line. The comment is ignored, but the end of the line is not. [cc]mc | .SH "Breakcharacters" [cc]mc The following characters [cc]mc | .be [cc]mc + - * / ( ) ; $ = : { } # & | ~ < > * , [cc]mc | .ee [cc]mc as well as the blank, tab character (HT), newline character, and end of file are all considered to be breakcharacters. The blank and tab act as token separators, the sharp introduces comments, but all other breakcharcters form tokens by themselves when they are encountered (except in strings and comments). Multiple blanks or tabs are treated the same way as a single blank or tab. [cc]mc | .SH "Ordinary Tokens" [cc]mc Sequences of characters that are not breakcharacters form ordinary tokens, unless the first character is a single quote (apostrophe). Tokens can be no longer than about 100 characters. [cc]mc | .SH "Strings" [cc]mc A string consists of a (almost arbitrary) sequence of characters delimited by apostrophes. The ending apostrophe must be found on the same line as the starting one, that is to say, no newline characters may appear in the string. Apostrophes may appear within the string only in pairs. Breakcharacters loose their special behavior when they appear in strings. [cc]mc | .CH "What's in a Token?" [cc]mc The "meaning" of a token consists of two components, [cc]mc | [ul type] and [ul value] [cc]mc (in the case of strings, the name is also significant). [cc]mc | The [ul value] is a sixteen bit quantity (object machine word). The [ul type] determines the syntactic treatment of the token. .SH "Predefined Symbols" [cc]mc Some entries are made in the symbol table before any input is read. These predefined symbols include the mnemonics for all the PDP-11 instructions that the assembler knows about, those for all the GT40 display processor instructions as well as for some important addresses on the GT40, and also some assembler directives and end-of-file and end-of-statement symbols, and some other special symbols. A complete list of the predefined symbols is included as an appendix. .pp When a token matches a symbol that is already in the symbol table, the token takes on the value and type associated with the symbol. In fact, all tokens are stored simply as symbol table indexes. [cc]mc | .SH "Breakcharacters" [cc]mc When a token consists of a single breakcharacter, and no entry is found for it in the symbol table, the entry is made with the type being the character itself. The value of such a symbol never matters. [cc]mc | .SH "Strings" [cc]mc Strings are entered into the symbol table with type 'String'. The value of a string is derived from the string's [cc]mc | [ul interpretation], [cc]mc which is the character string that results from stripping away the beginning and ending apostrophes and converting all pairs of apostrophes to single apostrophes. If the interpretation of the string has no characters, the value of the string will be zero. If it has one character, the value will be the ASCII code for that character. If two or more, the value will be a word whose high order byte is the ASCII code for the second character of the interpretation and whose low order byte is the code for the first character of the interpretation. [cc]mc | .SH "Numbers" [cc]mc If a token begins with a zero and consists of octal digits, it is an octal number. A token that ends in a period and otherwise conisists of decimal digits is a decimal number. A token that ends with an apostrophe and consists otherwise only of any of the hexadecimal digits 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, or F, is a hexadecimal number. All numbers are evaluated and entered into the symbol table with their own value and a type of 'Constant'. .pp In addition to the number forms mentioned above, there are default base numbers. The default base is determined by the value of a symbol named "base'" (apostrophe on the end intentional). If this symbol is not assigned to in the program, it maintains its predefined value of 10. When a token consists only of digits of magnitude less than [cc]mc | the value of [bf base'], [cc]mc but without a leading zero, that token is a default base number and is evaluated with the default base currently in effect. It is suggested that no value higher than 10 (decimal) ever be assigned to [cc]mc | [bf base']. .SH "Undefined Symbols" [cc]mc A token that is not a string nor a number and is not already in the symbol table, is entered with a type of 'Undefined' and a value (if it matters) of zero. [cc]mc | .SH "Local Labels" [cc]mc Local labels are tokens that consist of a decimal digit followed by "b", "f", or "h" (for "back", "forward", and "here"). Local labels undergo a mapping before they are looked up in the symbol table. The form that they are mapped into consists of the digit from the local label, followed by a sharp, followed by a sequence number. The sequence numbers are maintained separately for each class of local labels as determined by their leading digit, and are incremented whenever a "h" label is mapped. The mapped form of an "f" label always matches that of the next "h" label, and the mapped form of a "b" label always matches that of the previous "h" local label. .pp The local label concept and syntax is borrowed from D. E. Knuth, who introduced them in his MIXAL assembly language .ul (The Art of Computer Programming, Vol. I: Fundamental Algorithms). .pp Local labels do not necessarily have to be used as labels; 'local label' is a lexical concept whereas 'label' is an unrelated syntactic concept. [cc]mc | .CH "Assembly Language Syntax and Semantics" .SH "Code Generation and the Location Counter" [cc]mc A predefined symbol named "." is the location counter. Its value is set to zero at the start of each pass. When generation of code is called for, the value of the location counter is the object machine address that the code is generated into. After generation of a word, the location counter is incremented by two; after generation of a byte, by one. Attempting to generate a word when the location counter has an odd value is an error and produces the message "Odd address". The user may refer to or assign to the location counter at any time. .pp When a statement that causes the generation of code contains a reference to the location counter, the reference is evaluated before any code is generated and therefore before the location counter is incremented. [cc]mc | .SH "Programs" [cc]mc A program consists of zero to infinity statements followed by the end of the input file or by the predefined symbol named ".EOF" (capitals and leading dot significant). [cc]mc | [bf .EOF] cannot be redefined by the user, since an occurence of it signals the end of the program. .SH "Statements" [cc]mc A statement consists of any of the constructs described below as some kind of "statement", optionally preceeded by any number of labels. Every statement in a program must end with a statement terminator, which is a semicolon or a newline character. Although labels are treated internally as statements, a label does not have to end with a statement terminator. [cc]mc | .SH "Labels" [cc]mc A label consists of a token followed by a colon. The token's type must be one of: 'Undefined', 'Absolute', 'Instruction', '.byte', '.reserve', '.struct', '.even', 'Register', or 'Branch'. Violation of this restriction will result in a "Disallowed assignee (or label)" error message. .pp The effect of a label is to assign the value and type of the location counter to the symbol in front of the colon (the predefined type of the location counter is 'Absolute', but this might have been changed by assignment). If the colon of a label were replaced with "=.;", the effect would always be exactly the same. Note that it is legal for the same label to appear more than once; the most recent definition is the one in effect (even if the most recent definition was in the previous pass). [cc]mc | .SH "Null Statements" [cc]mc A null statement consists only of a statement terminator. Null statements have no effect. [cc]mc | .SH Expressions [cc]mc The way expressions are handled is a cause for dissatisfaction on the part of the author of the assembler, and the next version may have them working somewhat differently (if there ever is a next version). .pp Expressions are composed of two types of components, [cc]mc | [ul operators] and [ul operands]. [cc]mc Operators are any of: [cc]mc | .be [cc]mc + - * / < > & | ~ [cc]mc | .ee [cc]mc with meanings of addition, subtraction, multiplication, division, left shift, right shift, intersection (of the sets of bit positions occupied by a "1"), union, and set subtraction respectively. Operands are symbols of any of the types 'Absolute', 'Undefined', 'String', 'Instruction', 'Branch', 'Constant', '.byte', '.reserve', '.even', or '.struct'. The expression must end with an operand. There can be no more than two operators in a row, and no more than one in a row at the beginning of the expression. .pp The meaning of an expression consists of [cc]mc | [ul type] and [ul value]. [cc]mc Expressions are evaluated from left to right (this is one of the points of dissatisfaction), but unary operators are evaluated before binary operators. A unary operator is an operator that is preceeded by another operator or by the beginning of the expression. The sense of a unary operator is as a binary operator with an implied left argument. The value of the implied operand depends only upon the unary operator. The values corresponding to the operators listed above are, respectively, 0, 0, 1, 1, 1, -1, -1, 0, -1. Thus the unary minus has its usual meaning, "~" as a unary operator has the meaning of "not" (on each bit), and the subexpression "< j" represents [cc]mc | a word with bit [ul j] turned on and all others off (1 shifted left by [ul j]). [cc]mc .pp When two operands occur together, it is as though there were a "+" between them. This feature makes coding of GT40 display instructions more convenient. .pp The type of an expression is 'Undefined' if any of the operands in it have that type. Otherwise, if the rightmost operand is of type 'String' or 'Constant', the type of the expression is 'Absolute'. If neither of these two cases hold, then the type of the expression is that of the rightmost operand. .pp [cc]mc | Among the consequences of the way the [ul type] [cc]mc of an expression is defined are the capabilities demonstrated by the following example statements: [cc]mc | .be [cc]mc m = mov # define an abbreviation # of an instruction mnemonic mov = 2 # redefine an instruction mnemonic movop = mov + 0 # extract an opcode into # an ordinary symbol [cc]mc | .ee .SH "Assignment Statements" [cc]mc The syntax of an assignment statement is [cc]mc | .be [cc]mc = [cc]mc | .ee [cc]mc followed, as usual, by a statement terminator (semicolon or newline). The is subject to the same restriction as in labels, with the same consequence if it is violated. .pp The effect of the assignment statement is to set the value and type of the symbol to the left of the equals sign to the value and type of the expression to the right of the equals sign. [cc]mc | .SH ".even Statements" A [bf .even] statement consists of the symbol ".even" and a statement terminator. .pp The effect of a [bf .even] [cc]mc statement is to generate a zero byte if the location counter has an odd value, and to do nothing if the location counter has an even value. After the statement is interpreted, the location counter will always have an even value. [cc]mc | .SH "Instruction Statements" [cc]mc An instruction statement consists of a symbol of type 'Instruction', followed by a source or destination operand, possibly followed by a comma and another source or destination operand, finally followed by a statement terminator. There are predefined symbols of type 'Instruction' for all of the PDP-11 one- or two-operand instructions that take general source and destination operands, as well as for the 'rts' (which takes a register operand) and 'jsr' (which wants a register and a destination) instructions. Here is a list of the names of the predefined instruction symbols: [cc]mc | .be [cc]mc clr clrb dec decb inc incb neg negb tst tstb com comb asr asrb asl aslb adc adcb sbc sbcb rol rolb ror rorb swab jmp mov movb add sub cmp cmpb bis bisb bit bitb bic bicb rts jsr [cc]mc | .ee [cc]mc These instruction mnemonics are associated with instruction codes as described in the PDP-11 processor handbooks, the only difference being that for this assembler they are typed in lower case ("mov" cannot be typed as "MOV"). .pp The effect of an instruction statement is to generate an opcode word possibly followed by one or two trailer words (up to three words in all). The trailer words, if any, come from the source or destination operands; the conditions for their generation and their value is discussed under the heading of source and destination operands. .pp The opcode word is derived from the value of the instruction symbol and from the addressing modes and registers used and referred to in the operands. With each source or destination operand is associated a three bit [cc]mc | [ul mode] and a three bit [ul register] designator. [cc]mc When only a single operand is specified, the opcode word that is generated is the sum of the value of the instruction symbol with the six bit quantity that results from concatenating the mode (as the high order part) with the register number (as the low order part) of the single operand. When there are two operands, the opcode is the sum of the value of the instruction symbol with the twelve bit quantity consisting of the concatenation of (from high order to low) the mode of the first operand, the register number of the first operand, the mode of the second operand, and the register number of the second operand. .pp The user is warned that no check is made to see if the correct number of operands is specified. [cc]mc | .SH "Source and Destination Operands" [cc]mc The allowable forms of source or destination operand are: (1) an expression, (2) an expression preceeded by a dollar sign, (3) an expression followed by a register designator in parentheses, for example "2(r0)", (4) a minus sign followed by a register designator in parentheses, (5) a register designator in parentheses followed by a plus sign, for example "(pc)+", or (6) simply a register designator, or (7) any of the above preceeded with an asterisk. A register designator is a symbol of type 'Register'. The predefined symbols of this type are: [cc]mc | .be [cc]mc r0 r1 r2 r3 r4 r5 sp pc [cc]mc | .ee [cc]mc and their predefined values are 0 through 7, respectively. .pp To completely describe the meaning of a source or destination operand, one need only give the three bit mode value, the register number, and whether a trailer word is generated and if so, what its value is. .pp For each syntax that involves a register designator, the register number is the value of the register symbol (only the low order three bits). For the forms that do not include a register symbol, the register number is 7 (recall that register 7 on the PDP-11 is the program counter). .pp [cc]mc | The [ul mode] [cc]mc is 6 for format (1), 2 for format (2), 6 (indexed) for format (3), 4 (autopredecrement) for format (4), 2 (autopostincrement) for format (5), and 0 (register) for format (6). The effect of putting the asterisk in front of any of these formats is to add 1 to the mode (thus turning on the defer bit). .pp Formats (1), (2), (3), and their starred counterparts cause the generation of trailer words. For formats (2) and (3), the value of the trailer word is the value of the expression (whose type must not be 'Undefined' during the last pass). For format (1), the value generated is the difference (in object machine arithmetic, two's complement) between the value of the expression and the address of the word after the word in object machine memory in which the trailer word is to be stored. .pp The source and destination syntax just described turns out to be the same as that described in the PDP-11 processor handbooks, except that we use "*" and "$" where they use "@@" and "#", and we do not use the "%" notation for registers. .pp Sample instruction statements using the different operand formats: [cc]mc | .be [cc]mc clr 0 # format 1 mov $1, r0 # formats 2 and 6 inc count(r0) # format 3 cmp (sp)+, -(r0) # formats 4 and 5 movb *$0177562, *(r0)+ # fmt. 7 used with fmts. 2 and 4 [cc]mc | .ee .SH "Branch Statements" [cc]mc A branch statement consists of a symbol of type 'Branch', followed by an expression, followed by a statement terminator. The predefined symbols of type 'Branch' are: [cc]mc | .be [cc]mc br beq bne bmi bpl bcs bcc bvs bvc blt bge ble bgt bhi blos blo bhis [cc]mc | .ee [cc]mc Their values are the branch instruction codes as described in the processor handbooks. .pp A branch statement generates a single word consisting of the value of the branch symbol plus an offset. The offset is computed by first taking the difference between the value of the expression and the address of the word after (in object machine memory) the word into which the branch code is being generated, and dividing that difference by 2 to convert from a byte offset to a word offset. If the offset is not in the range -128 to +127, a "branch out of range" error message is issued. The offset is masked to eight bits before being added to the branch symbol's value to form the final instruction codeword. [cc]mc | .SH "String Statements" [cc]mc A string followed by a statement terminator constitutes a string statement. .pp The name of the string is interpreted by stripping off the leading and trailing apostrophes, and changing each pair of apostrophes that occurs within the string to a single apostrophe. The effect of the string statement is to convert the characters that result from this interpretation into ASCII and generate one byte for each of them, left to right. [cc]mc | .SH ".byte Statements" A [bf .byte] statement consists of the symbol ".byte" [cc]mc followed by a comma-separated list of expressions, followed by a statement terminator. If only one expression is specified, there is no comma. At least one expression must be specified. .pp A byte is generated for each expression. The value of the byte is the value of the expression truncated to eight bits. The location counter is updated after the evaluation of each expression. [cc]mc | .SH ".struct and .reserve Statements" The [bf .struct] and [bf .reserve] [cc]mc statements were implemented as a convenience; they could be simulated with assignment statements. The syntax is: ".struct" or ".reserve", followed by a symbol, followed by a list of one or more pairs where the first element of the pair is a symbol and the second element is an expression, followed finally by a statement terminator. The pairs, if there are more than one, are separated from one another by commas. An example is: [cc]mc | .be [cc]mc .struct tnode left 2, right 2, parent 2, info 80 [cc]mc | .ee [cc]mc .pp The effect of ".struct" is to first set the symbol to zero, then, for each pair, first set the symbol of the pair to the value of the symbol after ".struct", then add the value of the expression to the symbol after ".struct". Thus, the above example is equivalent to: [cc]mc | .be [cc]mc tnode = 0 left = tnode; tnode = tnode + 2 right = tnode; tnode = tnode + 2 parent = tnode; tnode = tnode + 2 info = tnode; tnode = tnode + 80 [cc]mc | .ee [cc]mc (Actually, the first symbol is not assigned to until the last step of interpretation, but the total is maintained in a temporary register.) The purpose forseen for this construct is to conveniently define a data structure. The first symbol holds the size of a node, and the other symbols hold the offsets of the fields. .pp The effect of ".reserve" is the same as of ".struct", except that the symbol is not set to zero. .pp The type of the symbols used in a ".reserve" or ".struct" statement must be 'Undefined' or 'Absolute'. [cc]mc | .CH "Appendix: Predefined Symbols" [cc]mc Here is a complete listing of the assembler's Predefined Symbols. [cc]mc | .SH "Location Counter" [cc]mc The location counter is named ".". It is set to 0 Absolute at the start of each pass. [cc]mc | .SH "Parameters" .be [cc]mc start' = 0 # start address base' = 10. # default number base [cc]mc | .ee [cc]mc (Both have type Absolute). [cc]mc | .SH "Assembler Directives" [cc]mc Each of these symbols has a type unique to the symbol. The type determines the assembler's interpretation of the special statements introduced by these symbols. In no case does the value matter. [cc]mc | .be [cc]mc .cc \ .even .byte .struct .reserve \cc . [cc]mc | .ee [cc]mc There is also "b'" as an abbreviation of ".byte". [cc]mc | .ne 48 .SH "GT40 Display Processor Instructions" [cc]mc These for the most part adhere to DEC's suggested mnemonics. Each is of type Absolute. The values are listed in octal. .ta 10 .tc \ [cc]mc | .be [cc]mc char\100000 shortv\104000 longv\110000 point\114000 graphx\120000 graphy\124000 relatv\130000 int0\2000 int1\2200 int2\2400 int3\2600 int4\3000 int5\3200 int6\3400 int7\3600 lpoff\100 lpon\140 blkoff\20 blkon\30 line0\4 line1\5 line2\6 line3\7 djmp\160000 dnop\164000 statsa\170000 dstop\173400 sinon\1400 sinof\1000 lplite\200 lpdark\300 ital0\40 ital1\60 sync\4 statsb\174000 incr\100 intx\40000 minusx\20000 minusy\20000 misvx\20000 misvy\100 [cc]mc | .ee .ne 20 .SH "Important Addresses" [cc]mc Types are Absolute. Values are given in octal. [cc]mc | .be [cc]mc dpc\172000 dsr\172002 beep\172002 xsr\172004 ysr\172006 rcsr\175610 rbuf\175612 xcsr\175614 xbuf\175616 kbuf\177562 kcsr\177560 clcsr\177546 boot\166000 highest\40000 [cc]mc | psw\177776 swr\177570 .ee [cc]mc "highest" is the number of bytes of core memory on the GT40. [cc]mc | .ne 40 .SH "ASCII Control Characters" [cc]mc Types are Absolute. Values are given in octal. Recall that case is significant in the names of symbols; capital letters mean CAPITAL LETTERS. [cc]mc | .be NUL\000 SOH\001 STX\002 ETX\003 EOT\004 ENQ\005 ACK\006 BEL\007 BS\010 HT\011 LF\012 VT\013 FF\014 CR\015 SO\016 SI\017 DLE\020 DC1\021 DC2\022 DC3\023 DC4\024 NAK\025 SYN\026 ETB\027 CAN\030 EM\031 SUB\032 ESC\033 FS\034 GS\035 RS\036 US\037 SP\040 DEL\177 .ee .ne 20 .SH "Branch Instruction Codes" [cc]mc All have type 'Branch'. [cc]mc | .be br\0000400 beq\0001400 bne\0001000 bmi\0100400 bpl\0100000 bcs\0103400 bcc\0103000 bvs\0102400 bvc\0102000 blt\0002400 bge\0002000 ble\0003400 bgt\0003000 bhi\0101000 blos\0101400 blo\0103400 (same as bcs) bhis\0103000 (same as bcc) .ee .ne 45 .SH "One- and Two-operand Instructions" [cc]mc These symbols all have type 'Instruction'. Values are given in octal. [cc]mc | .be [cc]mc clr\0005000 clrb\0105000 dec\0005300 decb\0105300 inc\0005200 incb\0105200 neg\0005400 negb\0105400 tst\0005700 tstb\0105700 com\0005100 comb\0105100 asr\0006200 asrb\0106200 asl\0006300 aslb\0106300 adc\0005500 adcb\0105500 sbc\0005600 sbcb\0105600 rol\0006100 rolb\0106100 ror\0006000 rorb\0106000 swab\0000300 jmp\0000100 mov\0010000 movb\0110000 add\0060000 sub\0160000 cmp\0020000 cmpb\0120000 bis\0050000 bisb\0150000 bit\0030000 bitb\0130000 bic\0040000 bicb\0140000 rts\0000200 jsr\0004000 [cc]mc | .ee .ne 20 .SH "Single-operand Instructions" [cc]mc These symbols all have type Absolute. [cc]mc | .be clc\0241 clv\0242 clz\0244 cln\0250 sec\0261 sev\0262 sez\0264 sen\0270 emt\0104000 trap\0104400 bpt\3 iot\4 halt\0 wait\1 reset\5 rti\2 .ee [cc]mc .ne 10 [cc]mc | .SH Registers [cc]mc All posess type Register. [cc]mc | .be r0\0 r1\1 r2\2 r3\3 r4\4 r5\5 sp\6 pc\7 .ee .SH "End-of-file Simulation Symbol" [cc]mc The symbol ".EOF" has the same type as the end of the input file. It was included mainly for debugging purposes. [cc]mc | .SH "Funny Characters" [cc]mc The user need not be concerned with the remaining predefined symbols. For completeness, they are: the end-of-file pseudocharacter, the newline character, and the semicolon. The latter two have the same type, 'Statement Terminator'. [cc]mc | .bp .he .fo .op .bp 3 .TC [cc]mc