2017-03-02 45 views
1

我需要知道的大型機彙編指令的以下序列的結果是:大型機彙編益智

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

它是:

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

+4

這不是一個難題。這是一個簡單的裝配作業。什麼似乎是問題?你有多遠?你卡在哪裏?請告訴我們你到目前爲止做了什麼。 –

+1

這個迷你的參考文獻是否與您的知識相關? http://geraldine.fjfi.cvut.cz/~oberhuber/data/mainframe/prezentace/pmf/hlasmref.pdf我沒有看到像「LA 0,1」這樣的東西。第一個論據應該是一個註冊。 – akg

+0

akg:尼斯鏈接! 是的,兩個參數都是寄存器。 「0」是寄存器0,「1」是寄存器1. – dstaudacher

回答

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)以來的所有機器指令都是如此。

+0

你的代表因爲某人低估了你的答案而失敗了。 –