IBM Mainframe Assembler - 使用具有寄存器位移的MVC

时间:2011-11-17 06:17:11

标签: assembly mainframe

我正在为大学集会班工作。我们正在使用IBM Mainframe PC370仿真器。 (老派,但很好的起点)

我总是尝试超出作业的范围,以提高我的编程技巧。

我要做的是使用寄存器将一些字符数据(WORD)移动到(CWORD),偏移量为1。我希望能够根据文件的输入将数据放入索引中,以确定索引中的位置。

我们已经获得了一个文件,其在1-5位具有五位数的美元数字,在位置20-21具有两位数的月份代码。我想将月份代码放在一个寄存器中,以确定将美元金额添加到索引中该位置的偏移量。

以下代码是我用来尝试寄存器偏移的代码。

这甚至可能吗?我没有在教科书或网上找到任何具体讨论做这类事情的东西。

         L     R5,1
         MVC   CWORD+0(R5),WORD
         WTO   CWORD
         WTOR  'PRESS ENTER TO EXIT',EXIT

感谢您的时间。 SUBCAN

3 个答案:

答案 0 :(得分:3)

您写道:

      L     R5,1                        Get the fullword (32bit) value at location 0001.
      MVC   CWORD+0(R5),WORD            Copy the 5 bytes at location WORD to location CWORD.
      WTO   CWORD                       Display the contents of CWORD.
      WTOR  'PRESS ENTER TO EXIT',EXIT  Display the message and wait for a response.

另外,大概是:

CWORD DS    CL5                     Output area.
      ...
WORD  DS    CL4                     Input area

你应该写:

      LA    R5,CWORD+1                  Get the address of the second byte of CWORD.
      MVC   0(L'WORD,R5),WORD           Copy the Length(WORD) bytes at location WORD to location CWORD+1.
      WTO   CWORD                       Display the contents of CWORD.
      WTOR  'PRESS ENTER TO EXIT',EXIT  Display the message and wait for a response.
      ...
CWORD DS    CL5                     Output area.
WORD  DS    CL4                     Input area

至少,这听起来像你想要的。但是你的问题并不是100%明确的。如果那不是你的意图。

答案 1 :(得分:1)

 SELECT * FROM CSATTRIBUTEGROUP INNER JOIN INVENTORYITEM ON CSATTRIBUTEGROUP.ENTITYCLASSID=CAST(INVENTORYITEM.ITEMCLASSID AS NVARCHAR(10))
  LEFT JOIN CSANSWERS ON INVENTORYITEM.NOTEID=CSANSWERS.REFNOTEID WHERE INVENTORYCD='CPU'

在MVC指令中,我们提供长度而不是寄存器。在您的情况下,R5将被解释为5,因为在程序启动时,您会声明R5 EQU 5 因此它将移动5个字符而不是1个字符。

如果您想使用如下所示的注册用途         EX R5,移动         。         。         。 移动MVC CWORD(0),WORD

因此这将用R5中的值代替Legnth。在这种情况下,您可以在R5中放置值 LA R5,1可以运行

预告片, 沙申克 汇编开发人员。

答案 2 :(得分:0)

  

...将一些字符数据(WORD)移动到(CWORD),偏移量为1   使用注册......

根据上述规范:

  [code to establish base register assumed] 
  LA 1,CWORD+1
  MVC 0(L'CWORD-1,1),WORD
  [...]
* assuming WORD and CWORD are both 4-byte fullwords
* only the first three bytes of WORD will fit into CWORD+1
WORD  DS  F 
CWORD DS  F