Вы находитесь на странице: 1из 62

IBM Mainframe Assembler Language Coding

Load Halfword

LH

R7,NEGBYTS

Reg 7 before: 00 00 00 C4

NEGBYTS before: FF F1

Reg 7 after: FF FF FF F1

NEGBYTS after: FF F1

69

IBM Mainframe Assembler Language Coding


Store Fullword The contents of the register specified as operand one are copied to the location designated by operand two.

ST

R7,FIELDA

Reg 7 before: 00 01 22 31

FIELDA before: 00 00 00 00

Reg 7 after: 00 01 22 31

FIELDA after: 00 01 22 31

70

IBM Mainframe Assembler Language Coding


Store Halfword The right-most two bytes of the register specified as operand one are copied to the location designated by operand two.

STH

R5,FIELDB

Reg 5 before: 10 FF FF E4

FIELDB before: 00 00

Reg 5 after: 10 FF FF E4

FIELDB after: FF E4

71

IBM Mainframe Assembler Language Coding

72

IBM Mainframe Assembler Language Coding


EXERCISE #3 PROGRAM 3. Input: rate dd.cc (decimal point implied). hours hh.t (decimal point implied). name. Message: b@hhtddccname+ name is max of 15 characters. hh = whole hours worked. t = tenths of hours worked. dd = pay whole dollars. cc = pay cents. Process: calculate gross pay. Input and output numbers are character format. Arithmetic is in binary format. Output: name gross pay - 2 decimal places rounded. Name is first 15 positions starting @ position 1. Gross salary starts in 3rd position after name. Gross salary has no editing characters ($ , .).

73

IBM Mainframe Assembler Language Coding

74

IBM Mainframe Assembler Language Coding


Literals Avoid the need for separate DC statements. Use "=" instead of a "DC". e.g. L 3,=F'100'

Address constant literals allow for multiple literals of different types in one statement. e.g. MVC REPORT(6),=AL3(C'DAY',X'F3F1F0')

75

IBM Mainframe Assembler Language Coding


LTORG - Begin Literal Pool Use the LTORG instruction so that the assembler can collect and organize literals into a literal pool to be printed at the bottom of the program. Be sure to code the LTORG at the end of the program just before the FINIS. Examples:
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT 000398 316 LTORG 000398 0000033E00000341 317 =A(TT2,TT3,TT4) 0003A0 00000350 0003A4 C1D3D3F1F2F3 318 =AL3(C'ALL',X'F1F2F3') 0003AA D7D7 319 =C'PP' 0003AC 5C 320 =P'5' 0003AD C1D3D3 321 =AL3(C'ALL') 0003B0 C1D3D3 322 =C'ALL' 323 FINIS 324 END

76

IBM Mainframe Assembler Language Coding


Load Multiple Registers INITFLDS DC DC DC DC F'1' F'2' F'3' F'4'

LM

R4,R7,INITFLDS

Reg 4 before: 00 00 00 00

Reg 4 after: 00 00 00 01

Reg 5 before: 00 88 12 FF

Reg 5 after: 00 00 00 02

Reg 6 before: 00 AB CD 00

Reg 6 after: 00 00 00 03

Reg 7 before: 00 FF 01 00

Reg 7 after: 00 00 00 04

77

IBM Mainframe Assembler Language Coding


Store Multiple L L L STM R2,=F'1' R3,=F'2' R4,=F'3' R2,R4,SAVEREGS

Before: 00 00 00 00

After: 00 00 00 01

SAVEREGS

SAVEREGS

Before: 00 88 12 F0

After: 00 00 00 02

SAVEREGS+4

SAVEREGS+4

Before: F1 FE 82 17

After: 00 00 00 03

SAVEREGS+8

SAVEREGS+8

78

IBM Mainframe Assembler Language Coding


Define Constant - Character Data CONST1 DC CONST1 C'ABC'

C1 C2 C3

CONST2 DC CONST2

CL3'NE'

D5 C5 40

CONST3 DC CONST3

CL3'ABCD'

C1 C2 C3

CONST4 DC CONST4

3C'5'

F5 F5 F5

CONST5 DC CONST5

2CL2'ABC'

C1 C2 C1 C2

79

IBM Mainframe Assembler Language Coding


Define Constant - Character Data To have one apostrophe and one ampersand character to appear, you must code two of them in the define constant instruction.

APOSTR

DC APOSTR

C'''' 7D

AMPERS

DC AMPERS

C'&&' 50

ANB

DC ANB

C'A&&B' C1 50 C2

ASNBS

DC ASNBS

C'A''S && B''S' C1 7D E2 40 50 40 C2 7D E2

80

IBM Mainframe Assembler Language Coding


Define Constant - Binary Data BINAR1 DC B'101' 0000 0101

BINAR1

BINAR2

DC

B'1111000001' 0000 0011 1100 0001

BINAR2

BINAR3

DC

2B'101' 0000 0101 0000 0101

BINAR3

BINAR4

DC

BL1'111100001' 1110 0001

BINAR4

81

IBM Mainframe Assembler Language Coding


Define Constant - Hexadecimal Data HEX1 HEX1 DC X'123' 01 23

HEX2 HEX2

DC

2X'B' 0B 0B

HEX3 HEX3

DC

XL2'ABCDE' BC DE

HEX4 HEX4

DC

2X'A1C2' A1 C2 A1 C2

HEX5 HEX5

DC

XL4'C12' 00 00 0C 12

82

IBM Mainframe Assembler Language Coding


Insert Character

The leftmost byte at the address specified in operand 2 is placed in the rightmost byte of the register specified in operand 1.

IC

R7,FIELDC

Reg 7 before: FF FF FF E4

FIELDC before: 11 22 33 44

Reg 7 after: FF FF FF 11

FIELDC after: 11 22 33 44

83

IBM Mainframe Assembler Language Coding


Store Character The right-most byte of the register specified as operand one is copied to the location designated by operand two.

STC

R5,FIELDF+2

Before: 10
Reg 5

FF

FF

E4

F1

F2

C1 C2

FIELDF

After: 10
Reg 5

FF

FF

E4

F1

F2 E4 C2

FIELDF

84

IBM Mainframe Assembler Language Coding


Insert Characters Under Mask
ICM R1,M3,D2(B2)

The Insert Characters Under Mask copies N bytes (N <= 4) into a register. The number of bytes copied and their relative positions in the register are specified in the second operand of the instruction, the "mask". The number of bytes that are inserted is equal to the number of 1's in the mask. The relative position of the bytes in the register is determined by the relative position of 1's in the mask, left-to-right, one-to-one.

ICM

R4,B'1100',SAVE

Before
AB 01 8C 00
REG 4

09 FF E9 86
SAVE

After
09 FF 8C 00
REG 4

09 FF E9 86
SAVE

85

IBM Mainframe Assembler Language Coding


Store Characters Under Mask
STCM R1,M3,D2(B2)

The Store Characters Under Mask copies N bytes (N <= 4) from a register into memory. The number of bytes copied and their relative positions in the register are specified in the second operand of the instruction, the "mask". The number of bytes that are stored is equal to the number of 1's in the mask. The relative position of the bytes in the register is determined by the relative position of 1's in the mask, left-to-right, one-to-one.

STCM

R4,X'A',SAVE

Before
01 23 AB CD
REG 4

E1 E2 E3 E4
SAVE

After
01 23 AB CD
REG 4

01 AB E3 E4
SAVE

86

IBM Mainframe Assembler Language Coding


Equates Replace numbers with symbolic names. Replace addresses with symbolic names. Compute expressions whose values are unknown or difficult to calculate. Provide an easy means of changing an assembly-time constant. Equate generates no bytes in the object module. Examples:
REG15 EQU 15

EQ1 EQU INPUT EQ2 EQU INPUT+82 * NUMERIC TABLE STARTS HERE TABLE DC F'1' DC F'2' DC F'3' DC F'4' DC F'5' TBLEN EQU *-TABLE NMBRITMS EQU (*-TABLE)/4 (OR) NMBRITMS EQU TBLEN/4

last updated 12/29/99

87

IBM Mainframe Assembler Language Coding


Move Immediate Instruction

MVI

The Move Immediate copies one byte of data from the I2 field to the location designated by the 1st operand. The I2 data is assembled into byte one of the instruction.
MVI D1(B1),I2

88

IBM Mainframe Assembler Language Coding


Move Immediate Example VAL1 MVI DC C'ABCDE'

VAL1,C'*'

VAL1 before: A B C D E

VAL1 after: * B C D E

MVI

VAL1+3,C'*'

VAL1 before: * B C D E

VAL1 after: * B C * E

89

IBM Mainframe Assembler Language Coding

90

IBM Mainframe Assembler Language Coding


EXERCISE #4 PROGRAM 4. Input: rate dd.cc (actual decimal point). hours hh.t (actual decimal point). name. Message: b@hh.tdd.ccname+ name is max of 15 characters. hh = whole hours worked. t = tenths of hours worked. dd = pay whole dollars. cc = pay cents. Process: calculate gross pay. Input and output are character format. Arithmetic is in binary format (use literals). Output: name gross pay daily pay average.
NAME: NNNNNNNNNNNNNNN PAY: DDDDCC DAILY: DDDDCC

Name is first 15 positions starting @ position 1. Salary figures have no editing characters ($ , .). Report Header = GROSS PAY REPORT followed by a blank line. 2 spaces before PAY and DAILY.
91

IBM Mainframe Assembler Language Coding

92

IBM Mainframe Assembler Language Coding


Branching Branch instructions are used in re-directing the flow of the program. BAL BALR BAS BASR BC BCR BCT BCTR BXLE BXH Branch and Link Branch and Link Register Branch and Save Branch and Save Register Branch on Condition Branch on Condition Register Branch on Count Branch on Count Register Branch on Index Low or Equal Branch on Index High

93

IBM Mainframe Assembler Language Coding


The Condition Code The Condition Code is a value represented by two bits within the Program Status Word (PSW), bits 18 and 19. The Condition Code is set to 0, 1, 2, or 3 depending on the result obtained in executing certain instructions. The Condition Code reflects such conditions as zero, nonzero, 1st operand high, operands equal, 1st operand low, and overflow. Once set, the Condition Code remains unchanged until modified by an instruction that causes a different value to be set. Condition Codes After arithmetic instructions: 00 - result was 0 01 - result was < 0 (negative) 10 - result was > 0 (positive) 11 - overflow situation After compare instructions: 00 - operands equal 01 - first operand low 10 - first operand high

94

IBM Mainframe Assembler Language Coding


Branch on Condition There are two varieties of 'branch on condition' instructions: BC and BCR. The format of the BC instruction is:
BC M1,D2(X2,B2)

The first operand always specifies a mask value. The second operand is a memory address to be branched to if the condition is met. e.g. BC
8,FOUND

The format of the BCR instruction is:

BCR

M1,R2

As in the BC, the first operand of the BCR is always a mask value. The second operand is used quite differently however. The second operand is a register that must have been loaded with the branch-to address prior to executing the BCR. If the condition is met, branching will occur to the specified address in the R2 operand. Refer to the Enterprise Systems Architecture/390 Reference Summary for condition codes and their corresponding mask values.

last updated 12/29/99

95

IBM Mainframe Assembler Language Coding


Branch on Condition S BCR R1,FULL 2,R7

This code checks for CC = 2 (0010) and branches to the address in register 7 if the condition is true.

A BC BC

R1,FULL 8,ZERO 4,MINUS

This code checks for condition of zero or negative and branches accordingly. Positive condition results in fall-thru.

C BC

R1,FLDA 12,ALOEQ

This code checks for 2 settings at once - low and equal, and branches accordingly.

96

IBM Mainframe Assembler Language Coding


Branch on Condition - No Operation (NOP)
A "no-operation" is an instruction that, when executed, does not cause any action to be taken by the hardware except the normal incrementing of the location counter, e.g. a branch instruction that will never branch. LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT 00002E 4700 810C 00112 48 NOP TADF Above, the next sequential instruction would be executed. This is called a "no-operation". It can be used for various purposes. Example: CKLIST
NOP OI . . CONTINUE CKLIST+1,X'F0' Code in this area will be executed only once and will be branched around in succeeding executions.

Thou Shalt NOT!!!


CONTINUE EQU *

(Fact be know, you could not get the code above to run on the TPF system because of Protect Keys.)

97

IBM Mainframe Assembler Language Coding


Branch on Index Low or Equal BXLE
Index Register

R1,R3,D2(B2)
Branch address

Increment Register

When a BXLE instruction is executed, three things occur during the iteration of the loop: 1. Incrementing the index register. 2. Counting the number of iterations of the loop. 3. Testing to see whether the loop should be repeated. An increment is added to the first operand and the sum is compared with a comparand (the limit register). Subsequently, the sum is placed in the first operand location. When the sum is low or equal, the instruction address in the current PSW is replaced by the branch address (the second operand is used as the branch address). The first operand and the increment are in the registers specified by R1 and R3. The comparand register number is odd and is either one larger than R3 or equal to R3. The branch address is computed before the addition and comparison.
98

IBM Mainframe Assembler Language Coding


Branch on Index Low or Equal Object: to add the corresponding numbers of Table A to Table B and place the sums in corresponding elements of Table C. Using 3 Registers
LM EQU L A ST BXLE . DS DS DS R3,R5,=F'0,4,16' R3 = Index Reg. * R4 = Incr. Reg. R0,TABA(R3) R5 = Limit Reg. R0,TABB(R3) R0,TABC(R3) R3,R4,MORE 5F 5F 5F

MORE

TABA TABB TABC

Using 2 Registers
LM EQU L A ST BXLE . DS DS DS R4,R5,=F'-12,4' * R0,TABA+12(R4) R0,TABB+12(R4) R0,TABC+12(R4) R4,R5,MORE 5F 5F 5F R4 = Index Reg. R5 = Incr. & Limit

MORE

TABA TABB TABC

99

IBM Mainframe Assembler Language Coding


Branch on Index High - BXH Works in the same manner as the BXLE but checks for index high rather than low or equal. Object: to add the corresponding numbers of Table A to Table B and place the sums in corresponding elements of Table C. Using 3 Registers
LM R3,R5,=F'0,-4,-20' EQU * L A ST BXH . . . DS DS DS R0,TABA+16(R3) R0,TABB+16(R3) R0,TABC+16(R3) R3,R4,MORE R3 = Index R4 = Incr. R5 = Limit

MORE *

TABA TABB TABC

5F 5F 5F

100

IBM Mainframe Assembler Language Coding


Load and Test Register

The second operand is placed unchanged in the first operand location, and the sign and magnitude of the second operand is used to determine and set the condition code (refer to the Principles of Operation for more details).
Condition code settings: 0 - the result is zero 1 - the result is less than zero 2 - the result is greater than zero 3 - not used

LTR

R4,R2

Reg 4 before: 00 81 34 77

Reg 2 before: 00 00 12 11

Reg 4 after: 00 00 12 11

Reg 2 after: 00 00 12 11

In this case, the condition code is set to 2. Note: when the R1 and R2 fields designate the same register the operation is simply a test with no data movement.
101

IBM Mainframe Assembler Language Coding


Load Negative Register

The twos complement of the absolute value of the second operand is placed in the first operand location. Negative numbers remain unchanged. Zero remains unchanged.

LNR

R4,R2

Reg 4 before: 00 81 34 77

Reg 2 before: 00 00 12 11

Reg 4 after: FF FF ED EF

Reg 2 after: 00 00 12 11

102

IBM Mainframe Assembler Language Coding


Load Positive Register

The absolute value of the second operand is placed in the first operand location. Positive numbers remain unchanged. Zero remains unchanged.

LPR

R4,R2

Reg 4 before: 00 00 00 00

Reg 2 before: FF FF AB AB

Reg 4 after: 00 00 54 55

Reg 2 after: FF FF AB AB

103

IBM Mainframe Assembler Language Coding


Load Complement Register

The twos complement of the second operand is placed in the first operand location. Zero remains unchanged.

LCR

R4,R2

Reg 4 before: 00 00 00 04

Reg 2 before: 00 00 54 55

Reg 4 after: FF FF AB AB

Reg 2 after: 00 00 54 55

104

IBM Mainframe Assembler Language Coding


Algebraic Compare Instructions To compare two integers algebraically, one of them must be in a register while the other can be in a register or at a memory location. The operands are compared as signed 32-bit binary integers and all the rules of algebra apply. Compare Registers - CR Compare Fullword - C Compare Halfword - CH

105

IBM Mainframe Assembler Language Coding


Compare Registers

CR

R3,R4

00
REG 3

00

00

0A

00
REG 4

00

00

C8

CC = 1

CR

R4,R5

00
REG 4

00

00

C8

FF
REG 5

FF

FF

FF

CC = 2

106

IBM Mainframe Assembler Language Coding


Compare Fullword

R3,STORAGE

00
REG 3

80

59

34

00

00

FF

F9

STORAGE

CC = ?

107

IBM Mainframe Assembler Language Coding


Compare Halfword AMT1 AMT2 L CH DC DC F'6' H'-6'

R3,AMT1 R3,AMT2

CC = ?

108

IBM Mainframe Assembler Language Coding


EXERCISE #5 PROGRAM 5. Input: rate dd.cc (actual decimal point). hours hh.t (actual decimal point). name. Message: b@hh.tdd.ccname+ name is max of 15 characters. hh = whole hours worked. t = tenths of hours worked. dd = pay whole dollars. cc = pay cents. Process: calculate gross pay. Input and output are character format. Arithmetic is in binary format (literals optional). Hours > 40 = 1.5 x standard rate (included in gross). Output: name gross pay overtime.
NAME: NNNNNNNNNNNNNNN PAY: DDDDCC OVERTIME: DDDDCC

Name is first 15 positions starting @ position 1. Salary figures have no editing characters ($ , .). Report Header = GROSS PAY REPORT centered. and followed by blank line. 2 spaces before PAY and OVERTIME.
109

IBM Mainframe Assembler Language Coding

110

IBM Mainframe Assembler Language Coding


Integer Logical Compare Instructions To compare two integers logicically, one of them must be in a register while the other can be in a register or at a memory location. The operands are compared as unsigned 32-bit binary integers. Compare Logical Registers - CLR Compare Logical Fullword - CL Compare Logical under Mask - CLM

111

IBM Mainframe Assembler Language Coding


Compare Logical Compares the contents of a register and the contents of a memory location.

CL R3,SAVE

00
SAVE

00

00

01

FF
REG 3

FF

FF

FE

CC = 2

1st operand high

112

IBM Mainframe Assembler Language Coding


Compare Logical Registers

CLR R3,R4

00
REG 3

00

C1

C2

00
REG 4

00 D1 D2

CC = 1

1st operand low

113

IBM Mainframe Assembler Language Coding


Compare Logical Characters Under Mask
CLM R1,M3,D2(B2)

The Compare Logical Characters Under Mask compares two N-byte strings (N <= 4), the first string is in the register designated by the first operand. The second string is in the memory location designated by the second operand.

CLM

R5,B'0001',=X'00'

00 C3 FF D5
REG 5

00
Memory

CC = 2

114

IBM Mainframe Assembler Language Coding


Bit String Logical Compare Instructions In comparing two byte strings of equal length, the comparison starts at the left-most (high order) end of each string and proceeds byte by byte to the right, comparing the bytes from corresponding positions until one of two situations occur: 1. Either two bytes (one from each string) are found to be unequal, or 2. the strings are exhausted and all pairs of bytes are found to be equal. The result of the compare is returned in the condition code.

115

IBM Mainframe Assembler Language Coding


CLI - Compare Logical Immediate Compares two 1 byte strings. The first string is in the memory location designated by the first operand. The second string is in the immediate data field of the instruction itself.

C4
FIELD

C2

C6

C4

CLI CLI CLI CLI

FIELD,C'D' FIELD+1,C'D' FIELD+2,C'D' FIELD+3,C'D'

CC CC CC CC

= = = =

0 1 2 0

116

IBM Mainframe Assembler Language Coding


CLC - Compare Logical Characters Compares two 'N byte' strings where N <= 256. The first string is in the memory location designated by the first operand. The second string is in the memory location designated by the second operand.

FLDA FLDB FLDC CLC CLC CLC

DC DC DC

C'JOHNSON' C'JOHNSEN' C'JOHNSUN' CC = ? CC = ? CC = ?

FLDA,FLDB FLDB,FLDC FLDC,FLDA

117

IBM Mainframe Assembler Language Coding


Shift Instructions
SLDA, SLDL, SLA, SLL, SRDA, SRDL, SRA, SRL

General Rules: 1. All shift instructions have an RS format. 2. The 2nd operand address is not used to address data. Instead, the low order 6 bits of the address computed are used to determine the shift value (number of bits to be shifted). 3. Bits 12-15 of the object code are not used. Algebraic shifts: 1. First operand is treated as a 31 or 63 bit integer. 2. The sign bit will not change. 3. The condition code is set after execution. Logical shifts: 1. First operand is treated as a 32 or 64 bit integer. 2. The sign bit can change, no inspection is made. 3. The condition code is not affected by the instruction.

118

IBM Mainframe Assembler Language Coding


SLA - Shift Left Algebraic

SLA

R5,8(R0)

Before 00 7F 0A 72
REG 5

After 7F 0A 72 00
REG 5

119

IBM Mainframe Assembler Language Coding


SRA - Shift Right Algebraic

SRA

R5,0(R4)

Before 80 64 E6 00
REG 5

00 00 00 0C
REG 4

After FF F8 06 4E
REG 5

00 00 00 0C
REG 4

120

IBM Mainframe Assembler Language Coding


SLDA - Shift Left Double Algebraic

SLDA R4,8(R6)

Before
00 00 B6 E8
REG 4

BE E8 01 00
REG 5

00 00 00 08
REG 6

After
36 E8 BE E8
REG 4

01 00 00 00
REG 5

00 00 00 08
REG 6

The 63 numeric bits of the even-odd register pair are shifted to the left, leaving the sign bit unchanged. Because a significant bit is shifted out of bit position 1 of register 4, overflow is indicated by setting condition code to 3.
121

IBM Mainframe Assembler Language Coding


SRDA - Shift Right Double Algebraic

SRDA R4,4(R6)

Before
80 00 C8 B4
REG 4

FF FF FF FF
REG 5

00 00 00 08
REG 6

After
FF F8 00 0C
REG 4

8B 4F FF FF
REG 5

00 00 00 08
REG 6

122

IBM Mainframe Assembler Language Coding


SLL - Shift Left Logical

SLL R5,8(R4)

Before 00 00 0A BC
REG 5

00 00 00 04
REG 4

After 00 AB C0 00
REG 5

00 00 00 04
REG 4

123

IBM Mainframe Assembler Language Coding


SRL - Shift Right Logical

SRL R5,8(R4)

Before 00 AB C0 00
REG 5

00 00 00 04
REG 4

After 00 00 0A BC
REG 5

00 00 00 04
REG 4

124

IBM Mainframe Assembler Language Coding


SLDL - Shift Left Double Logical

SLDL R4,8(R6)

Before
00 00 B6 E8
REG 4

BE E8 01 00
REG 5

00 00 00 08
REG 6

After
B6 E8 BE E8
REG 4

01 00 00 00
REG 5

00 00 00 08
REG 6

125

IBM Mainframe Assembler Language Coding


SRDL - Shift Right Double Logical

SRDL R4,4(R6)

Before
80 00 C8 B4
REG 4

FF FF FF FF
REG 5

00 00 00 08
REG 6

After
00 08 00 0C
REG 4

8B 4F FF FF
REG 5

00 00 00 08
REG 6

126

IBM Mainframe Assembler Language Coding


Extended Mnemonics In order to make checking condition codes a little easier, instructions called extended mnemonics have been developed. These instructions actually cause a BC instruction to be executed but you do not have to specify the mask field value. The name implies the usage. e.g. BE is equal to BC 8,FOUND FOUND

After compare instructions (A:B) BH BL BE BNH BNL BNE or or or or or or BHR BLR BER BNHR BNLR BNER Branch on A High Branch on A Low Branch on A Equal B Branch on A Not High Branch on A Not Low Branch on A Not Equal B

127

IBM Mainframe Assembler Language Coding


Extended Mnemonics After arithmetic instructions BP BM BZ BO BNP BNM BNZ BNO or or or or or or or or BPR BMR BZR BOR BNPR BNMR BNZR BNOR Branch on Plus Branch on Minus Branch on Zero Branch on Overflow Branch on Not Plus Branch on Not Minus Branch on Not Zero Branch on No Overflow

After the TM (Test Under Mask) instruction BO BZ BM BNO BNZ BNM or or or or or or BOR BZR BMR BNOR BNZR BNMR Branch if Ones Branch if Zeros Branch if Mixed Branch if Not Ones Branch if Not Zeros Branch if Not Mixed

128

IBM Mainframe Assembler Language Coding


Define Constant - Address Constant - "A" Type Gives the address of the desired symbol as a binary integer. Represents addresses internal to the program. Constant is enclosed in parentheses rather than apostrophes. The address appears in a four byte field. FORMAT: label DC A(symbol)
ADDR1 ADDR2 STMT 452 453 SOURCE STATEMENT LIT2 DC LIT3 DC

LOC OBJECT CODE 000485 C4C1E8 CL3'DAY' 000488 D4E2D7 CL3'MSP' 00048B 00 00048C 00000485

454

ADDRESS DC A(LIT2)

last updated 7/28/99

129

IBM Mainframe Assembler Language Coding


Define Constant - Address Constant - "V" Type This is an external address constant; e.g. it reserves space in the program for an address outside the program in which it resides. It is normally used to refer symbolically to the entry point of another program to allow for "calling" or passing control to that program. A value of zero is assembled into the space reserved for the V-type constant; the correct relocated value of the address is inserted into this space by the linkage editor before your program is loaded. FORMAT:
LOC 000485 000488 00048B 00048C 000490

label

DC

V(PROG2)
STMT SOURCE STATEMENT DC CL3'DAY' DC CL3'MSP' DC A(LIT2)

OBJECT CODE C4C1E8 D4E2D7 00 00000485 00000000

ADDR1 ADDR2

452 LIT2 453 LIT3 454 ADDRESS

455 PROGADDR DC V(PROG2)

130