免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 40638 | 回复: 71
打印 上一主题 下一主题

ILE RPG4 C表常用操作码学习笔记(按字母顺序发) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-03 13:37 |只看该作者 |倒序浏览
(这个对编程很重要啊!希望和大家一起进步)!!!!!!!!!!!
ADD(加)
格式:
               
操作码        因子1        因子2        结果字段        指示器
ADD(H)        加数        加数           和          +        -        Z
自由格式        不允许使用+操作符

如果说明了因子1,将因子1和因子2相加,结果放在结果字段中。如果没有说明因子1,则因子2的内容与结果字段的内容相加,结果放在结果字段中。因子1和因子2必须是数字型,它可以是:数组、数组元素、常量、字段、文字、子字段或表。
对于ADD、SUB、MULT和DIV操作,因子1不是必需的。如果不规定因子1,执行操作时默认因子1和结果字段是相同字段。
舍入操作是将结果字段中规定小数位的后边一位做四舍五入,只允许对算术操作进行舍入,不能对MVR操作或后面跟MVR的DIV操作作舍入。仅当计算结果的小数位大于结果字段的小数位时,舍入才影响结果,舍入操作在计算操作之后,把结果放到结果字段之前做。舍入操作之后依据结果字段中的值设置结果指示器。

     *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
        C*
        C* 把1加到RECNO中。
     C                   ADD       1             RECNO
        C* 把EHWORK的内容加到CURHRS中。
     C                   ADD       EHWRK         CURHRS
       C* 把OVRTM和REGHRS的内容加到一起放在TOTPAY中。
     C*
        C     OVRTM         ADD       REGHRS        TOTPA

论坛徽章:
0
2 [报告]
发表于 2005-06-03 19:08 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

支持!
希望坚持下去!

论坛徽章:
0
3 [报告]
发表于 2005-06-05 17:39 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

不错,支持.

论坛徽章:
0
4 [报告]
发表于 2005-06-06 11:00 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

ANDxx(与)

格式:               
操作码        因子1        因子2        结果字段        指示器
ANDxx        比较数        比较数               
自由格式        不允许使用AND操作符

    此操作必须直接跟在一个ANDxx,DOUxx,DOWxx,IFxx,OFxx或WHENxx操作之后。用ANDxx操作可组成DOUxx,DOWxx,IFxx和WHENxx完整的条件。ANDxx操作的优先级高于ORxx操作。
    控制级入口(7和8列)可以是空格,也可以是L1-L9指示器、LR指示器或一组相应程序段中语句的L0项。该控制级的项必须和相应的DOUxx、DOWxx、IFxx或WHENxx操作的控制及项相同。不允许使用条件指示器(9-11列)。
因子1和因子2必须是一字符文字、命名常量、象征常数、表名、数组元素、数据结构或字段名。因子1和因子2必须是同一类型。例如,字符型字段不能与数字进行比较。因子1和因子2的比较遵循比较操作所规定的原则。见4.3.6“比较操作”。
在操作ANDxx,CABxx,DOUxx,DOWxx,CASxx,IFxx,ORxx和WHENxx中,xx可以是:

                        xx                                含义
                        GT                                因子1大于因子2
                        LT                                因子1小于因子2
                        EQ                                因子1等于因子2
                        NE                                因子1不等于因子2
                        GE                                因子1大于或等于因子2
                        LE                                因子1小于或等于因子2
                        空格                        无条件处理(CASxx或CABxx)



      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C* 如果ACODE等于A且指示器50为ON,执行MOVE和WRITE操作。
      C*
      C     ACODE         IFEQ      'A'
      C     *IN50         ANDEQ     *ON
      C                   MOVE      'A'           ACREC
      C                   WRITE     RCRSN
      C* 如果前面的条件不满足但ACODE等于A,指示器50为OFF,且
      C* ACREC等于D时,执行下面的操作。
      C*
      C                   ELSE
      C     ACODE         IFEQ      'A'
      C     *IN50         ANDEQ     *OFF
      C     ACREC         ANDEQ     'D'
      C                   MOVE      'A'           ACREC
      C                   ENDIF
      C                   ENDIF

论坛徽章:
0
5 [报告]
发表于 2005-06-07 14:21 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

BEGSR(子程序开始)

               
操作码        因子1        因子2        结果字段        指示器
BEGSR        子程序名                       
自由格式        BEGSR subroutine-name
       
    BEGSR操作指出一个RPGⅣ子程序的开始。因子1是子程序的名。它可用在引用子程序的EXSR操作的因子2上说明,也可在引用子程序的CASxx操作的结果字段上说明,或在一个文件错误子例程的INFSR文件说明键字的项中说明。
    控制级项(7和8列)可以是SR或者是空格。不允许条件指示器。
每个子程序必须具有唯一的符号名字。在因子1上用*PSSR说明这是一个异常/错误子例程,用来处理程序发现的异常/错误。用这个键字仅能定义一个子程序。因子1中的*INZSR说明在初始化时将运行这个子程序,用*INZSR仅能定义一个子程序。
RPGⅣ子程序说明必须跟着能被程序执行的所有其它计算操作的后面;但PLIST、PARM、KLIST、KFLD和DEFINE操作可以在ENDSR操作(一个子程序的结束)和BEGSR操作(另一个子程序开始)之间或在所有的子程序之后说明;子程序可以在计算说明中的任何地方用EXSR或CASxx来调用。子程序行可以在7列和8列上用SR规定。对于一个子程序来说7列和8列上有效的规定仅可是SR、AR、OR或空格。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C* 对于子例程,7和8列必须是空格或SR。
      C*
      C                         :
      C                         :
      C                   EXSR      SUBRTB
      C                         :
      C                         :
      C                         :
      CL2                 EXSR      SUBRTA
      C                         :
      C                         :
      C                         :
      C     SUBRTA        BEGSR
      C                         :
      C                         :
      C                         :
      C*  一个子例程调用另一个子例程。
      C*
      C                   EXSR      SUBRTC
      C                         :
      C                         :
      C                         :
      C                   ENDSR
      C     SUBRTB        BEGSR
      C                         :
      C                         :
      C                         :
      C*
      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  在子例程中可以使用GOTO和TAG操作。
      C     START         TAG
      C                         :
      C                         :
      C                         :
      C   23              GOTO      END
      C                         :
      C                         :
      C                         :
      C   24              GOTO      START
      C     END           ENDSR
      C     SUBRTC        BEGSR
      C                         :
      C                         :
      C                         :
      C                   ENDSR
      C*

论坛徽章:
0
6 [报告]
发表于 2005-06-08 09:32 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

哇.这工程好大.楼主真是好人,支持.
stephenxie2003 该用户已被删除
7 [报告]
发表于 2005-06-08 10:03 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2005-06-08 15:16 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

CALL(调用一个程序)

                操作码                因子1                因子2                结果字段                          指示器
                CALL                                        程序名                参数列表名                -  ER  LR

    CALL操作把控制传给因子2上说明的程序。
    因子2必须是一个字符项,规定要被调用的程序名。如果说明了库名,库名后面必须用一个斜线,然后是程序名(例如,‘LIB/PROG’)。因子2必须是一个字段名、文字、命名常量或数组元素,数组元素包含被调用的程序名,也可以是程序所在的库名。如果未说明库名,即用库列表查找程序。
    文字的总长度(包括斜杠)不能超过12个字符。字段或命名常量中不带空格数据的总长度(包括斜杠),不能超过21个字符。如果程序或库名超出10个字符,则只截取10个字符。程序名要明确的用文字、字段、命名常量或数组元素规定,表明被调用的程序。不管任何前导或后继空白。如果某项第一个字符是斜线,则将用库列表查询程序。如果某项的最后一个字符是斜线,将发出一个编译信息。(小写字符不转成大写字符,放在引号中的名,例如“ABC”认为引号是被调用程序名的一部分)。不支持*CURLIB。
    程序的引用是分组进行,这样可避免对目标程序的重复引用。用命名常量或文字对某个程序的所有引用(用CALL语句)都组在一起,这样程序仅被涉及到一次,而对程序的后续引用(仅用命名常量或文字)不再涉及这个程序。
    只有程序名和库名都标识了引用才可以组在一起,用变量名引用的所有程序用变量名组在一起。当用变量引用一个程序时,它的当前值要与用这个变量的前一个程序引用操作中变量值相比较。如果值未改,不做引用。如果有改动,则要引用一个新程序。注意此规则只适于使用变量名的引用。使用命名变量或文字的引用不会再引用,而且它不影响是否用变量来做再引用。图110说明了程序引用的分组。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
      D Pgm_Ex_A        C                   'LIB1/PGM1'
      D Pgm_Ex_B        C                   'PGM1'
      D PGM_Ex_C        C                   'LIB/PGM2'
      I*

      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C                   CALL      Pgm_Ex_A
      C*
      C* 下面二个调用因为有相同的程序名(PGM1)和相同的库名(none),
      C* 所以组在一起。注意,它不能与上面的用Pgm-Ex-A调用组在一起。因为
      C* Pgm-Ex-A有不同的库名(LIB1)。
      C*
      C                   CALL      'PGM1'
      C                   CALL      Pgm_Ex_B
      C*
      C* 下面两个程序引用由于有同样的程序名(PGM2)和相同库名(LIB),
      C* 所以组在一起。
      C*
      C                   CALL      'LIB/PGM2'
      C                   CALL      Pgm_Ex_C
      C*
      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C* 第一个使用CALLV调用,将用变量CALLV调用PGM1,这是一种独立于用
      C* 字母或命名常量调用PGM1的方法(PGM1已在程序中调用过),第二个用
      C* CALLV的结果仍是调用PGM1。因为CALLV的值没有修改。
      C*
      C                   MOVE     'PGM1'         CALLV         21
      C                   CALL     CALLV
      C                   CALL     CALLV
  

图110  程序引用的分组的例子

    在结果字段,说明一个PLIST名来做调用程序和被调用程序间的通讯。如果被调用的程序不传递参数或者是在CALL操作后面直接有PARM参数,结果字段可以是空格。
    71和72列必须是空格。在73和74列可以说明任意一个有效的结果指示器。当从被调用程序有错误返回时置为ON。而在75和76列上,当被调用程序是由LR指示器为ON时返回的RPG程序,这时指示器设为ON。
    DSPPGMREF命令是一个用来显示程序外部引用信息的CL命令。由于CALLB用来调用过程,所以在DSPPGMREF中找不到CALLB操作中的因子2;只能找到CALL操作中的因子2。使用DSPPGMREF,也查询用命名常量或文字调用的程序名。
    图111  说明了CALL 操作的使用。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C* CALL操作调用PROGA,并允许PROGA访问在另处定义的FieldA和FieldB。
      C* PROGA用FieldA和FieldB的内容运行,当PROGA完成后,控制返回给最后
      C* 一个PARM语句后的那个语句。
      C*
      C*
      C                   CALL      'PROGA'
      C                   PARM                    FieldA
      C                   PARM                    FieldB

论坛徽章:
0
9 [报告]
发表于 2005-06-09 10:53 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

楼主辛苦了!

论坛徽章:
0
10 [报告]
发表于 2005-06-09 11:34 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

的确够累人的,支持!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP