Assembly 马尔斯分支语句

Assembly 马尔斯分支语句,assembly,mars-simulator,Assembly,Mars Simulator,我在学校上计算机组装和组织课,我们在MIPS MARS中有一段代码我搞不懂。我们的老师不是在书本上教的,所以我没有办法知道如何在MIPS MARS中编写代码。我知道如何将初始值分配到$s寄存器中,但不知道如何对if语句进行编码,也不知道它们应该是什么样子。任何帮助都将被感激,因为我不能从这位老师那里学习来挽救我的生命。我们应该用MIPS MARS汇编语言编写以下代码: 1) 使用MARS汇编程序提交一个工作程序,将以下高级Java语句转换为MIPS汇编代码?(60分) 对以下分支语句进行编码。假

我在学校上计算机组装和组织课,我们在MIPS MARS中有一段代码我搞不懂。我们的老师不是在书本上教的,所以我没有办法知道如何在MIPS MARS中编写代码。我知道如何将初始值分配到$s寄存器中,但不知道如何对if语句进行编码,也不知道它们应该是什么样子。任何帮助都将被感激,因为我不能从这位老师那里学习来挽救我的生命。我们应该用MIPS MARS汇编语言编写以下代码:

1) 使用MARS汇编程序提交一个工作程序,将以下高级Java语句转换为MIPS汇编代码?(60分) 对以下分支语句进行编码。假设a=10,b=16,c=16,d=6,使用寄存器$s0表示a,s1表示b,依此类推

    if(a==b){
        Z = a+a;
        Z=Z+b+c+d;
    }

    if(a==b){
        Z=a;
        Else{
            Z = (a+b+c)-d;
        }

    if (a != b){
    Z=a;
    Else{
        Z = (a+b+c)-d;
    }
  • 循环1到10次,写出循环计数器
  • 使用循环计算10个数字的总和。写出结果

  • 因为您的问题并不具体,您只询问如何编写
    if语句
    ,这里有一个代码示例,可以从用户输入中打印两个整数中的较大者。我已经注释了if语句的开始位置,您可以在MARS上运行它

    .text
    
    
     .data
     message: .asciiz " Enter a number\n"
     message2: .asciiz "Enter another number\n"
     main:
    .text
    
    la $a0, message      #print out message
    li $v0, 4
    syscall
    
    
    li $v0, 5       # read user input (integer)
    syscall
    
    move $t0,$v0          # t0 = user input number 1
    
    la $a0, message2       #print out message2
    li $v0,4
    syscall
    
    li $v0, 5          #read user input 
    syscall
    
    move $t1,$v0       # t1 = user input number 2
    #********************************************
    # if statement begins her
    #*************************************** 
    bgt $t0,$t1, bigger    # branch to bigger if t0 > t1
    move $t2,$t1           # t2 = t1
    b   endif              
    bigger:
    move $t2,$t0           # t2 = t0
    endif:  
    # ************************************
    # if finish here
    #************************************
    move $a0,$t2           # move the result in the argument a0 
    li $v0, 1              # print it out
    syscall
    
    li $v0,10
    syscall
    
    Her也是
    if语句的伪代码

    branch $a0,$a1, lable   #in case you use `beq` means ( if a0 ==a1 jump to lable)
    #branch to lable if condition is met
    #if body
    b   endif
    lable:
    #if body
    
    endif: 
    
    让我们转换您的第一个
    if语句来详细解释它

      if(a==b){
           Z = a+a;
           Z=Z+b+c+d;
    
    
    
       beq $s0,$s1,L
       add $t0,$0,$s0
       add $t1,$t0,$s1
       add $t2,$s2,$s3
       add $t0,$t1,$t2
       b   endif
    L:
    
    endif:
    

    在MARS中,编辑给了我关于可能的指令的提示。所有条件分支都以
    b
    开头。。。如果您无法从提示中了解它实际上在做什么,请尝试用谷歌搜索特定指令(大多数分支指令也是伪指令)。一个警告是,如果您搜索程序集条件分支,您会发现关于不同CPU的一些很好的解释,它可能会涉及类似“标志”的内容。MIPS中没有这样的东西,MIPS分支始终基于作为分支指令参数提供的值,因此只搜索MIPS。MIPS还有避免分支的指令,例如,当第一个参数小于第二个参数时,
    slt
    将目标设置为
    1
    (否则值集为
    0
    ). 在您的任务中,这些将不会有多大帮助,但有时不使用分支的
    0/1
    就足以计算所需的结果。