我需要知道以下Mainframe Assembler指令序列的结果:
LA 0,1
LA 1,2
MR 0,0
是吗:
(a)R0 = 0,(b)R0 = 1,(c)R0 = 2,(d)S0C6
答案 0 :(得分: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 :(得分:1)
答案将是(a)R0 = 0
根据POP,乘数位于R1的位位置32-63(偶数对寄存器0/1的奇数寄存器)中。与MR指令的乘法器一样。
有趣的是,结果放置在包含0的R0(偶/奇寄存器对0/1的偶寄存器)中。
好玩的谜题,并不明显。
答案 2 :(得分:-1)
LA 0,1 洛杉矶1,2 MR 0,0 是吗?
(a)R0 = 0,(b)R0 = 1,(c)R0 = 2,(d)S0C6
R0将为0