0

我必须使用 IAS 指令集编写一个程序来将两个 2*2 矩阵相乘并将结果存储在另一个矩阵 C 中。我看到另一个人发布的一个程序用于矩阵加法:

**********************
* Initialize a variable 'count' to 999

Label: TOP
00000001    LOAD M(A[count])            Transfer M(A[count]) to the accumulator
00000101    ADD M(B[count])             Add M(B[count]) to AC and store result in AC
00100001    STOR M(C[count])            Transfer contents of accumulator to memory location C[count]
00001010    LOAD M(address of count)    Transfer the contents of M(address of count) to the AC
00000110    SUB M(the number 1)         Subtract one from AC and store in AC
00100001    STOR M(D)                   Transfer contents of AC to location M(D)
00001111    JUMP+ M(X,0:19)             If number in accumulator is non-negative take next
                                        instruction from left half of M(X)

**************************

我们如何将变量“count”初始化为 999?

4

1 回答 1

0

答:IAS 没有立即数,但假设内存在某处已经有正确的常量,就像假设内存以某种方式具有程序一样。

技巧:可以使用其他未使用的 egLAC <<= 1指令位,但需要浪费 6 条指令来在那里编码值 999:

 LEFT and RIGHT instructions 1 and 2 at Selector 0:  20 xxxx   20 1998
 L / R instructions 3 and 4          at Selector 1:  20 xxxx   20  999
 Left instruction 5:    LOAD AC <- S(0)
 Right instruction 6:   AC -= S(1)

实际上,这将减去 (garbage + 1998) - (garbage + 999) => 999

其他黑客也需要依赖用非零值编码的指令,然后强制产生一个负值,并反复右移以形成常数 -1。

于 2014-03-08T08:29:37.870 回答