>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

Reply via email to