プログラムの算術演算で教えて下さい。
お世話になっております。
とある試験問題のアセンブラ言語について、算術演算が理解できず困っておりますので投稿させて頂きました。
この問題を解決できないと、先に進めない状態となっており、困っております。
【前提】
実機を使用してアセンブルしながら値の確認を行っているのですが、下記の問題において、アドレス8008でGR2の値が下記の様に表示されています。
【GR2】
アドレス:#8012
算術:-32750
論理:32786
1000 0000 0001 0010
また、問題集の解説には下記の様に記載されています(一部抜粋)。
「1回目のGR2は#8012、GR3は#8016です。CPA命令は算術10進数で比較しますから、変換するとGR2が-32750、GR3が-32746です。GR2やGR3に設定したのはラベルのアドレスでしたね。」
【ご質問】
GR2の値が、なぜ「-32750」になるのか?を教えて下さい。
また、これは"8012を指しているのでしょうか?それとも内容の「20」を指しているのでしょうか?
今、私が理解できるのは、
・実機検証画面の2進数「1000 0000 0001 0010」は、16進数の「8012」を示している
・アドレス8008行によって#8011番地にONEが加算、つまり#8011+1=#8012番地を対象とする
ところまでは理解できるのですが、その先どう計算したら良いのかがわかりません。
現在数百ページある書籍の内70ページ程を読み進めたところですが、全体的に算術演算がよく理解できていない様に感じてはいます。
が、書籍を読んでもいまいち理解が難しいため、お伺いします。
【書籍内問題】
(1)下記プログラムを実行した結果、ANS番地に格納される値を10進数で答えなさい。
(2)下記プログラムは誤りがあります。誤っている箇所を修正しなさい。
■アセンブルリスト
※--------------------------------
ご覧のブラウザ環境によってスペース等の表示が変わる可能性がありますので、
区切りで「/」を入れております。
見やすくしただけで、問題自体に「/」はございません。
※--------------------------------
ADDR: メモリ内容 /プログラム
: /REI7004 / START
8000: 1210/0000 /LAD /GR1,0
8002: 1220/8011 /LAD /GR2,DATA
8004: 1230/8016 /LAD /GR3,ENDDATA
8006: 2012/0000 /LOOP /ADDA /GR1,0,GR2
8008: 2020/8010 /ADDA /GR2,ONE
800A: 4423/ /CPA /GR2,GR3
800B: 6100/8006 /JMI /LOOP
800D: 1110/8016 /ST /GR1,ANS
800F: 8100/ /RET
8010: 0001/ ONE /DC /1
8011: 000A/ DATA /DC /10
8012: 0014/ DC /20
8013: 001E/ DC /30
8014: 0028/ DC /40
8015: 0032/ DC /50
8016: ENDDATA /DS /0
8016: 7FFF/ ANS /DS /1
: END
以上となります。
ド素人の質問で申し訳ありませんが、ご回答頂ける方がいましたらよろしくお願いします。