アプリ版:「スタンプのみでお礼する」機能のリリースについて

計算機科学

計算機科学に詳しい方にお聞きしたいです(汗)
添付画像の問題なのですが、2つの値の絶対値を比較する操作はどのようにして行えばよいのでしょうか‥‥?
その方法があまり理解できておらず、行き詰まっています(-_-;)

https://file15-d.kuku.lu/files/20201221-0720_0f5 …

↑添付画像と同じものです。

わかる方がいましたら、ぜひ教えていただきたいです。

「計算機科学 計算機科学に詳しい方にお聞き」の質問画像

質問者からの補足コメント

  • 解説していただいたことをもとにして答えを作ってみたのですが、これで大丈夫でしょうか?
    影で写真が見づらくなってしまい、すみません。

    「計算機科学 計算機科学に詳しい方にお聞き」の補足画像1
      補足日時:2020/12/22 08:10

A 回答 (2件)

LOAD命令がないのでAをCLRしたのちADDでLOADの代用する。


数値の一致を見るには一方を2の補数に変えて加算する。結果がゼロになれば元の数は等しかったことになる。この場合Carryは無視すればよい。
 CLR
 ADD 1
 TSC
 ADD 2
 JEZ ... あとは考えて

2つの数が正と正、負と負ならこれで良い。問題には「絶対値が一致」との指定があるから、正と負(例えば5と-5)の一致も確認する必要がある。そのためには上記からTSCを除いたプログラムを作り、上記の結果が「不一致」になったらこれを実行する。
    • good
    • 0
この回答へのお礼

ありがとうございます!
とてもわかりやすくて助かりました!

お礼日時:2020/12/22 08:09

#1です。



アドレスが違います。
問題に「ADDとJEZは2ワード命令」とあるのでこれらの命令はプログラムメモリーを2アドレス使います。
すなわち、あなたが書いた
 01 ADD ADR1  は01番地と02番地を使うので次のTSCは03番地に入ります。
その次の 03 ADD ADR2 は04番地と05番地に入るので、
 04 ADD ADR2   となります。
以下、同様にずれていきます。

マシン語の部分は大丈夫と思います。
ただ書き方ですが、各命令の先頭にある空白の数が違いますね。一般には空白を1つ置きます。空白の有無によって言語処理ソフトの動作が変わることがあるのです。
このように文字で書いたプログラムをマシン語に変換するのがアセンブラと言われるソフトです。アセンブラでは行の先頭が空白でなかった場合はラベルがあると見なされます。
そんなことは次の勉強として、ここではADDもHLTも頭を揃えて書いておきましょう。
    • good
    • 0
この回答へのお礼

あなたに会えてよかった

ありがとうございます(;_;)
とても勉強になり、助かりました

お礼日時:2020/12/22 13:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!