IBM大型机论坛索引
 
 登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答  寄存器
 

是否需要BALR 1,0.2的可寻址性?


IBM大型机论坛 -> PL / I& Assembler
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
第75章

活跃用户


已加入:2014年6月9日
帖子:119
位置:CT

 发布 发表于:2016年2月24日星期三凌晨12:23
引用回复

嗨,专家们,

我们是否需要BALR 12,0 的可寻址性,或者只使用USING就可以了?
我看到代码写成
码:
巴尔R   12,0
使用方式  *,12


据我所知,USING告诉扰码器将使用哪个基址寄存器和地址来计算目标代码,并且BALR在运行时将地址传递给寄存器。我只是感到困惑,因为程序应该加载到内存中的任何位置,为什么需要BALR分配地址进行注册?

我试着只写简单的代码几行而中止0C4,不知道为什么?
对不起,新手问题。

码:
        巴尔R   12,0     
        使用方式  *,12     
 MOVE   MVC    NUM1,NUM2
 NUM1   DC     CL5'ABCDE'
 NUM2   DC     CL3'FGH' 
 NUM3   DC     CL4'IJKL'
        结束              
回到顶部
查看用户资料 发送私信
比尔·奥博伊尔

CICS 主持人


已加入:2008年1月14日
帖子:2504
地点:美国乔治亚州亚特兰大

 发布 发表:2016年2月24日星期三凌晨12:28
引用回复

之所以得到S0C4,是因为您的常量在逻辑流程中,而汇编程序不知道这一点。

您需要将常量分支到可执行指令。

但是您的程序需要做更多的工作。

嗯...
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

 发布 发表于:2016年2月24日星期三5:11上午
引用回复

使用方式汇编程序指令是您(程序员)向汇编程序保证您(程序员)将在寄存器中插入地址。例如 -
码:
MYPGM    CSECT
         SAVE  (14,12),,*
         BALR  12,0
         USING *,12
         AP    NUM1,NUM2
         RETURN (14,12),RC=0
NUM1     DC    PL5'25000'
NUM2     DC    PL3'12512'
         END   ,
在此程序中,您已经将地址存储到寄存器中。汇编器生成-
码:
  Loc  Object Code    Addr1 Addr2  Stmt   Source Statement         
000000                00000 00028     1 MYPGM    CSECT             
                                      2          保存  (14,12),,*   
000000 47F0 F00A            0000A     4+         B     10(0,15)     
000004 05                             5+         DC    AL1(5)       
000005 D4E8D7C7D4                     6+         DC    CL5'MYPGM'   
00000A 90EC D00C            0000C     7+         STM   14,12,12(13)
00000E 05C0                           8          巴尔R  12,0          
                 R:C  00010           9          使用方式 *,12         
000010 FA42 C010 C015 00020 00025    10          AP    NUM1,NUM2   
                                     11          返回(14,12),RC=0
000016 98EC D00C            0000C    13+         LM    14,12 ,12(13)
00001A 41F0 0000            00000    14+         LA    15,0(0,0)   
00001E 07FE                          15+         BR    14           
000020 000025000C                    16 NUM1     DC    PL5'25000'   
000025 12512C                        17 NUM2     DC    PL3'12512'   
                                     18          结束    ,           
程序员,USING语句为您提供了便利。没有USING语句和其他Assembler辅助工具,您将编写-
码:
MYPGM    CSECT
         DC    X'FA42F00AF00F'
         DC    X'1BFF'
         DC    X'07FE'
         DC    X'000025000C'
         DC    X'12512C'
         END   ,
而不是 -
码:
MYPGM    CSECT
         AP    NUM1-MYPGM(5,15),NUM2-MYPGM(3,15)
         SR    15,15
         BR    14
NUM1     DC    PL5'25000'
NUM2     DC    PL3'12512'
         END   ,
要么
码:
MYPGM    CSECT
         USING *,15
         AP    NUM1,NUM2
         SR    15,15
         BR    14
NUM1     DC    PL5'25000'
NUM2     DC    PL3'12512'
         END   ,
您想写哪一个?我花了7年的时间编写与AMASPZAP控制语句等效的第一个示例,但这并不令人欣慰-而且容易出错!
回到顶部
查看用户资料 发送私信
第75章

活跃用户


已加入:2014年6月9日
帖子:119
位置:CT

 发布 发表:2016年2月24日星期三晚上7:42
引用回复

嗨,史蒂夫,

谢谢您的回答。对于使用指令,我认为我可以理解它是什么或为什么需要它。但是我的问题是我不知道我们真的需要 巴尔R 12,0 与*,12一起使用?
回到顶部
查看用户资料 发送私信
威利·詹森(Willy Jensen)

活跃用户


已加入:2015年9月1日
帖子:416
地点:丹麦

 发布 发表:2016年2月24日星期三晚上8:07
引用回复

如果在调用时r12包含程序的地址,则为否-但通常不是这种情况。良好的做法是在程序开始时自行设置一个基本寄存器。 R15应该包含您的程序的地址,但是r15被某些宏和程序调用所更改,因此通常认为使用起来不安全。因此使用r12。
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

 发布 发表:2016年2月24日星期三晚上8:35
引用回复

为了使USING有用,必须将地址放入寄存器中。
码:
MYPGM    CSECT
         USING 工作区域,11
         USING *,12
         SAVE  (14,12)
         LR    12,15
         GETMAIN R,LV=WASIZE
         LR    11,1
         ...
         USING 记录,10
         GET   ADCB
         LR    10,1
         ...
办公区
         ...
ADCB      DCB   DSORG = PS,MACRF = GL,...
等待   EQU   *-WORKAREA
         ...
记录   DSECT
         ...
在这种相当典型的安排中,有3条USING语句可以覆盖3个不同的存储区域。
  • 寄存器12定义了程序区域的可寻址性。该地址从寄存器15开始,然后被复制到寄存器12。这遵循如下约定:调用程序时,其地址存储在寄存器15中,并通过BALR 14,15实现对程序的传输。也可能是BALR 12,0 / 使用方式 *,12,其中BALR将地址存储在寄存器中。
  • 寄存器11定义了WORKAREA DSECT定义的工作区的可寻址性。该地址由GETMAIN宏获取,并复制到寄存器11。
  • 寄存器10定义了对数据记录的可寻址性。 得到 宏将记录地址存储在寄存器1中,程序将地址复制到寄存器10中。
我的许多大型程序都是这样构造的-
码:
MYPGM    CSECT
         USING 工作区域,11
         USING *,12
         SAVE  (14,12)
         LR    12,15
         BAL   11,*+L'*+4
         DC    AL4(WORKAREA)
         L     11,0(,11)
         ...
         USING 记录,10
         GET   ADCB
         LR    10,1
         ...
工作区
         ...
ADCB      DCB   DSORG = PS,MACRF = GL,...
         ...
记录   DSECT
         ...
这会将程序文本与工作区文本分开。在-
码:
         BAL   11,*+L'*+4
         DC    AL4(WORKAREA)
         L     11,0(,11)
  • 巴尔机器指令将工作区地址的地址存储在寄存器11中。
  • DC汇编程序指令指定工作区的地址。
  • L机器指令加载工作区的地址。
回到顶部
查看用户资料 发送私信
比尔·奥博伊尔

CICS 主持人


已加入:2008年1月14日
帖子:2504
地点:美国乔治亚州亚特兰大

 发布 发表:2016年2月24日星期三晚上8:50
引用回复

抬头-

对于需要寻址(或可能不需要寻址)的符合HLL / LE的调用者的“ CEECAA”(可能不是)的汇编器子程序(不是MAIN)C ommon AArea),请不要使用R12,因为 民航局 总是 基于呼叫者的R12。只需将R12留空以防万一并选择另一个寄存器(IE:R3)。

嗯...
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

 发布 发表:2016年2月24日星期三晚上9:45
引用回复

O'Boyle先生的评论适用于预期在LE非XPLINK环境中运行的程序,该环境不适用于独立的Assembler程序。与不兼容LE XPLINK的程序相同,不兼容LE的XPLINK程序是一个完全不同的主题。
回到顶部
查看用户资料 发送私信
第75章

活跃用户


已加入:2014年6月9日
帖子:119
位置:CT

 发布 发表:2016年2月25日(星期四)上午12:43
引用回复

布拉 12,0 会将指令地址计数器复制到寄存器12中,该寄存器将是CPU执行的下一个指令地址。按照标准规则,R15是程序的入口点。
码:

布拉     12,0
使用方式  *,12


将与
码:
L          R12,R15
使用方式   *, R12


??基址寄存器R12中的地址与上面两个代码中的地址相同吗?

谢谢
回到顶部
查看用户资料 发送私信
威利·詹森(Willy Jensen)

活跃用户


已加入:2015年9月1日
帖子:416
地点:丹麦

 发布 发表:2016年2月25日(星期四)上午1:16
引用回复

不。
L 12,15将尝试向r12加载存储地址x'15'的内容。在较旧的计算机中,如果对齐不正确,其本身将产生错误“ x15”。正确的指示是:
LR 12,15 ,它将r15的内容复制到r12。
但是,然后您必须使用using指定程序的启动。您的USING将使样本中的Regreg分别从位置2和4覆盖,并且r15指向位置0。我分别说位置2和4,因为'balr'的长度为2个字节,'l'的长度为4个字节。
所以像这样:
MYPROG 中科院
LR 12,15
使用MYPROG,12

但是在我看来,您确实需要一个汇编程序课程,因为我们甚至都没有提到其他必要的东西,例如链接约定。
回到顶部
查看用户资料 发送私信
第75章

活跃用户


已加入:2014年6月9日
帖子:119
位置:CT

 发布 发表于:2016年2月25日,星期四1:24上午
引用回复

谢谢威利。我的意思是LR 12,15,这是错字。

以下两个代码应具有相同的功能以提供可寻址性,并且两个代码在R12中的地址应相同,对吗?

码:
MYPROG CSECT
LR 12,15
使用MYPROG,12




码:
MYPROG CSECT
巴尔R   12,0
使用MYPROG,12


是的,我现在真的在学习。
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

 发布 发表于:2016年2月25日,星期四1:41上午
引用回复

不,我认为您没有学到任何东西。

码:
MYPGM    CSECT
         USING *,12
         SAVE  (14,12)
         LR    12,15
寄存器12的地址为MYPGM,因为这就是寄存器15中的地址。

码:
MYPGM    CSECT
         SAVE  (14,12)
         BALR  12,0
         USING *,12
寄存器12的地址将大于MYPGM的地址。更大的数量取决于SAVE宏中的指令数量,以及BALR指令的另外2个字节。在这两个示例中,输入寄存器均已保存 之前 LR或BALR指令更改的寄存器12。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> PL / I& Assembler

 


类似主题
话题 论坛 回覆
没有新帖 关于BALR的问题 PL / I& Assembler 3
没有新帖 XCTL,LINK,LOAD,BALR(BASR)和CALL。 PL / I& Assembler 15
搜索我们的论坛:


回到顶部