大型机汇编拼图

问题描述 投票:1回答:3

我需要知道以下Mainframe Assembler指令序列的结果:

LA 0,1
LA 1,2
MR 0,0

是吗:

(a)R0 = 0,(b)R0 = 1,(c)R0 = 2,(d)S0C6

assembly mainframe zos
3个回答
2
投票

答案是“(a)”。在乘法后,寄存器0的值为0。

当“x”和“y”是同一个寄存器时对“MR x,y”的解释:它实际上并没有将寄存器本身相乘(尽管你自然会认为它是这样)因为第一个操作数(被乘数)实际上是在R 1 + 1中,而第二个(乘数)在R 2中:

Principles of Operation,7.5.52 MULTIPLY

...被乘数取自通用寄存器R 1 + 1。

因此,当MR为两个操作数指定相同的寄存器时,被乘数和乘数的值实际上可能完全不同!

在IBM的操作原理手册中,寄存器命名约定使用的下标等于指令中寄存器的位置。因此,“MR R 1,R 2”(sub1,sub2)仅表示指令指定两个寄存器,其中“R 1”表示第一个,“R 2”表示第二个寄存器。有些指令,如BXH和BXLE,甚至指定了三个寄存器,在这种情况下,第三个指令被指定为R 3。

但“R 1”不一定是“寄存器1”。事实上,对于MR,它一定不能,因为第一个操作数指定了“奇偶对的偶数寄存器”,“奇数”部分是“R 1 + 1”。而且令人惊讶的是,“R 1”中的值本身并不参与计算!它仅用于指定64位结果所在的64位寄存器对。无论它是包含零值,非零值,还是负值,它都不会改变指令的结果!

因此,虽然“MR 0,0”似乎计算了一个同一性的平方,但它实际上计算了两个独立值的乘积:一个在R 1 + 1中,另一个在R 2中,这可能完全不同!这是与ESA / 390操作原理中的MR指令规范的直接链接。 ESA / 390是一个32位架构,使得描述比z / OS(64位)手册中的描述更容易理解:[PoP]http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/DZ9AR001/7.5.52

并且由于IBM顽固坚持向上兼容性,这里定义的每个机器指令的有效结果与当时完全相同,实际上对于自System / 360(1964)以来的每一台机器指令。


1
投票

答案是(a)R0 = 0

根据POP,乘法器位于R1的位位置32-63(偶数奇数寄存器对0/1的奇数寄存器)。与MR指令的乘数一样。

有趣的结果是放在R0(偶数奇数寄存器对0/1的偶数寄存器)中,它包含0。

好难题并不明显。


-1
投票

LA 0,1 LA 1,2 MR 0,0是:

(a)R0 = 0,(b)R0 = 1,(c)R0 = 2,(d)S0C6

R0为0

© www.soinside.com 2019 - 2024. All rights reserved.