说明:如您已经了解MIPS及其机器码的概念可直接跳过概念部分,不影响后面题目解释。

概念:

MIPS汇编语言:机器语言程序是一个由若干条指令组成的序列。从前面对指令格式的介绍可以知道,每条指令由若干字段组成,每个字段都是一串由0、1组成的二进制数字序列。因此,程序员要读懂一个机器语言程序很费劲,也很难用机器语言直接编写程序。为了能直观地表示机器语言程序,引人了一种与机器语言一一对应的符号化表示语言,称为汇编语言。汇编语言中,用容易记忆的英文单词或缩写来表示指令操作码的含义,用标号、变量名称、寄存器名称、常数等表示操作数或地址码。这些英文单词或其缩写、标号、变量名称等都被称为助记符。

机器码:机器码指的是将硬件序列号经过一系列加密、散列形成的一串序列号。硬盘,CPU都有一个无法修改的识别码,如果格式化硬盘或重装系统则可能会改变。如果中了病毒,则也可能会改变。


讲解中需要查略的图表:

表一

表二

表三

表四

1、MIPS转机器码

例题:

(1) ori $29,$0,12

(2) sw $3,4($0)

(3) lw $5,0($0)

讲解:

这里的$数字就是寄存器的机器码,如表一中,$s0就是$16。如何将MIPS指令转换为机器码呢?其实很简单,就是一个查表的过程。我们拿例一举例,ori属于I-型指令 ,所以我们要求它的机器码,就要知道它的OP码、rs、rt、立即数。查表4可知ori的OP码为13,ori指令是将寄存器与立即数按位或存到指定寄存器中(用符号表示就是将rs与立即数按位或存到rt中)(表三),即将寄存器$0与立即数12按位或存到寄存器$29中,我们可知rs就是$0,对应编码为0,rt就是$29,对应编码就是29,立即数就是12。又图二所示,I型指令OP占6位,rs、rt占5位,立即数占16位(表二),转化为二进制为001101 00000 11101 0000000000001100,转化为十六进制为0X341D000C。

答案:

(1)0X341D000C

(2)0XAC030004

(3)0X8C050000

2、机器码转MIPS

例题:

1)0x0800000f

2) 0x0043382a

讲解:

这里我们还是拿例一来解析,机械码转化成MIPS指令就是MIPS转机器码的相反过程。因此,我们只要逆向思维就好。我们首先将十六进制0x0800000f转化为二进制000010 00000000000000000000001111,我们可以看出OP码为000010,查表可知,该指令是J-型指令(OP码6位,直接地址26位),且指令类型是jump。所以直接地址就是00000000000000000000001111,转化为十进制为15。又因为MIPS机器采用32位定长指令字,其存储单元采用字节编址,所以一条指令占4个字节。所以要将15乘4,即60.所以答案为 j 60.

额(⊙o⊙)…还是把例二也说一下吧

0x0043382a转化为2进制为000000 00010 00011 00111 00000 101010,所以OP码为000000,所以是R-型指令(6位OP码,rs、rt、rd占5位,shamt占5位,func码占6位),所以rs为00010(2) ,rt为00011(3),rd为00111(7),shamt为00000 ,func码为101010(42)。由func码查表可知是slt指令。按照R-型指令格式可知MIPS汇编为 slt $7,$2,$3

♪(・ω・)ノ 感谢您能看完,片尾一言