私は現在、機械語とアセンブリの学習を始めています。私が取り組んでいるプログラムはかなり単純で、10 進数と 16 進数の基本的な足し算と引き算だけですが、何らかの理由で実際の答えを得ることができません。
免責事項: はい、これは大学の課題です。いいえ、私はあなたにそれをしてほしくありません。私は教授に助けを求めましたが、彼の説明は私をさらに混乱させるだけでした.
H1 および V1 コンピューターをシミュレートする Windows プラットフォームの「sim」でこれを実行しているため、シミュレートされた環境です。
ログファイルは次のとおりです。
Simulator Version 4.0 Fri Jan 29 17:15:56 2016
Machinecode file = ex1-3b.mac Size = 17 (hex) = 23 (dec)
Microcode file = none Size = 93 (hex) = 147 (dec)
Config file = none
Log file = ex1-3b.log
Answer file = none
Simulation mode = horizontal
Microlevel = disabled
Shifter = one-position
Cmd line addr = F3C (hex) = 3900 (dec)
Load point = 0 (hex) = 0 (dec)
======================== Log Turned On Fri Jan 29 17:15:56 2016
---- [T7] 0: st /1 010/ g
0: st /1 010/ m[010]=002D/0000
1: add /2 011/ ac=0000/0045
2: sub /3 012/ ac=0045/0038
3: sub /3 013/ ac=0038/0025
4: add /2 014/ ac=0025/0030
5: add /2 015/ ac=0030/002B
6: st /1 016/ m[016]=0000/002B
7: hout /FFF9 / 002B
8: dout /FFFD / 43
9: halt /FFFF /
Machine inst count = A (hex) = 10 (dec)
---- [T7] d0
0: 1010 2011 3012 3013 2014 2015 1016 FFF9 ........
8: FFFD FFFF 0000 0000 0000 0000 0000 0000 ........
10: 0000 0045 000D 0013 000B FFFB 002B 0000 .E....+.
18: 0000 0000 0000 0000 0000 0000 0000 0000 ........
したがって、これが行うべきことは次のとおりです。
45(10) + 45(16) - 13(10) - 13(16) + b(16) + (-5)(10)
(10) は base10 で、(16) は 16 進数です。私自身の正気を保つために、値をプログラムに入力するときに値をbase10に変換して、一貫性を保ちました(各数値の横にあるtは、コンパイラにbase10を使用するように指示します)。
これがどのように機能するかについての私の理解は次のとおりです。
メモリ スロット 10 をロードするように指示します (はい、ここで大量のメモリを浪費していることは承知しています)。これを初期値の 45 に設定します。次に、スロット 11 で 45 を追加し、12 で 13 を減算し、19 で 19 を減算します。 13 (16 進数の 13 の 10 進数形式)、14 の 11、15 の -5 です。次に、これをすべてスロット 16 に格納します。
次に、プログラムを停止する前に、メモリ スロット 16 に格納されている数値を 16 進数と 10 進数の両方で出力します。
これまでのところ、私はこれで正しいですか?それともどこかで道に迷ったのでしょうか?それが私が知りたいことです。
現在、結果として 43 を取得していますが、計算が正しければ、実際の終了番号は 59 になるはずです。
どんな助けでも大歓迎です!