Excellent! Thank you very much! Subtle is right! :-) Negative zero, huh? Must be that new math, thing. :-)
Frank >________________________________ > From: "Dan Skomsky @ Home" <poodles...@sbcglobal.net> >To: IBM-MAIN@LISTSERV.UA.EDU >Sent: Friday, July 13, 2012 3:24 PM >Subject: Re: COBOL packed decimal > >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