>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