MIPS汇编语言if else语句

时间:2013-12-23 09:25:22

标签: assembly architecture mips

我是MIPS汇编语言的新手,我有一个问题,我们如何用汇编语言编写一个程序,该程序将包含产品的信息,当我们运行程序时,它应该询问产品的名称,并在输入名称后应显示所有信息。就像在c ++中一样,我们只需创建if else语句然后cout信息。

2 个答案:

答案 0 :(得分:1)

通过beqbne指令在MIPS程序集中处理条件执行。所以,

beq $r1 $r2 8 

查看寄存器$ r1和$ r2,如果它们的内容相等,则前面分支36个字节(4 + 4 * 8) - 前4个是这样你可以得到你想要的任何其他指令,通常是jr,在分支跳回之前“跳转”指令。bne是相似的,除非它相等分支。

您不会在任何汇编语言中找到高级控制流概念,例如ifforwhile;你必须用比较,分支和跳跃来构建它们。

答案 1 :(得分:0)

您可以用C编写程序,然后让编译器将它转换为程序集:

#include <stdio.h>

int main() { 
  int num; 
  printf("Enter a product to check.\n"); 
  scanf("%d",&num); 
  if(num==12) printf("Number=%d\n",num); 
  return 0; 
}

大会:

 # GNU C version cygnus-2.7.2-970404 (mips-mips-ecoff) compiled by GNU C version cygnus-2.7.2-970404.
 # options passed:  -msoft-float
 # options enabled:  -fpeephole -ffunction-cse -fkeep-static-consts
 # -fpcc-struct-return -fcommon -fverbose-asm -fgnu-linker -msoft-float
 # -meb -mcpu=3000

gcc2_compiled.:
__gnu_compiled_c:
    .rdata
    .align  2
$LC0:
    .ascii  "Enter a product to check.\n\000"
    .sdata
    .align  2
$LC1:
    .ascii  "%d\000"
    .rdata
    .align  2
$LC2:
    .ascii  "Number=%d\n\000"
    .text
    .align  2
    .globl  main
    .ent    main
main:
    .frame  $fp,32,$31      # vars= 8, regs= 2/0, args= 16, extra= 0
    .mask   0xc0000000,-4
    .fmask  0x00000000,0
    subu    $sp,$sp,32
    sw  $31,28($sp)
    sw  $fp,24($sp)
    move    $fp,$sp
    jal __main
    la  $4,$LC0
    jal printf
    la  $4,$LC1
    addu    $5,$fp,16
    jal scanf
    lw  $2,16($fp)
    li  $3,12           # 0x0000000c
    bne $2,$3,$L2
    la  $4,$LC2
    lw  $5,16($fp)
    jal printf
$L2:
    move    $2,$0
    j   $L1
$L1:
    move    $sp,$fp         # sp not trusted here
    lw  $31,28($sp)
    lw  $fp,24($sp)
    addu    $sp,$sp,32
    j   $31
    .end    main