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