Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 将MIPS指令转换为十六进制代码的过程_Assembly_Hex_Mips - Fatal编程技术网

Assembly 将MIPS指令转换为十六进制代码的过程

Assembly 将MIPS指令转换为十六进制代码的过程,assembly,hex,mips,Assembly,Hex,Mips,我试图在网上找到一个解释,但我发现的一切似乎都是一个转换程序,有人写的,并没有真正解释它。我在这里寻找问题,大部分问题都在我的工资等级之上,我正在寻找最基本的问题。我理解这个想法(我认为): 像这样孤立他们 记住“rd”需要来自第一个寄存器,$s0,根据 add = op code of 0 $s3 = 19 in decimal, 13 in hex $s5 = 21 in decimal, 15 in hex $s0 = 16 in decimal, 10 in hex s

我试图在网上找到一个解释,但我发现的一切似乎都是一个转换程序,有人写的,并没有真正解释它。我在这里寻找问题,大部分问题都在我的工资等级之上,我正在寻找最基本的问题。我理解这个想法(我认为):

像这样孤立他们

记住“rd”需要来自第一个寄存器,$s0,根据

add = op code of 0  
$s3 = 19 in decimal, 13 in hex  
$s5 = 21 in decimal, 15 in hex  
$s0 = 16 in decimal, 10 in hex  
shamt = 0  
funct = 20 from add
我已经输了,因为它将是0131510020。。。不是8位。没有

基于此,结果是

`02758020` in hex

这到底是怎么发生的?我甚至在玩转换器,只是一次向上移动一个寄存器,而这些变化只是让我更加困惑。我错过了什么诀窍,还是一个好的资源?我找到的每一个视频都是关于机器代码(二进制)的,从来没有进入过十六进制部分。

你需要把它放在二进制中,而不是十六进制中

图像中的小数字告诉您每个部分的位数

add = op code of 0, 000000 in bin
$s3 = 19 in decimal, 13 in hex, 10011 in bin
$s5 = 21 in decimal, 15 in hex, 10101 in bin
$s0 = 16 in decimal, 10 in hex, 10000 in bin
shamt = 0, 00000 in bin
funct = 20 from add, 10100 in bin
然后将所有内容放在一起并转换为十六进制:


0B000000101110101100000001000000000=0x02758020

寄存器字段各为5位。一个值可能是15个十六进制,但它只占用5位,而不是8位。提示:在基数2中一次映射一位。当然,要理解“十六进制”只是指数字的人类表示。机器只看到二进制位。@HotLicks什么意思?将它映射到基2中?我知道每个片段占用5位,但这会如何改变其值?它可以包含的位数只会改变它可以存储的最大值。base 2是二进制的。如果一个片段占用5位,比如说,13个十六进制,那就是10011。没有额外的位元。当你像上面那样把六边形拼凑在一起,你得到00010011。哦,好的,这是有道理的。所以没有从十进制到十六进制的直接转换,可以正确地得到吗?还有,我要如何手工转换?比如说什么是好方法?很好的回答,顺便说一句,正是我想知道的,你可以很容易地手工计算出指令字每个部分的二进制值,它们都是很小的数字。一旦你有了整个指令字,你就可以非常容易地从bin转换成hex。每4位给你一个十六进制数字:@CaptainHook-这不是十进制和十六进制之间的转换-这些只是写相同值的不同方式。可以理解的是,指令中的字段不一定是4位的倍数。
add = op code of 0, 000000 in bin
$s3 = 19 in decimal, 13 in hex, 10011 in bin
$s5 = 21 in decimal, 15 in hex, 10101 in bin
$s0 = 16 in decimal, 10 in hex, 10000 in bin
shamt = 0, 00000 in bin
funct = 20 from add, 10100 in bin