Умножение матриц с использованием набора инструкций IAS

Я должен написать программу с использованием набора инструкций 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?

1 ответ

Ответ: IAS не имеет непосредственных, но предполагает, что память уже имеет правильные константы где-то, так же как предполагается, что память каким-то образом имеет программу.

Hack: можно использовать иные неиспользованные биты, например, 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) => 999

Другие хаки также должны полагаться на то, что инструкции кодируются с ненулевыми значениями, затем вынуждают формировать отрицательное значение и многократно смещают его вправо, чтобы сформировать постоянную -1.

Другие вопросы по тегам