こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

プログラムの算術演算で教えて下さい。

お世話になっております。

とある試験問題のアセンブラ言語について、算術演算が理解できず困っておりますので投稿させて頂きました。
この問題を解決できないと、先に進めない状態となっており、困っております。

【前提】
実機を使用してアセンブルしながら値の確認を行っているのですが、下記の問題において、アドレス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


以上となります。
ド素人の質問で申し訳ありませんが、ご回答頂ける方がいましたらよろしくお願いします。

投稿日時 - 2014-12-28 19:20:42

QNo.8873082

すぐに回答ほしいです

質問者が選んだベストアンサー

コンピュータがどうやって「負の値」を扱っているか、知っておくとよいでしょう。
http://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E4%BB%98%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE
この場合は、2の補数表現を使っています。
http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0


ビットの列び 1000 0000 0001 0010 を
算術(2の補数表現で負を表わした2進数の値)と解釈すれば、(10進で)-32750
論理(正の2進数の値)と解釈すれば、(10進で)32786
となります。

投稿日時 - 2014-12-28 22:02:06

お礼

ご回答ありがとうございます!

もの凄く助かりました。
おかげさまで問題「GR2は#8012、GR3は#8016」が両方とも手計算で算出する事が出来ました。
ありがとうございます。

しかし、計算が大変ですね。
あくまで試験勉強なので、試験本番は手計算をしなければならないと思うとしんどいです..。
2の補数まで出した2進数→10進数への変換は、最後の方の桁(0111)は16384+8192+4096を手計算しなければならいなんて...

ともかく、無事に解決できました。
ありがとうございました。

投稿日時 - 2014-12-29 11:15:21

ANo.1

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-