MIPS汇编

本文介绍了一个程序,用于将MIPS汇编指令转换成机器码,支持R类型(ADD、SUB、SLT)、LW、SW、BEQ、J指令。程序规定了指令格式,并提供使用方法、实例分析、设计思路和程序框图,通过读取assembly.txt文件生成binary.txt和二进制文件。作者通过与他人测试数据对比确保了程序的正确性。
摘要由CSDN通过智能技术生成
按:这是计算机组成课程第五周的作业。请各位多多评论。

要求

用C或JAVA编写程序,将MIPS汇编指令转换为机器码,并以二进制方式存盘,以作为随后反汇编的输入及CPU模拟器的执行程序。实现如下的指令:R类型(ADD、SUB、SLT)、LW、SW、BEQ、J。         

能处理的指令格式

(只是为了写程序的时候处理起来不太麻烦而做的规定)

l  每行一条指令。(不能多条或没有)

l  指令名,变量名,行名等都不能用大写字母,只能用小写和数字。

l  BEQ和J支持直接输入要跳转的行的位置(标准mips采用的),也可以输入该行的名称(小写字母开头)。

l  被跳转行的名称应以小写字母开头(若以数字开头会认为是跳转的行数)。

l  被跳转行的头部应顶格写名称,紧跟冒号,再空至少一个空格。

l  每行指令后空开至少一个空格后可写注释(是否有#其实无关紧要)。

下面是合格的(可以正确汇编的)指令:

lw   $t0,8($s4) #dfs
tes1: lw  $t1 , 0 ( $s1 )#fsfs 
add $t0, $t0,  $t1 #fefsf
test2: sw  $t0, 12  ( $s4)   #fgsdg
sub $k0  ,$a1,$a2  #grewgres
slt $s0,  $s2,$s1   #fdsgs
beq $k0,$k1,   tes1 #fgsgsd 
j   test2 #regfs
beq $k0,$k1, 12345 #fdsgsdfsdgf
add $s1,$s2,$s3
sub $s1,$s2,$s3#gfsgfdgs
slt $s1,$s2,$s3
lw $s1,20($s2)  #ddsfgrwad
hello: lw $s1,-20($s2)
sw $s1,20($s2)
sw $s1,-20($s2) #fdsgsdgdfs
beq $s0,$s1,25
j 250
beq $s0,$s1,for
for: j hello #rgegdsgfds

使用方法

将符合上述规范的指令放在assembly.txt文件中,运行本程序,就能生成用十六进制表示指令的“binary.txt”文件,和二进制文件“binary”。

实例分析

我与ZW同学交换了自己的测试数据,拿对方的汇编指令在自己的程序上跑,比对二进制结果是否相同。经过数次的debug,终于能基本保证正确。

对于上面的输入,输出binary.txt的结果是这样的:

8e880008
8e290000
1094020
ae88000c
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值