Reputation: 75
So I'm trying to learn assembler and I'm using z390 as an emulator(not my choice) and I'm having a great deal of difficulty. I was hoping for some help because I have ALOT of errors.
So I took the college try at it and got this:
FIRST CSECT
BALR 12,0
USING BASE,12
* FIRST VOLUME BEING CALCULATED ------------------------
L R2,L1 STORE L1 IN REG 2.
L R3,W1 STORE W1 IN REG 3.
L R4,H1 STORE H1 IN REG 4.
MR R1,3 MUTIPLY CONTENTS OF REG 2. BY REG 3. STORE CONTENTS IN REG 2.
M R1,H1 MUTIPLY CONTENTS OF REG 2. BY H1.
ST R2,VOL1 STORE RESULT OF VOLUME IN VOL1.
* SECOND VOLUME BEING CALCULATED ------------------------
L R2,L1 STORE L1 IN REG 2.(UNCHANGED FROM BEFORE)
M R1,DBL DOUBLES REG 2. VALUE
ST R2,L2 STORE DOUBLED LENGTH IN L2
M R2,DBL DOUBLES REG 3. VALUE
ST R3,W2 STORE DOUBLED WIDTH IN W2
M R3,DBL DOUBLES REG 4. VALUE
ST R4,H2 STORE DOUBLED HEIGHT IN H2
MR R1,3 MUTIPLY CONTENTS OF REG 2. BY REG 3. STORE CONTENTS IN REG 2.
M R1,H2 MUTIPLY CONTENTS OF REG 2. BY H1.
ST R2,VOL2 STORE RESULT OF VOLUME(DOUBLED) IN VOL2.
* DIFF. BETWEEN BOTH ------------------------
L R2,VOL1 LOAD VOL1 INTO REG. 2.
S R2,VOL2 SUBTRACT R2 FROM VOL2.
ST R2,DIF STORE THE RESULT.
* LABLES ------------------------
L1 DC F'2' LENGTH - 2
W1 DC F'2' WIDTH - 2
H1 DC F'2' HEIGHT - 2
DBL DC F'2' CONSTANT TO DOUBLE ALL VALUES.
VOL1 DS F STORES VOLUME 1. - NON DOUBLED.
VOL2 DS F STORES VOLUME 2. - DOUBLED.
L2 DS F DOUBLED LENGTH
W2 DS F DOUBLED WIDTH
H2 DS F DOUBLED HEIGHT
DIF DS F DIFF. BETWEEN VOL1 AND VOL2
*
*
So I thought that this was it because I understand the concept of everything here, but Z390 gives me this output:
Enter command or help
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
*** 02/06/17 18:26:24 CMD task started
C:\Program Files (x86)\Automated Software Tools\z390>CD \Program Files (x86)\Automated Software Tools\z390\
C:\Program Files (x86)\Automated Software Tools\z390>ASMLG "C:\Users\Owner\Desktop\New folder\SHELL" TRACE CON
C:\Program Files (x86)\Automated Software Tools\z390>rem asmlg assemble, link, and go from mlc to 390 execution
C:\Program Files (x86)\Automated Software Tools\z390>echo off
18:26:24 SHELL MZ390 START USING z390 V1.5.06 ON J2SE 1.8.0_73 02/06/17
AZ390E error 98 (1/3)3 USING BASE,12
AZ390E error 198 (1/5)5 L R2,L1 STORE L1 IN REG 2.
AZ390E error 198 (1/6)6 L R3,W1 STORE W1 IN REG 3.
AZ390E error 198 (1/7)7 L R4,H1 STORE H1 IN REG 4.
AZ390E error 198 (1/8)8 MR R1,3 MUTIPLY CONTENTS OF REG 2. BY REG 3. STORE
AZ390E error 198 (1/9)9 M R1,H1 MUTIPLY CONTENTS OF REG 2. BY H1.
AZ390E error 198 (1/10)10 ST R2,VOL1 STORE RESULT OF VOLUME IN VOL1.
AZ390E error 198 (1/12)12 L R2,L1 STORE L1 IN REG 2.(UNCHANGED FROM BEFORE)
AZ390E error 198 (1/13)13 M R1,DBL DOUBLES REG 2. VALUE
AZ390E error 198 (1/14)14 ST R2,L2 STORE DOUBLED LENGTH IN L2
AZ390E error 198 (1/15)15 M R2,DBL DOUBLES REG 3. VALUE
AZ390E error 198 (1/16)16 ST R3,W2 STORE DOUBLED WIDTH IN W2
AZ390E error 198 (1/17)17 M R3,DBL DOUBLES REG 4. VALUE
AZ390E error 198 (1/18)18 ST R4,H2 STORE DOUBLED HEIGHT IN H2
AZ390E error 198 (1/19)19 MR R1,3 MUTIPLY CONTENTS OF REG 2. BY REG 3. STORE
AZ390E error 198 (1/20)20 M R1,H2 MUTIPLY CONTENTS OF REG 2. BY H1.
AZ390E error 198 (1/21)21 ST R2,VOL2 STORE RESULT OF VOLUME(DOUBLED) IN VOL2.
AZ390E error 198 (1/23)23 L R2,VOL1 LOAD VOL1 INTO REG. 2.
AZ390E error 198 (1/24)24 S R2,VOL2 SUBTRACT R2 FROM VOL2.
AZ390E error 198 (1/25)25 ST R2,DIF STORE THE RESULT.
18:26:25 SHELL MZ390 ENDED RC=12 SEC= 0 MEM(MB)= 38 IO=232
Press any key to continue . . .
C:\Program Files (x86)\Automated Software Tools\z390>exit
*** 02/06/17 18:26:25 CMD task ended TOT SEC=1 TOT LOG IO=30
So pretty much I've been trying to figure out what I'm doing wrong for an hour, and so I turn to you guys / gals. So what the **** am I doing wrong?
Updated code, still getting errors on line 9,20?
FIRST CSECT
BALR 12,0
USING BASE,12
BASE L 3,L1 R3 = LENGTH OF BOX.
L 5,W1 R5 = WIDTH OF BOX.
L 7,H1 R7 = HEIGHT OF BOX.
MR 2,5 HEIGHT OF BOX X WIDTH OF BOX.
M 2,H1 RESULT OF MUTIPLY X HEIGHT OF BOX.
ST 3,VOL1 R2 = ALL HEIGHT X WIDTH X HEIGHT.
L 3,L1 R3 = LENGTH OF BOX.
M 2,DBL MUTIPLY LENGTH OF BOX BY 2.
ST 3,L2 R3 = LENGTH OF BOX X 2.
M 4,DBL MUTIPLY WIDTH OF BOX BY 2.
ST 5,W2 R5 = WIDTH OF BOX BY 2.
M 6,DBL MUTIPLY HEIGHT OF BOX BY 2
ST 7,H2 R7 = HEIGHT OF BOX X 2
MR 2,5 MUTIPLY LENGTH OF BOX (DOUBLED) BY WIDTH OF BOX(DOUBLED)
M 2,H2 MUTIPLY RESULT BY HEIGHT OF BOX (DOUBLED)
ST 3,VOL2 R3 = LENGTH X WIDTH X HEIGHT
L 3,VOL2 R3 = VOLUME OF FIRST BOX.
S 3,VOL1 FIRST VOLUME - SECOND VOLUME(DOUBLED)
ST 3,DIF R3 = DIFF. BETWEEN VOLUMES.
L1 DC F'2' LENGTH = 2
W1 DC F'2' WIDTH = 2
H1 DC F'2' HEIGHT = 2
DBL DC F'2' CONSTANT VALUE = 2
VOL1 DS F STORAGE FOR FIRST VOLUME (NON-DOUBLED)
VOL2 DS F STORAGE FOR SECOND VOLUME (DOUBLED)
L2 DS F LENGTH(DOUBLED)
W2 DS F WIDTH(DOUBLED)
H2 DS F HEIGHT(DOUBLED)
DIF DS F STORAGE FOR DIFFERNCE IN VOLUMES.
*
*
END FIRST
(Updated with better comments as suggested by user.)
New Error???
16:08:37 SHELL EZ390 START USING z390 V1.5.06 ON J2SE 1.8.0_73 02/08/17
EZ390I Copyright 2011 Automated Software Tools Corporation
EZ390I z390 is licensed under GNU General Public License
EZ390I program = C:\Users\Owner\Desktop\New folder\SHELL.390
EZ390I options =
EZ390I Trace Table Entry 800FFFB0 5050C066 ST
EZ390I Trace Table Entry 800FFFB4 5C60C056 M
EZ390I Trace Table Entry 800FFFB8 5070C06A ST
EZ390I Trace Table Entry 800FFFBC 1C25 MR
EZ390I Trace Table Entry 800FFFBE 5C20C06A M
EZ390I Trace Table Entry 800FFFC2 5030C05E ST
EZ390I Trace Table Entry 800FFFC6 5830C05E L
EZ390I Trace Table Entry 800FFFCA 5B30C05A S
EZ390I Trace Table Entry 800FFFCE 5030C06E ST
EZ390E error 11 ABEND PSW=07052600 800FFFD2 F6F600000002 ????? ABEND S0C1
R0-R3 F4F4F4F4800FFF88 F4F4F4F400002300 F4F4F4F400000000 F4F4F4F400000038
R4-R7 F4F4F4F400000000 F4F4F4F400000004 F4F4F4F400000000 F4F4F4F400000004
R8-RB F4F4F4F4F4F4F4F4 F4F4F4F4F4F4F4F4 F4F4F4F4F4F4F4F4 F4F4F4F4F4F4F4F4
RC-RF F4F4F4F4800FFF8A F4F4F4F400002100 F4F4F4F400002018 F4F4F4F4800FFF88
EZ390E error 12 program aborting due to abend S0C1
EZ390I instructions/sec = 333
EZ390I total errors = 1
16:08:37 SHELL EZ390 ENDED RC=16 SEC= 0 MEM(MB)= 18 IO=37 INS=21
Upvotes: -1
Views: 628
Reputation: 11
I can see that you forgot to put an exit to your program. It was executing the instructions in sequence and ST 3,DIF was the last valid instruction. After that you have a some DC, which is basically data. When the CPU executes the store mentioned above, it will fetch the "next instruction" in sequence and finds the constant, giving an "OC1" abend or, better explained, an "invalid operation exception". After the ST 3,DIF you should give back control to the operating system, by issuing an RETURN macro instruction.
Upvotes: 1
Reputation: 2698
I don't have z390 installed at the moment so I can't tell you how to make it print more meaningful error messages, but looking at your code I can immediately see that:
BASE
is undefined (the way you establish addressability it must follow the BALR 12,0
)
R1
, R2
etc. are undefined (you need a series of R1 EQU 1
, R2 EQU 2
etc. statements.)
You probably need to spend a bit more time learning the meaning of names in Assembler.
Upvotes: 1