问题标签 [nand2tetris]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hdl - 用 HDL 实现 AND 芯片
我正在阅读这本书http://nand2tetris.org/book.php,它教授 CS 的基本概念,但在要求我编写 AND 芯片并在提供的测试软件中对其进行测试的地方,我陷入了困境。
这是我到目前为止所得到的:
问题是我收到此错误:
而且我不知道我收到此错误是因为测试程序出现故障还是因为我的代码错误并且软件无法加载它。
memory - nand2俄罗斯方块。内存实现
我在 nand2tetris 课程中实现了数据内存实现。但我真的不明白我的实现的某些部分:
- 负责这里的负载。我知道如果负载为 0 - Dmux4Way 在任何情况下都是 0 0 0 0。但我不明白在那之后它是如何工作的。即它如何允许不要在内存中加载数据。
至少无法理解为什么在 Screen 中我们提供 address[0..12] 而不是 address[0..14] - 完整地址。在我看来,我们应该使用第二个,因为屏幕内存映射位于 RAM 内存映射之后,如果我们想要请求屏幕内存映射 - 我们应该使用范围 (16 384 - 24 575) - 十进制或 (100000000000000 - 101111111111111) - 二进制。但是我们如何才能表示该范围仅使用 13 宽度总线(地址 [0..12])?不可能。
因此,如果我们想表示屏幕内存映射,我们应该使用上面介绍的范围。该范围有 15 个宽度或地址 [0..14] 但不是地址 [0..12](宽度 13)。但是为什么只工作地址[0..12] 而不能工作地址[0..14](完整地址)
DMux4Way(in=load, sel=address[13..14], a=RAM1, b=RAM2, c=scr, d=kbr);
hdl - 使用 .hdl 和硬件模拟器 (nand2tetris) 实现计算机处理器的组件
我无法将 .hdl 文件加载到 HardwareSimulator 中。到目前为止,我已经实现了 FullAdder.hdl 和 Add16.hdl。
我收到的错误消息是
这是 Add16 的相关代码:
我正在努力寻找错误,因为我很确定我在过去以完全相同的方式实现了这个芯片并且它工作正常。
至于全加器,它是相同的错误消息,但对于第 16 行。
我还将为此部分提供相关代码:
关于第 16 行的错误,我无法理解。那是在 FullAdder 中的终止括号之后。
我浏览了互联网,据我所知,我的实现是完全正确的。任何精通计算机处理器领域的人有什么建议吗?这对于遇到相同/类似问题的任何其他人肯定有用。
谢谢
编辑:根据这个链接逻辑门,我的实现看起来或多或少完全相同。会不会是我的 HardwareSim 有问题?尽管我对此表示怀疑,因为我过去曾使用过它,并且是我的大学向我推荐的。
java - Hack 汇编语言中的 Java 函数
如何在 Hack Assembly 中实现 Java 函数?我知道更改变量的指令很容易制作,但是 HACK 是如何调用函数的呢?例如:
我的(我认为错误的)结果是:
所以问题是我不知道在哪里存储结果(返回)..我应该像在这个例子中为函数创建一个变量并将它存储在那里吗?
assembly - 为什么我的代码在第 2 行总是出现比较失败,我该如何解决这个问题?
在 CPU 模拟器 Add4.asm 中的 hack 汇编语言中,测试在第 2 行一直失败。我尝试了各种形式来修复它,但无法弄清楚。如何将其设置为 0 或者如果这不是问题,我还能如何修复我的代码?ADD4 Hack 汇编语言帮助
每当我运行我的 .asm 文件时,我都会在第 2 行得到比较失败。请帮我解决这个问题。这是我的 .asm 代码,后面是 ADD4.tst。Add4.asm 的行号有清晰的注释。
Add4 将四个数字相加(在 RAM[0]、...、RAM[3] 或 R0、...、R3 中等效)并将结果存储在 RAM[0](又名 R0)中。您的程序必须在 30 个或更少的周期内完成
添加4.asm:
添加4.tst:
assembly - Mult.asm 比较失败
我需要回答的问题是,为什么第 9 行比较失败,而第 8 行没有比较失败?我是 Hack 汇编语言的新手,仍在学习基础知识,但对 CPU 模拟器为什么会通过第 8 行而不是第 9 行感到困惑。
第二个问题:
我怎样才能解决这个问题以支持负值的乘法?
程序将 R0 和 R1 相乘并将结果存储在 R2 中。(R0、R1、R2 分别指 RAM[0]、RAM[1] 和 RAM[2]。)
多重组合:
多.cmp:
assembly - 负数比较失败
我需要回答的问题是,为什么第 9 行比较失败,而第 8 行没有比较失败?
第二个问题:
我该如何解决这个问题以支持负值的乘法?
程序将 R0 和 R1 相乘并将结果存储在 R2 中。(R0、R1、R2 分别指 RAM[0]、RAM[1] 和 RAM[2]。)
多重组合:
多.cmp: