Mips 如何打印数字的特定位?

Mips 如何打印数字的特定位?,mips,twos-complement,16-bit,Mips,Twos Complement,16 Bit,我正在努力回答这个问题: 提示用户输入数字,以16位2的补码打印数字 要打印数字,您需要将每个位打印为字符串“1” 或者字符串“0”,使用一个循环,每个循环将打印一位 迭代。从第15位开始打印。(回想一下,我们对位进行了编号 从低阶位的0开始。)在循环测试位15中,以及 然后打印“1”或“0”。使用shift指令获取下一个 重复之前,将钻头插入位置15 不幸的是,我错过了一个关于轮班和使用口罩的讲座,所以我对如何做这个实验并没有太多的了解。我怎样才能打印出一个特定的数字呢?我知道我只是一直打印第

我正在努力回答这个问题:

提示用户输入数字,以16位2的补码打印数字

要打印数字,您需要将每个位打印为字符串“1” 或者字符串“0”,使用一个循环,每个循环将打印一位 迭代。从第15位开始打印。(回想一下,我们对位进行了编号 从低阶位的0开始。)在循环测试位15中,以及 然后打印“1”或“0”。使用shift指令获取下一个 重复之前,将钻头插入位置15

不幸的是,我错过了一个关于轮班和使用口罩的讲座,所以我对如何做这个实验并没有太多的了解。我怎样才能打印出一个特定的数字呢?我知道我只是一直打印第15位,然后左移,但我不知道这会在MIPS中完成。任何帮助都将不胜感激

编辑:

我完全理解这种转变,它只是把我弄糊涂了

例如,如果我想转换为2的补码的数字是25,并且在寄存器$t0中

首先我打印第15位。然后我向左换班。然后我重复15次

它应该是这样的:

# Print bit
sll     $t0, $t0, 1

我只是不知道如何在第15点打印第一位

掩码通常与“按位and”或“按位or”指令一起使用。 要确定某个数字中的特定单个位是否设置为1, 将该数字的“按位and”与另一个数字(掩码)相加 其中,该特定位设置为1,所有其他位均为零。 (还有其他应用程序需要在其中设置多个位。) 面具;最好拿一份那些讲稿的副本!)

有很多地方可以查找MIPS指令集。例如 或 找到这样的页面,然后搜索“左移”和“按位and”。 (请记住您在哪里找到了该文档,以便以后可以查找其他内容!)

分析问题-- 1.如何打印位,以及 2.如何确定位的值

您已经知道如何确定位的值,您测试位15,并不断将其他位移到位置15


您希望如何“提示用户”输入值?打印位与打印提示相同。

我只需将提示字符串的地址加载到$a0中,将值4放入$v0中,然后执行系统调用以打印提示。我对打印有点困惑,因为我不知道我要打印的位将在哪个寄存器中。不要认为它是打印位。将其视为if-the-else:如果位为1,则加载$a=“1”并打印它。否则,加载$a=“0”并打印它。您正在测试的位是$t0,这也是您正在“打印”的位,但请注意引号--它不是您正在打印的位,而是对应于位状态的“1”或“0”提示字符串。哦,这很有意义!我现在觉得很傻,我花了很多时间试图弄清楚如何打印寄存器的实际位。我想我现在已经了解了大部分,但我最不清楚的是访问第15位。我如何准确地测试那个特定的位?我假设在我的循环中,我会将位的值放入寄存器,然后检查它是0还是1,但我不知道如何将第15位放入寄存器。请查看有关使用掩码的部分。掩码是位模式,并使用数据进行加密。您必须已经学会如何测试寄存器中的所有零;设计一个位掩码(二进制值),当与$t0中的数据合并时,如果位15为零,将导致零;如果位15不为零,将导致非零。您需要另一个临时寄存器来保存和的结果。只是为了确保我理解-假设用户输入的数字是45。16位2的补码是0000 0000 0010 1101。那么这是否意味着我应该使用1000万的面具?当这两个被AND’ed时,如果位15不为零,将导致非零。我想这个面具也适用于任何其他数字。我已经编辑了我的描述,我现在可以移动了,但我不知道如何打印一个特定的位。谢谢你的链接!在ascii中,字符“0”用值0x30表示,即“1”0x31。所以,如果你将一个数字右移N位,然后用1,你会得到0或1是吗?然后添加或0x30,得到0x30或0x31是吗?对N的每个值重复此操作。。。