thanks for your help. and i do some tests about them.
first---------------------
num1 pic s9(5)
num2 pic s9(5)
---------------------
if i accept both num1 and num2 as 25, it will be S0C7, i think it because that it actually is F2F5404040,when computing ,it converts to 250004,if it is unsigned, it will be 25000F, so unsigned works, but signed needs last byte to be a number. for example:input 00025 and 00026, the result is 0005A( A for hex C1); input 00025 and 00025, the result is 0005:(: for C0 ? , i am not sure). and i also found ,if input "-" which hex is 60, it works like space.
second----------------------
num1 x(5) value "25"
num2 9(5)
num3 s9(5)
total-num2-num3 s9(5)
---------------------------------
move num1 to num2 num3
display num2 : 25<space><space>0
display num3: 25<space><space>:
add 1 to num2 : 25001
add 1 to num3: 2500A
compute num2+num3: 5000:
so ,it seems unlike accept statement, move statement works similar about signed and unsigned number.
and about your question "If you want a little exercise, try to work out how to make your existing program, unchanged, un-recompiled, get an S0C7 and tell us why."
i try some number ,it all works ,can you give some hints? thanks !