assembly - Mult.asm 比较失败
问题描述
我需要回答的问题是,为什么第 9 行比较失败,而第 8 行没有比较失败?我是 Hack 汇编语言的新手,仍在学习基础知识,但对 CPU 模拟器为什么会通过第 8 行而不是第 9 行感到困惑。
第二个问题:
我怎样才能解决这个问题以支持负值的乘法?
程序将 R0 和 R1 相乘并将结果存储在 R2 中。(R0、R1、R2 分别指 RAM[0]、RAM[1] 和 RAM[2]。)
多重组合:
0 @2
1 M=0
2 @0
3 D=M
4 @8
5 D;JNE
6 @19
7 0;JMP
8 @2
9 D=M
10 @1
11 D=D+M
12 @2
13 M=D
14 @0
15 D=M-1
16 M=D
17 @8
18 D;JGT
19 @19
20 0;JMP
多.cmp:
| RAM[0] | RAM[1] | RAM[2] |
| 0 | 0 | 0 |
| 1 | 0 | 0 |
| 0 | 2 | 0 |
| 3 | 1 | 3 |
| 2 | 4 | 8 |
| 6 | 7 | 42 |
| 6 | -7 | -42 |
| -6 | 7 | -42 |
解决方案
如果没记错的话,该错误消息的意思是您没有通过 Mult.cmp 的第 9 行中的测试。
因此,假设 Mult.tst 中的测试脚本是正确的,问题是当第一个数字 (R0) 最初为负时,您的程序会失败。
在第 14-18 行中,您将递减 R0,如果它 >0,则跳回第 8 行。这将立即失败,因为 R0 开始为负数!
您需要在开始时添加一些额外的代码来检查这种情况并进行适当的调整。
另外,风格建议。引用内存位置时,使用符号表示法,即:@R1 而不是@1,特别是使用 (LABEL) 表示法来指定跳转目标。这将使您的代码更易于阅读和修改。
祝你好运!
推荐阅读
- java - JDK16 ZGC启动时出现问题
- python - 在python中开始没有按预期返回
- reactjs - 如何使用 RTL 对具有复杂 reducer 的组件进行集成测试?
- android - bitmapDrawable.getBitmap() 返回 null
- javascript - 响应被添加到服务器或从服务器中删除的 Discord 应用程序
- python - 从本地 python 安全访问 Datalake
- python - 向递归函数添加逻辑
- android - ArSceneView SEGFAULT
- python - 类列表访问中的类列表 [Python]
- r - 在R中列表的所有元素中查找字符串