Page 1 of 2

Learning AP instruction - need some help

PostPosted: Wed Aug 22, 2012 9:48 pm
by fast_learner
I am trying to learn the intricacies behind AP instruction and am facing a situation.

Below goes the question ::

Given W DC PL2'10', X DC PL2'-6', Y DC CL2'15', and Z DC PL2'8'. Write the BAL code to
determine Z = W + X + Y . Show the hex representation of Z after each instruction. Your final
answer for Z should be X'019C'. (Reminder: Y must be packed before it can be added.
Define a work field if necessary.)

Above question is from assembler book of Bill Qualls

I can understand that W+X+Y = 10 + (-6) + 15 = 19 and the hex representation of 19 in PL2 would be X'019C'. ------- Step 1

What I cannot understand is the hex addition of W+X+Y
Hex representation of W DC PL2'10' = X'010C'
Hex representation of X DC PL2'-6' = X'006D'
Hex representation of Y DC CL2'15' = X'F1F5' = in packed format = X'015F'
W+X = 010c + 006D = 0179
W+X+Y = 0179 + 015F = 02D8

Now how come 02D8 is different from 019C as deducted in Step 1 above. Can somebody pls help me in understanding this?

Re: Learning AP instruction - need some help

PostPosted: Wed Aug 22, 2012 9:56 pm
by enrico-sorichetti
reread the quiz carefully ....
W is packed
X is packed
Y is NOT packed... is a char

hence the suggestion to use an auxiliary/work variable
(Reminder: Y must be packed before it can be added. Define a work field if necessary.)

in the declarative part
...
*2345678901234567890
YP       DS    Cl2
...

in the instruction part before adding <Y>

...
*2345678901234567890
         PACK  YP,Y
         AP    <total>,YP
...

Re: Learning AP instruction - need some help

PostPosted: Wed Aug 22, 2012 10:03 pm
by dick scherrer
Hello and welcome to the forum,

I believe you need to step Way back and begin again.

Some of your "truths" are not true.

Re: Learning AP instruction - need some help

PostPosted: Wed Aug 22, 2012 10:16 pm
by fast_learner
Thanks for the reply but I am still not able to get an answer to my query.

In totality can somebody write the BAL code to determiner z= W+ X+ Y and show the hex representation of Z after each instruction. We can very well presume that Y has been packed into PK2 DC PL2'0' using the instruction PACK PK2,Y.

The final answer for Z must have the hex representation as X'019C'.

Re: Learning AP instruction - need some help

PostPosted: Wed Aug 22, 2012 10:25 pm
by enrico-sorichetti
Now how come 02D8 is different from 019C as deducted in Step 1 above. Can somebody pls help me in understanding this?


You should use only the numeric part ...
and add/subtract according to the
rightmost half byte which is the sign

W  010 C==> positive
X  006 D==> negative
YP 015 F==> positive

10-6+15 ==> 19

z  019 C==> positive

Re: Learning AP instruction - need some help

PostPosted: Wed Aug 22, 2012 11:25 pm
by Robert Sample
         OPEN  (SNAPO,(OUTPUT))
         SNAP  DCB=SNAPO,ID=001,STORAGE=(STARTADR,ENDADDR)
         PACK  DBLWORD,Y
         SNAP  DCB=SNAPO,ID=002,STORAGE=(STARTADR,ENDADDR)
         CVB   R11,DBLWORD
         SNAP  DCB=SNAPO,ID=003,STORAGE=(STARTADR,ENDADDR)
         ZAP   Z,W
         SNAP  DCB=SNAPO,ID=004,STORAGE=(STARTADR,ENDADDR)
         AP    Z,X
         SNAP  DCB=SNAPO,ID=005,STORAGE=(STARTADR,ENDADDR)
         AP    Z,DBLWORD+6(2)
         SNAP  DCB=SNAPO,ID=006,STORAGE=(STARTADR,ENDADDR)
         CLOSE (SNAPO)
* RESTORE REGISTERS AND RETURN WITH RC=0
         L     R13,4(R13)
         LM    R14,R12,12(R13)
         XR    R15,R15
         BR    R14
         LTORG
**************************************************
*       STORAGE FOR MAIN                         *
**************************************************
MAINSAVE DS    18F
STARTADR EQU   *
W        DC    PL2'10'
X        DC    PL2'-6'
Y        DC    CL2'15'
Z        DC    PL2'8'
DBLWORD  DC    D'0'
ENDADDR  EQU   *
*
SNAPO    DCB   DDNAME=SYSOUT,BLKSIZE=1632,DSORG=PS,LRECL=125,MACRF=(W),X
               RECFM=VBA
produces results (extracted) of
244         STEP STEP1           TIME 134553   DATE 12235    ID = 001    CPUID =

ENTRY TO SNAP    078D1000  00007E42  ILC  02  INTC  0033

                                                         010C006D F1F5008C   *
00000000 00000000 00000000                                                   *..
244         STEP STEP1           TIME 134553   DATE 12235    ID = 001

                    DUMP INDEX
                    ----------
AS                                               PAGE NUMBER
--                                               -----------
ATED TO TCB AT: 008FF890/....                    00000001
REAS.........................                    00000001
MP
244         STEP STEP1           TIME 134553   DATE 12235    ID = 002    CPUID =

ENTRY TO SNAP    078D1000  00007E72  ILC  02  INTC  0033

                                                         010C006D F1F5008C   *
00000000 0000015F 00000000                                                   *..
244         STEP STEP1           TIME 134553   DATE 12235    ID = 002

                    DUMP INDEX
                    ----------
AS                                               PAGE NUMBER
--                                               -----------
ATED TO TCB AT: 008FF890/....                    00000001
REAS.........................                    00000001
MP
244         STEP STEP1           TIME 134553   DATE 12235    ID = 003    CPUID =

ENTRY TO SNAP    078D1000  00007EA2  ILC  02  INTC  0033

                                                         010C006D F1F5008C   *
00000000 0000015F 00000000                                                   *..
244         STEP STEP1           TIME 134553   DATE 12235    ID = 003

                    DUMP INDEX
                    ----------
AS                                               PAGE NUMBER
--                                               -----------
ATED TO TCB AT: 008FF890/....                    00000001
REAS.........................                    00000001
MP
244         STEP STEP1           TIME 134553   DATE 12235    ID = 004    CPUID =

ENTRY TO SNAP    078D1000  00007ED2  ILC  02  INTC  0033

                                                         010C006D F1F5010C   *
00000000 0000015F 00000000                                                   *..
244         STEP STEP1           TIME 134553   DATE 12235    ID = 004

                    DUMP INDEX
                    ----------
AS                                               PAGE NUMBER
--                                               -----------
ATED TO TCB AT: 008FF890/....                    00000001
REAS.........................                    00000001
MP
244         STEP STEP1           TIME 134553   DATE 12235    ID = 005    CPUID =

ENTRY TO SNAP    078D1000  00007F02  ILC  02  INTC  0033

                                                         010C006D F1F5004C   *
00000000 0000015F 00000000                                                   *..
244         STEP STEP1           TIME 134553   DATE 12235    ID = 005

                    DUMP INDEX
                    ----------
AS                                               PAGE NUMBER
--                                               -----------
ATED TO TCB AT: 008FF890/....                    00000001
REAS.........................                    00000001
MP
244         STEP STEP1           TIME 134553   DATE 12235    ID = 006    CPUID =

ENTRY TO SNAP    078D1000  00007F32  ILC  02  INTC  0033

                                                         010C006D F1F5019C   *
00000000 0000015F 00000000                                                   *..
244         STEP STEP1           TIME 134553   DATE 12235    ID = 006

                    DUMP INDEX
                    ----------
AS                                               PAGE NUMBER
--                                               -----------
ATED TO TCB AT: 008FF890/....                    00000001
REAS.........................                    00000001
which shows you precisely what is in memory each step of the way. Adding PDATA=(REGS) to the SNAP statement would add the registers, but that adds a lot of lines to the display and doesn't really provide much assistance in this particular case. The program output variables start 010C006D and go to the next line in each output (watch for ID = nnn to change).

Re: Learning AP instruction - need some help

PostPosted: Wed Aug 22, 2012 11:48 pm
by dick scherrer
Hello,

My earlier reply has been "cropped" as i got crossed up and the info was basically useless :oops:

Sorry 'bout that,

d

Re: Learning AP instruction - need some help

PostPosted: Wed Aug 22, 2012 11:52 pm
by steve-myers
There are two "ringers" here.
  • The initial value of Z does not figure into the final value of Z.
  • Y is defined as character, which for the purposes of this exercise can be considered to be zoned decimal. It has to be converted to packed decimal before it can be used.
Mr. Scherrer's analysis about packed decimal signs is incorrect. There is no such thing as a hexadecimal O (character O, not digit 0). A packed decimal sign is the last 4 bits (1 hexadecimal digit) of a packed decimal value. There are two classes of packed decimal signs.
  • "Preferred" signs: C for positive and D for negative. The packed decimal instructions always generate a "preferred" sign. To a lazy eye, D often looks like O,
  • Alternate signs: A, B, E and F. The only one I have memorized is F, which is considered to be positive.

    PACK TEMP,Y
    ...
    Y DC CL2'15' (X'F1F5')
    TEMP DC PL2'0'

    creates X'015F' in TEMP, which packed decimal arithmetic considers to be the equivalent of PL2'15'.
Now I'm not going to to insert my solution here: this is your homework,after all, and you will learn more by doing it yourself and not copying my solution.

Re: Learning AP instruction - need some help

PostPosted: Thu Aug 23, 2012 2:06 am
by fast_learner
Thanks to one and all for the replies.

I am aware of the code solution that would give me the desired result of Z having the hex representation of x'019c'.
What is bemusing me is the individual steps towards the solution.

If somebody can depict the actual hexadecimal addition that takes place here to reach x'019c' - this would help me a lot in solving my actual doubt.

My hexadecimal addition gives me a result of x'02D8' [010C+006D+015F = 02D8] as depicted in the actual question but how can that be equal to the correct answer which is x'019C'?

Please note - I have assumed that Z would be first filled with zeroes using ZAP and then it will be used to store the addition of W+X+Y.

Re: Learning AP instruction - need some help

PostPosted: Thu Aug 23, 2012 2:15 am
by fast_learner
Hi Robert -

I am extremely grateful to you. I studied your reply and it did helped me a lot to understand the intricacy behind AP instruction and would go a long way in building my concepts.

On the same note - can I request one more favour from you? Do you have any 'Emulator' using which I can run Assembler programs on my personal PC. If yes can you pls share the same with me. This would help me in practically solving the exercise.