我是MIPS汇编语言的新手,我有一个问题,我们如何用汇编语言编写一个程序,该程序将包含产品的信息,当我们运行程序时,它应该询问产品的名称,并在输入名称后应显示所有信息。就像在c ++中一样,我们只需创建if else语句然后cout信息。
答案 0 :(得分:1)
通过beq
和bne
指令在MIPS程序集中处理条件执行。所以,
beq $r1 $r2 8
查看寄存器$ r1和$ r2,如果它们的内容相等,则前面分支36个字节(4 + 4 * 8) - 前4个是这样你可以得到你想要的任何其他指令,通常是jr
,在分支跳回之前“跳转”指令。bne
是相似的,除非它不相等分支。
您不会在任何汇编语言中找到高级控制流概念,例如if
或for
或while
;你必须用比较,分支和跳跃来构建它们。
答案 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