Page 1 of 2

Trouble with Edit/Ed (Assembler)

PostPosted: Wed Nov 16, 2011 1:10 am
by RISCCISCInstSet
Apparently in IBM assembler if I apply "ED MASK1,DATA1" with MASK1 = x'402020212060' and DATA1 = x'00000C'. MASK1 then prints: bbbbb0b.

I know an edit mask is made of

− A fill byte
− Digit select characters (x’20’)
− Significance start characters (x’21’)
− Field separator characters (x’22’)
− Message bytes (anything else)

The first byte is the "fill byte".

:arrow: What I want here is some clarification such that I can properly understand why I get the result I do.

Re: Trouble with Edit/Ed (Assembler)

PostPosted: Thu Nov 17, 2011 12:17 pm
by dick scherrer
Hello,

See if this helps - it is part of a dialog from elsewhere that i was involved with a few years ago:

CODE SNIPPET:

ED MASK,NUM1
MVC OUTREC,MASK
PUT OUTFILE,OUTAREA


NUM1 DC P'0012345'
MASK DC X'5C2020202020204B20'
OUTAREA DS 0CL80
OUTREC DS CL9
SET DS CL71' '


BUT THIS IS GIVING THE O/P AS "***1234.5" BUT I WANTED WAS
"**1234.5" IT IS GIVING ONE * EXTRA.IS THERE ANY PROBLEM IN MY CODING COULD U CHECK THIS OUT

From me:
I believe your code is working.

Now you need to add another MVC to move the length you want from the result of the EDit to the "final output" area.

One of the "features" of the EDit is that it has to have things "its own way" which means all of the digits need to be accounted for. Once the instruction completes, you have control of the result.

Let me know if that doesn't get the result you want.


From another:
Just one additional hint. Your EditMask must have as many signs as as there are numerics in your pack-field, plus each special sign for editing the output.

Example:

Pack-Field DC PL04'4321'

This is hex 00 04 32 1C, which means 7 numeric digits

So mask could be normaly 20202020202020 without any special-sign
And now with Comma and point 20204B2020216B2020
This will result in 43,21 The mask-sign 20 doesn't print a zero but the mask-sign 21 prints it.

So now: pack-field = 7 digits = mask = 7 digits + 4B + 6B = 9 EditSigns

You could a an 5C in front for getting the floating asteriks until a non zero numerig digit. You could also add an hex 60 for getting a negative-sign printed, when the the value is less then zero.


You may want to review your understanding of the edit mask.

Also, your topic has been moved to the Assembler part of the forum - which may cause additional replies :)

Re: Trouble with Edit/Ed (Assembler)

PostPosted: Thu Nov 17, 2011 5:29 pm
by steve-myers
The first problem is you have an even number of digit select characters (20 and 21) in your mask.Until you learn ED/EDMK really well, you should always specify an odd number of digit select characters. The second problem is you ran out of digit select characters before you ran into a non-zero digit in the data, so ED replaced all the digit selects and the 60 character at the end of your mask with the fill character.

Read the description of ED in Principles of Operation very carefully/ It's very hard going, but everything you need to know is there.

Re: Trouble with Edit/Ed (Assembler)

PostPosted: Thu Nov 17, 2011 10:13 pm
by RISCCISCInstSet
Thank you for your help. I'll get back to you if I have trouble. :)

Re: Trouble with Edit/Ed (Assembler)

PostPosted: Sat Nov 19, 2011 4:04 am
by RISCCISCInstSet
:!: It looks like I had a typo - it looks like MASK1 should have been x'40202020212060. :oops:

Re: Trouble with Edit/Ed (Assembler)

PostPosted: Sat Nov 19, 2011 6:55 am
by steve-myers
Agreed.

Re: Trouble with Edit/Ed (Assembler)

PostPosted: Sun Nov 20, 2011 12:09 am
by RISCCISCInstSet
I should have made a request for information.
The first problem is you have an even number of digit select characters (20 and 21) in your mask.Until you learn ED/EDMK really well, you should always specify an odd number of digit select characters. The second problem is you ran out of digit select characters before you ran into a non-zero digit in the data, so ED replaced all the digit selects and the 60 character at the end of your mask with the fill character.
I made a typographical error, which changes how one must look at the information. How does the edit instruction respond to this new parameter? Should I just RTFM?

Re: Trouble with Edit/Ed (Assembler)

PostPosted: Sun Nov 20, 2011 12:25 am
by enrico-sorichetti
How does the edit instruction respond to this new parameter? Should I just RTFM?


since You said somewhere in Your other topics that You had solved the z390 issues
why not test on Your own.

on the other side the description and the examples of the EDIT and EDIT_AND_MARK instructions in the POP
are pretty clear and explanatory themselves

for the latest POP see here
http://publib.boulder.ibm.com/infocente ... /index.jsp

Re: Trouble with Edit/Ed (Assembler)

PostPosted: Sun Nov 20, 2011 3:28 am
by steve-myers
RISCCISCInstSet wrote:... How does the edit instruction respond to this new parameter? Should I just RTFM?
What new parameter? I dob't think ED has ever chamged. There was a minor change to EDMK for AMODE 31 operation.

Re: Trouble with Edit/Ed (Assembler)

PostPosted: Sun Nov 20, 2011 8:43 am
by steve-myers
Here is one of the few times it is valid to specify an even number of digit selexct bytes in an ED/EDMK mask
EDTIME   CSECT
         USING *,12
         SAVE  (14,12),,*
         LR    12,15
         TIME  DEC
         ST    0,PDTIME
         ED    DISPTIME,PDTIME
         LA    0,L'MSG
         LA    1,MSG
         TPUT  (1),(0),R
         RETURN (14,12),T,RC=0
         DC    0F'0'
PDTIME   DC    PL4'0'
MSG      DC   0C'IT IS NOW HH:MM:SS.TH'
         DC    C'IT IS NOW'
DISPTIME DC   0C' HH:MM:SS.TH'
         DC    C' ',X'2120',C':',X'2020',C':'
         DC    X'2020',C'.',X'2020'
         END   EDTIME
The reason this works is the TIME DEC macro returns the time of day as 8 packed decimal digits. The ED instruction converts all 8 digits to EBCDIC numeric characters..

Notice, too, how I form the edit mask. The 0C' HH:MM:SS.TH' does not generate any storage. It just documents what I want the edit mask to look like. The C' ',X'2120',C':',X'2020',C':' and the next line are the actual edit mask. In real programs I usual form the three line in one long line, but because of the restricted width of the code block here I wrote 3 shorter lines. My method also means I do not need to knowthe EBCDIC codes for the non digit select characters.

The program does not use a new save area. The TIME and TPUT macros generate an SVC and does not require a save area