Thanks ... extremely informative.

On Fri, Jul 13, 2012 at 2:24 PM, Dan Skomsky @ Home
<poodles...@sbcglobal.net> wrote:
> From an old discussion on the same subject from back in '05 over at
> http://www.tek-tips.com :
>
> Here's an explanation of what is happening.  When we were converting from VS
> COBOL to COBOL II/COBOL 370, I found the book "COBOL/370 FOR VS COBOL AND
> COBOL II PROGRAMMERS by Harvey Bookman.  Here's what he says about your
> question....
>
> "One change from VS COBOL to COBOL/370 that may seem quite baffling occurs
> when a constant or another COMP-3 data field is added or subtracted to or
> from a signed COMP-3 data field.  The VS COBOL compiler produced only an Add
> Packed (AP) or Subtract Packed (SP) instruction.  COBOL/370 still produces
> the same instruction but then issues a Zero and Add Packed (ZAP) of the
> resulting field into itself.  The ZAP is executed for a very subtle reason.
> When two negative numbers are added together and an overflow occurs, the
> overflow flag in the condition code is turned on while the resulting sign is
> set as if overflow did not occur.  This means that if two numbers each
> defined as PIC S9(03) COMP-3 were added together, and they had values of -1
> and -999 before the addition, the resulting field would be zero (the digit
> that overflowed was truncated) with its sign negative.  The ZAP will
> preserve the sign of all other computations but will change a zero with a
> negative sign to a zero with a positive sign."
>
> "Ensuring a positive sign in a zero result was not necessary in the VS COBOL
> compiler.  This is because the VS COBOL compiler used a Compare Packed (CP)
> instruction to compare numeric fields.  It is interesting that COBOL/370 now
> often produces a Compare Logical (CLC) instruction to compare numeric
> fields.  While this is a faster instruction than CP, it requires the same
> sign value for an equal condition to occur.  For example, a CP instruction
> will find fields with hexadecimal values '0F' and '0C' equal, while the CLC
> will not."
>
> The same instructions are generated in Enterprise COBOL as were for
> COBOL/370.
>
> HTH
>
> -----Original Message-----
> From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On
> Behalf Of Itschak Mugzach
> Sent: Friday, July 13, 2012 4:10 PM
> To: IBM-MAIN@LISTSERV.UA.EDU
> Subject: Re: COBOL packed decimal
>
> Zero and add pack.
>
> ITschak
>
> On Sat, Jul 14, 2012 at 12:05 AM, Frank Swarbrick <frank.swarbr...@yahoo.com
>> wrote:
>
>> COBOL code
>> 77  ws-num-packed              pic S9(9) packed-decimal.
>>
>>     add 2 to ws-num-packed
>>
>>
>> Generated assembler:
>>
>>
>> 000014
>> ADD
>>    00036A                 GN=16    EQU
>> *
>>    00036A  FA40 8008 A02C          AP    8(5,8),44(1,10)
>> WS-NUM-PACKED                     PGMLIT AT +40
>>    000370  F844 8008 8008          ZAP   8(5,8),8(5,8)
>> WS-NUM-PACKED                     WS-NUM-PACKED
>>
>>
>> What is the purpose of the ZAP?
>>
>> Thanks,
>> Frank
>>
>>
>> ----------------------------------------------------------------------
>> For IBM-MAIN subscribe / signoff / archive access instructions,
>> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>>
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to