繁体   English   中英

代码中的 MIPS 'nor' 用法

MIPS 'nor' usage in code

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

在我的教科书中,有以下几行代码:

addu $t0, $t1, $t2
nor $t3, $t1, $zero
sltu $t3, $t3, $t2
bne $t3, $zero, Overflow

我了解 addu 函数,但是当我使用 nor 函数以及之后的所有内容时,我不明白它的作用。 教科书只是说 t3 = t1 - 1 的 2 的补码作为第二行,但我不明白它在二进制中是如何工作的。 它是否只是将所有 0 切换为 1,反之亦然,然后将其解释为 2 的补码,从而导致负数? 这本书的解释对我来说没有意义。

2 个回复

nor是 - 使用$zero只是反转所有位。 例如,带有0的二进制101011和0导致二进制010100 这也是一种not实现汇编程序伪操作的方法。

您的问题是指:nor $t3, $t1, $zero # t3 = t1 - 1 的 2 的补码

让我解释一下.... 对二进制数应用二进制补码是一种在正负之间转换该数字的方法。 因此,例如,如果您有 0111,它是一个 +7,那么您应用二进制补码,您会得到 1001,它代表 -7。 使用的方法是翻转所有位,然后加 1。所以在我们的 +7 0111 示例中,翻转位得到 1000,然后加 1 得到 1001,这是 -7 的二进制补码表示。 如果您从 1001 开始,它是二进制补码中的 -7,并且您想要正版本,则应用 SAME 方法,翻转位给出 0110,然后加 1 给出 0111。所以同样的操作适用于两种方式。

现在,让我们看看 NOR 用一个小真值表做了什么:

t1 0 或者 也不
1 0 1 0
0 0 0 1

所以 NOR 给了我们一个翻转的 t1,无论 t1 是什么,用 0 进行 NOR 运算都会产生相反的结果。 有了这些信息,我们知道如果我们做t1 NOR 0我们得到 ~t1,这基本上是翻转 t1 中的所有位。

现在,您能想到一种涉及翻转位的方法吗? 没错,补码。 哦,但是二进制补码翻转了它们但也加了 1,所以如果我们只想翻转它们,我们可以先做二进制补码,然后减去 1 来抵消加 1。

所以这就是教科书这样说的原因,因为 0 的 NORing 本质上是翻转 t1 的位,另一种说法是二进制补码减 1。

1 MIPS代码中的奇怪错误

我正在制作一个程序,供用户输入一定范围的数字,并计算最小值,最大值和中位数。 现在,我只是试图收集这些数字并回显它们,以确保我得到它们。 这是问题所在: 我输入这样的数字:1 2 3 4 5 当打印出数组时,我得到:15345 不管使用什么数字,数组中的第二个元素总是被最后 ...

2 我的MIPS汇编代码中的错误

我有这段代码,但是它没有完全按照我的意愿执行。 它可以正确执行数学运算,但是在某些点上会打印出错误的值。 例如,如果我输入15,则应打印以下内容: 15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1 我期待这个输出,因为它是基 ...

3 C ++:此代码中int('0')的用法是什么? [重复]

这个问题已经在这里有了答案: 如何将单个字符转换为整数 10个答案 此代码查找出现在字符串中的所有数字的总和。 例 sumUpNumbers(“ 2个苹果,12个橙子”)= 5 // 2 + 1 + 2 谁能在此代码中解释使用int('0') ...

4 将C转换为MIPS代码(了解MIPS中的内存访问)

假设变量f和g分配给寄存器$ s0,$ s1。 假定数组A和B的基地址分别在寄存器$ s6和$ s7中。 以下是我编写的用于翻译A [2 *(f + g)] = B [B [16 + f / 2]]的MIPS代码: 我想当您需要两次访问数组B内的内存位置时,我搞砸了。 有人可以帮忙 ...

5 python中'@@'语法的用法

我在以下代码中遇到了双@@符号: https : //github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/rnn_cell.py 我知道@用作装饰器。 但是我似乎找不到有关@@使用的任何信息? ...

6 如何转换此Java代码以在MIPS中整理整数?

我只需要帮助整理出什么是翻译。 编辑:这是以前的代码,它要求输入整数的数量,并将每个输入保存到数组中。 此函数用于在每次接收输入时逐个排序整数(不是在所有输入都已知之后)。 我有自己的转换到下面的mips。 我测试了它,它没有工作。 假设var是$ s0 ...

7 有关代码中的MIPS指令的问题

我在下面的代码中对几个MIPS指令有疑问 1. addi是一种算术指令,目的是什么? 2.为什么在j和beq之后有单个nop ,但是在addi之后有多个nop ? 谢谢 ! ...

8 在mars4_5中运行mips代码

我有一个程序可以在用C编码的给定数组中找到最大素数: https : //pastebin.com/1HrerxsH 在通过MIPS CROSS COMPILER将其编译为MIPS程序集后,我获得了.s文件扩展名中的代码: https : //pastebin.com/NTMHY9Jw ...

9 从MIPS中的代码段写入文件

在MIPS程序集中,我应该/已经编写了一个程序,该程序可以读取整个代码段并将其写入文件,换句话说,就是将自身复制到目标文件中。 问题在于它无法访问代码段。 据我了解,在MIPS中,与X86体系结构相比,代码段和数据段之间没有确定的分隔。 供你参考 我正在使用火星4.3作为模拟器。 ...

10 'stripslashes()'的用法

当我在数据库中插入一条记录时出现反斜杠,我想知道将反斜杠函数放在哪里以照顾他们。 这是约束他们的东西。 这是另一个函数,它存储所有参数并解析并存储日期,因此我认为它可以对字符串执行相同的操作。 我无法在php.ini中关闭魔术引号,因为我使用的是yahoo虚拟主机(不是我的 ...

2013-07-25 14:01:50 1 120   php
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM