我必须使用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?
答案 0 :(得分:0)
答案:IAS没有immediates,但假设内存已经在某处有正确的常量,就像假设内存以某种方式存在程序一样。
哈克:
可以使用例如其他未使用的比特。 L
或AC <<= 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)
实际上这会减去(垃圾+ 1998) - (垃圾+ 999)=&gt; 999
其他黑客还需要依赖于使用非零值编码的指令,然后强制生成负值,并重复右移以形成常量-1。