

以下のコードを参考にして、７個の数字を A:１, B:２, C:１０, D:８, E:１０, F:５, G:６ として、A × B × C × D + E
× F × G を計算するプログラムを教えてください。  
結果は、４６０になります。

AxB+CxDを計算するプログラム

[code]

    SAMPLE  START
        LD  GR0,A
        LD  GR1,B
        CALL    MUL
        ST  GR2,ANS
        LD  GR0,C
        LD  GR1,D
        CALL    MUL
        ADDA    GR2,ANS
        ST  GR2,ANS
        RET
    MUL START
        PUSH    0,GR3
        LD  GR2,CONST0
        LD  GR3,CONST0
    LOOP    CPA GR3,GR1
        JZE LABEL1
        ADDA    GR2,GR0
        ADDA    GR3,CONST1
        JUMP    LOOP
    LABEL1  POP GR3
        RET
    A   DC  4
    B   DC  3
    C   DC  2
    D   DC  5
    ANS DC  0
    CONST0  DC  0
    CONST1  DC  1
        END
    
[/code]

A×BとC×Dはできたのですが、その２つをまたかけることが出来ません。  
同様に、E×FとGをまた掛けることが出来ません。  
その後の A×B×C×D と E×F×Gを足すことが出来るように教えてほしいです。  


CC BY-SA 4.0
2022-07-20T10:38:33.923
90111
2022-07-21T04:21:29.077
2022-07-21T04:21:29.077
19110
53618
question
assembly
アセンブリ言語のプログラムを教えてほしいです。できれば、プログラムを作ってほしいです。


質問内容的に結果のプログラムソースをそのまま答えにするのは少しためらわれるので、考え方だけを示すとこんなステップになるでしょう。  
`結果`・`答え`・`掛け算ルーチン`などが何かは、質問に提示されたプログラムソースから読み取ってください。

  * `E`,`F`,`G`用の領域を追加定義し、`A`から`F`までを指定された値に設定しておく
  * プログラムのメイン部分は以下のようにする 
    * `A`と`B`をレジスタにロードして掛け算ルーチンを呼び出す
    * 掛け算の結果を答えに格納する
    * `C`と`D`をレジスタにロードして掛け算ルーチンを呼び出す
    * 掛け算の結果と答えをレジスタにロードして掛け算ルーチンを呼び出す
    * 掛け算の結果を答えに格納する
    * `E`と`F`をレジスタにロードして掛け算ルーチンを呼び出す
    * 掛け算の結果と`G`をレジスタにロードして掛け算ルーチンを呼び出す
    * 掛け算の結果に答えを加算する
    * 加算の結果を答えに格納する
    * 終了する

少し版数が古いようですが、以下にエミュレータがあるので簡単に確認できるでしょう。  
[CASLⅡエミュレータ](https://www.chiba-fjb.ac.jp/fjb_labo/casl/casl2.cgi)


CC BY-SA 4.0
2022-07-20T12:26:47.497
90113
2022-07-20T12:26:47.497
26370
90111
answer


これくらいなら逆アセンブリしてソースコードと見比べるのが良い気もしますが。


CC BY-SA 4.0
2022-07-21T03:04:30.423
90117
2022-07-21T03:04:30.423
53286
90111
answer