Table of component fields
A code of b'..1.....'
generates a table with the instructions expanded into
component fields (not operands), based on walking left-to-right through the Principles of
Operations definition. It has the following structure:
Origin | Length | Contents |
---|---|---|
0 | 4 | Number of fields (currently ≤6) |
4 | 4 | Field 1 description - see Operand-Description Structure for format |
8 | 4 | Field 1 value |
12 | 4 | Field 2 description |
16 | 4 | Field 2 value |
20 | 4 | Field 3 description |
24 | 4 | Field 3 value |
28 | 4 | Field 4 description |
32 | 4 | Field 4 value |
36 | 4 | Field 5 description |
40 | 4 | Field 5 value |
44 | 4 | Field 6 description |
48 | 4 | Field 6 value |
52 | 16 | Future expansion |
68 | 4 | Operand 1 flags - see Operand Flags for format |
72 | 4 | Operand 2 flags |
76 | 4 | Operand 3 flags |
80 | 4 | Operand 4 flags |
84 | 4 | Operand 5 flags |
88 | 4 | Operand 6 flags |
Earlier implementations of this routine only expected instructions to have up to four operands, requiring the area only to be 84 bytes. When instructions with five and six operands were added to the instruction set, this limitation in the disassembler interface was overlooked, resulting in possible overwriting of one or two words following the caller's operand table area. This area should now be at least 92 bytes, but to reduce the risk of overwriting following storage when a caller only provides an 84-byte area, the operand 5 and 6 flag fields are not referenced or cleared for instructions with not more than four operands.
The field description contains two fields:
- a flag byte which indicates separators which may precede or follow the field in a machine instruction presented to the assembler.
- an integer to indicate the type of the field.
Origin | Length | Contents |
---|---|---|
0 | 1 | Flags: |
b'1.......' - Comma before value |
||
b'.1......' - Left parenthesis before value |
||
b'..1.....' - Right parenthesis after value |
||
1 | 1 | Operand number |
2 | 2 | Type - see Operand-Field Type Definitions for values |
The following table indicates the types and how they map to the Principles of Operations that tends not to distinguish, for example, between different register types.
Type | Definition | Principles of Operations |
---|---|---|
1 | General-purpose register | R1-3, GR2, RS2, RT2 |
2 | Base register | B1-4 |
3 | Index register | X2 |
4 | Displacement | D1-4 |
5 | Immediate or mask field | I1-5 |
6 | Length field | L, L1-2 |
7 | Control register | R1-2 |
8 | Access register | R1-2 |
9 | HFP register | R1-2 |
10 | BFP register | R1-2 |
11 | ESA/390 vector register | V1-2 |
12 | DFP register | R1-2 |
13 | z vector register | V1-5 |
14 | z vector index register | V1-2 |
The following table maps the operand flags:
Origin | Length | Contents |
---|---|---|
0 | .1 each | Operand required |
Operand is modified | ||
Operand is target of branch | ||
Operand is first of span: R1 in LM R1,R3,D2(B2) | ||
-reserved- | ||
-reserved- | ||
Operand is a register | ||
Operand is mask or immediate | ||
1 | .1 each | 0 specified implies R0 |
pair register required | ||
Implicit length valid | ||
Rn+1 referenced if Rn even | ||
-reserved- | ||
-reserved- | ||
Signed number | ||
No storage reference | ||
2 | .1 | Reserved for future use |
3 | .1 | Implied source/target length |
number of bits if immediate or mask | ||
(number of bytes)-1 if not immediate or mask |