问题标签 [nios]

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.

0 投票
1 回答
6080 浏览

assembly - 汇编器指令 bne 和 br (NIOS II)。他们的偏移量是如何计算的?

我有这个汇编代码,我应该将其翻译成二进制形式的机器代码:

而且我不确定如何解释“bne r16,r0,loop”和“br stop”。

我的指令集参考说 bne 指令这样做:

据我了解,程序计数器增加了 4 + offset 或简单地增加了 4。

但是,就我而言,偏移量/IMM16 值是多少?指令集参考说:

“在指令编码中,IMM16 给出的偏移量被视为相对于紧跟 bne 的指令的有符号字节数”。

我对此的解释是,IMM16 值是到下一条指令地址的“距离”,但我不知道这是否正确。bne 的十六进制地址是 0x40010 和 br 的 0x40014,所以这意味着 IMM16 的值是 4?(如果 rA != rB 会导致 PC 跳过 0x40014 地址?)

0 投票
2 回答
3569 浏览

verilog - 如何使用 Verilog 和 Altera DE2 板的 VGA 打印数字?

我正在使用 Altera DE2 FPGA 板和 verilog,使用它们设计了一个简单的 CPU。我需要使用电路板的 VGA 输出打印寄存器的值。

我该怎么办?

0 投票
1 回答
2915 浏览

assembly - 将 MIPS 转换为机器码

我应该如何将上述内容翻译成机器代码?除了实际代码之外,我还需要知道如何进行翻译。我想我可以尝试获取指令的操作码,但 movi 是伪指令,我不知道在哪里可以得到它。我应该在 Nios II 手册中阅读它吗?

更新

前四个指令是立即类型,因此应该使用字段形式。movi 和 subi 都是在 addi 中实现的伪指令,因此将使用 addi 的操作码。我得到了帮助,我知道该指令movi r16, val将转化为

00000100000100011100010010000100

所以操作码是 000100 二进制,即 0x04 以十六进制为基数,手册还指出是 addi 的操作码。所以我认为我们有前四个操作码,它们都是 000100。

更新 2

我想我现在知道大多数指令的操作码和直接字段:

序列 0100011100010010 是 0x4712,它是用val声明的变量.equ, 所以前四个操作码应该是 000100,因为它们都是 addi 并且 addi 说它是 0x04。如何翻译我现在不知道但可以查看手册的寄存器的两个五位字段。它说'br bne'has opcode 0x06 so it should say 000110 in the opcode for br.有opkod 0x1E,二进制是011110 = 30(?)

这是一个正确的开始吗?

0 投票
3 回答
20867 浏览

assembly - addi 和 subi 之间的“关系”是什么?

我应该回答这个问题。经过一些研究,它说 add 和 sub 具有相同的操作码,并且仅在功能领域有所不同。这是答案还是其他?

更新

Nios II CPU 手册中提供了它:

0 投票
3 回答
775 浏览

assembly - 编写这个汇编程序

我对汇编子程序有一个非常精确的规范:

规格

名称:子程序必须叫 hexasc。输入参数:只有一个,在寄存器 r4 中。寄存器 r4 中的 4 个最低有效位指定一个从 0 到 15 的数字。输入中所有其他位的值必须被忽略。返回值:只有一个,在寄存器r2中返回。寄存器 r2 中的 7 个最低有效位必须是如下所述的 ASCII 码。输出中的所有其他位必须为零。所需操作:输入值 0 到 9 必须分别转换为数字“0”到“9”的 ASCII 代码。输入值 10 到 15 必须分别转换为字母“A”到“F”的 ASCII 代码。副作用:寄存器 r2 到 r15 中的值可能会改变。当子程序返回时,所有其他寄存器的值必须保持不变。

我可能知道如何制作子程序,但我以前从未这样做过。我不知道如何从寄存器中指定 4 个最低有效位。我不知道如何返回值。我刚刚开始使用汇编编程,我可以运行但不能真正编写程序。你能给我一些有用的提示吗?处理器手册可在此处获得。

我能建议的最好的,因为我从互联网上借了一些代码,所以我不明白的是

我已经评论了代码,但我认为它不符合规范,因为它不是子例程,我不确定转换算法是否正确实现:

0 投票
2 回答
21666 浏览

assembly - 如何从 4 位十六进制转换为 7 位 ASCII?

任务是通过编写一个可以在 4 位十六进制和 7 位 ASCII 之间转换的子程序来学习汇编编程。起初我不知道,但经过一些研究,我可以做出努力并绘制流程图并制作程序,但这并不完全正确,所以我请求您的指导来帮助我解决这个问题。

实际的作业文本是这样的:

哈 3.1。绘制一个子程序的流程图,以将 4 位十六进制值转换为相应的 7 位 ASCII 码。请参阅下面的 hexasc 的完整规范。示例:二进制 0010(十六进制数字 2)转换为 011 0010(“2”的 ASCII 码)。另一个例子:二进制 1011(十六进制数字 B)转换为 100 0010('B' 的 ASCII 码) 确保根据我们的要求记录您的子程序。

哈 3.2。使用 Nios II IDE 中的 labwork 项目,创建一个名为 hexasc.s 的新文件

哈 3.3。在文件 hexasc.s 中,编写一个名为 hexasc 的子程序,将 4 位十六进制值转换为相应的 7 位 ASCII 码。

我为程序画了一个流程图: 在此处输入图像描述

我尝试过的程序是这样的,但我怀疑它不符合规范:

你能帮我开发和解决这个任务吗?时间很充裕,一个月后才到期。

更新

在此处看到流程图不正确的评论后,我进行了必要的调整: 在此处输入图像描述

我还想讨论在十六进制和 ASCII 之间转换的算法是如何正确的。

更新/编辑

这是完整的程序。

0 投票
1 回答
1571 浏览

assembly - 如何调用这个子程序?

我正在 NIOS II IDE 中学习 MIPS 32 位汇编,我有一个完整的工作子例程,它将存储在 r4 和 r5 中的两个数字相乘并在 r2 中返回结果:

如何调用子例程并从中打印一些内容以确保它按预期工作?这是我的第一个子程序,我以前从未调用过子程序,所以如果我不能马上理解所有内容,请原谅我。

0 投票
3 回答
92 浏览

c - 分析 &, && 和 | 这段代码?

我想说明这段代码的区别

在代码中 & 用于“屏蔽”一点,如果使用它,结果将完全不同&&。在那种情况下,表达式1已被解释为真值 ( TRUE),而不是用于保留其中一位的一位位置。正确的?但是,如果我这样做了,会发生什么:

在第一种情况下,1它用于仅保留 LSB(最低有效位),即最右边的位,没有别的。取而代之的是什么|?如果我做这个改变会有什么不同?

0 投票
1 回答
16914 浏览

assembly - 加载词和移动之间的区别?

和有什么区别

ldw r8,0(r4)

mov r8, r4

加载字说“从内存复制”,但是当从 r4 加载字复制时,它是从寄存器复制而不是从内存复制,对吗?

0 投票
3 回答
660 浏览

c - 如何在 NIOS II 上加载图像?

好吧,我目前正在使用 NIOS II,Quartus II 12.0 并且我面临一些问题。

我想知道如何在 Nios II 上操作图像,如果有任何库可以让我这样做,比如写下图片、读取像素,以及如果可能的话读取图像。

即使您不知道如何加载图像,但您知道我可以在其中使用的图形库,请告诉我。

谢谢,圭亚基。