adding/subtracting 机器语言的基本帮助
Basic help on adding/subtracting in machine language
我目前正在开始学习机器语言和汇编。我正在处理的程序相当简单,只是十进制和十六进制数的基本加减法,但由于某种原因我无法得到实际答案。
免责声明:是的,这是大学作业。不,我不想让你为我做这件事。我向我的教授寻求帮助,但他的解释只会让我更加困惑 - 所以我希望 Whosebug 社区可以帮助澄清我的错误所在,以便我可以修复它。
我运行这个在"sim"的Windows平台上是模拟H1和V1电脑的,所以是模拟环境
这是日志文件:
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)是十六进制。为了我自己的理智,我在将值输入程序时将它们转换为 base10 以保持它们一致(每个数字旁边的 t 告诉编译器使用 base10)。
这是我对它的工作原理的理解:
我告诉它加载内存插槽 10(是的,我知道我在这里浪费了很多内存),我将其设置为初始值 45。然后我在插槽 11 中加上 45,减去 13在 12 中,19 在 13 中(13 的十进制形式,十六进制),11 在 14 中,然后是 -5 在 15 中。然后我将它们全部存储在插槽 16 中。
接下来,我在停止程序之前以十六进制和十进制形式打印存储在内存插槽 16 中的数字。
到目前为止,我的所有这些都正确吗?还是我在某处出错了?这就是我很好奇的。
现在我的结果是 43,但如果我的数学正确的话,实际的结束数字应该是 59。
如有任何帮助,我们将不胜感激!
- 根据我使用的 Android 应用程序,结果应该是 88(10) / 58(16)。至少结果应该是偶数,因为你加了 6 个奇数,所以我认为不会是 59。
- 我想你应该 load (memory -> ac) 而不是
st
(ac -> memory) 作为第一条指令。
我目前正在开始学习机器语言和汇编。我正在处理的程序相当简单,只是十进制和十六进制数的基本加减法,但由于某种原因我无法得到实际答案。
免责声明:是的,这是大学作业。不,我不想让你为我做这件事。我向我的教授寻求帮助,但他的解释只会让我更加困惑 - 所以我希望 Whosebug 社区可以帮助澄清我的错误所在,以便我可以修复它。
我运行这个在"sim"的Windows平台上是模拟H1和V1电脑的,所以是模拟环境
这是日志文件:
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)是十六进制。为了我自己的理智,我在将值输入程序时将它们转换为 base10 以保持它们一致(每个数字旁边的 t 告诉编译器使用 base10)。
这是我对它的工作原理的理解:
我告诉它加载内存插槽 10(是的,我知道我在这里浪费了很多内存),我将其设置为初始值 45。然后我在插槽 11 中加上 45,减去 13在 12 中,19 在 13 中(13 的十进制形式,十六进制),11 在 14 中,然后是 -5 在 15 中。然后我将它们全部存储在插槽 16 中。
接下来,我在停止程序之前以十六进制和十进制形式打印存储在内存插槽 16 中的数字。
到目前为止,我的所有这些都正确吗?还是我在某处出错了?这就是我很好奇的。
现在我的结果是 43,但如果我的数学正确的话,实际的结束数字应该是 59。
如有任何帮助,我们将不胜感激!
- 根据我使用的 Android 应用程序,结果应该是 88(10) / 58(16)。至少结果应该是偶数,因为你加了 6 个奇数,所以我认为不会是 59。
- 我想你应该 load (memory -> ac) 而不是
st
(ac -> memory) 作为第一条指令。