2013-12-23 289 views
1

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

回答

1

条件执行通过beqbne指令在MIPS汇编中处理。所以,

beq $r1 $r2 8 

着眼于寄存器$ R1和R2 $,如果它们的内容相同,分支机构提前36个字节(4 + 4 * 8) - 第4,这样你可以有任何其他你需要的指令,通常是一个jr,跳转指令在分支跳回去之前。bne是类似的,除非它们分支不是相等。

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

0

你可以写在C程序,然后让编译器将其转换为装配为您提供:从C

# 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 
+0

没有真正纯汇编,你仍然需要功能:

#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; } 

大会标准库,根据OP的问题,这不会很好。 – user2485710