我正在为大学集会班工作。我们正在使用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
答案 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