首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MIPS机器代码中将负数转换/编码为即时数字

如何在MIPS机器代码中将负数转换/编码为即时数字
EN

Stack Overflow用户
提问于 2019-02-19 04:01:57
回答 1查看 2.9K关注 0票数 0

我想将此指令更改为二进制代码或机器代码:addi $s3, $s1, -1000

我知道如何对操作码、rsrt进行编码,但我不知道如何将-1000转换为二进制。

我知道如何得到1的补语和2的补语。但是我不知道该怎么用这个我输入指令来表达它。

我只是不知道如何用二进制数把-1000表示成最后16位数。

因为1000(十进制)是0000001111101000的16位数。

代码语言:javascript
复制
1's complement is      1111110000010111
                                     +1
=                      1111110000011000 2's complement

所以整个指令的答案是

代码语言:javascript
复制
001000 10001 10011 1111110000011000
addi    rs    rt     immediate

是这样的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-19 07:00:40

是的,MIPS addi / addiu 使用16位签名2的补码作为指令字的低16位。CPU将在解码时将其扩展到32位(或64位)。

但是请注意,ori / xori / andi逻辑指令使用零扩展到32位(或64位)的无符号16位即时性,因此-1000是不可编码的。

要实现xori $t0, $t1, -1000,您需要在寄存器中使用类似于addiu $at, $zero, -1000的东西创建32位-1000,然后才能使用xori $t0, $t1, $at。($atbgt等伪指令使用的“汇编程序临时”寄存器。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54758681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档