所以这是作业,然后是我的问题和代码到目前为止。
编写一个程序,将4个有符号整数操作数(A,B,C和D)从内存加载到寄存器中,
移动并旋转指令以将A的值乘以5,
将B的值除以4(截断结果),
然后将C的值移到右边的3位和
将D 2位的值向左旋转。
最后,程序会将A,B,C和D的新值写回内存。
请务必使用正负整数进行输入,仔细测试程序。通过检查内存操作数的更新内容来验证正确的程序操作。不要使用乘法或除法指令! (提示:5A = 4A + A。)
如果可能,请包含每行的C代码。谢谢!
我无法弄清楚如何乘以一个奇数,我知道我需要乘以尽可能接近加1,但我不知道该怎么做。
这段代码我将粘贴到下面,我目前为B,C和D ....正面和负面编号工作,但是在I / O部分,Mars打印出我要求的结果说 - 程序运行完毕(从底部掉下来) - 。这是什么意思,我该如何解决它。
我不确定B实际上是否截断了结果,请确认或更正并解释。谢谢.....下面是我的代码到目前为止。
.text
main:
lw $t0, A
lw $t1, B
lw $t2, C
lw $t3, D
sll $s0, $t0, 2 # A= 5*4=20
sra $s1, $t1, 2 # B= -44/4=-11
sra $s2, $t2, 3 # C= -128/8=-16
rol $s3, $t3, 2 # D= -8 becomes -29
li $v0, 1
move $a0, $s3 # system call to print and check results
syscall
.data # the .data directive starts the data section
A: .word 5
B: .word -44
C: .word -128
D: .word -8
li $v0, 10 # exit
syscall
答案 0 :(得分:2)
在$ s0之后,$ t0,2,$ s0 = 20,而不是25,因为它是$ t0<< 2.就像提示状态一样,你也需要做一个添加。
答案 1 :(得分:1)
对于你的第二个问题,你说程序说“然而在I / O部分,Mars打印出我要求的结果然后说 - 程序运行完毕(从底部掉下来) - 。这是什么意思我如何解决它。”
了解MARS(编译器用于运行MIPS指令)以单向方式运行整个代码,从.text部分开始读取并继续向下,直到找不到更多要读取的代码。如果没有正确退出,就像从最后一行代码中退出并以不那么优雅的方式退出。
在您的情况下,您在数据部分中有syscall 10指令。将系统调用10指令放在.text部分,即.data部分正上方,这样程序就不会从底部掉落。希望有所帮助