mips汇编代码,使用shift函数的逻辑运算

时间:2014-02-09 01:50:13

标签: assembly rotation mips logical-operators bit-shift

所以这是作业,然后是我的问题和代码到目前为止。

  

编写一个程序,将4个有符号整数操作数(A,B,C和D)从内存加载到寄存器中,

     

移动并旋转指令以将A的值乘以5,

     

将B的值除以4(截断结果),

     

然后将C的值移到右边的3位和

     

将D 2位的值向左旋转。

     

最后,程序会将A,B,C和D的新值写回内存。

     

请务必使用正负整数进行输入,仔细测试程序。通过检查内存操作数的更新内容来验证正确的程序操作。不要使用乘法或除法指令! (提示:5A = 4A + A。)

     

如果可能,请包含每行的C代码。谢谢!


  1. 我无法弄清楚如何乘以一个奇数,我知道我需要乘以尽可能接近加1,但我不知道该怎么做。

  2. 这段代码我将粘贴到下面,我目前为B,C和D ....正面和负面编号工作,但是在I / O部分,Mars打印出我要求的结果说 - 程序运行完毕(从底部掉下来) - 。这是什么意思,我该如何解决它。

  3. 我不确定B实际上是否截断了结果,请确认或更正并解释。谢谢.....下面是我的代码到目前为止。


  4. .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
    

2 个答案:

答案 0 :(得分:2)

在$ s0之后,$ t0,2,$ s0 = 20,而不是25,因为它是$ t0<< 2.就像提示状态一样,你也需要做一个添加。

答案 1 :(得分:1)

对于你的第二个问题,你说程序说“然而在I / O部分,Mars打印出我要求的结果然后说 - 程序运行完毕(从底部掉下来) - 。这是什么意思我如何解决它。”

了解MARS(编译器用于运行MIPS指令)以单向方式运行整个代码,从.text部分开始读取并继续向下,直到找不到更多要读取的代码。如果没有正确退出,就像从最后一行代码中退出并以不那么优雅的方式退出。

在您的情况下,您在数据部分中有syscall 10指令。将系统调用10指令放在.text部分,即.data部分正上方,这样程序就不会从底部掉落。希望有所帮助