有关指令
1 li $t1,immediate #load immediate,立即数可正可负 2 la $t1,address #load address 3 move $t1,$t2 #move $t2 to $t1 4 syscall #打印字符串时,将要输出的字符串的地址存到$a0,将$v0设置成4
关于syscall指令的使用,MARS中有详细文档,help--> syscalls
MIPS代码实现
c语言代码
1 #include<stdio.h> 2 3 int main() 4 { 5 int a, b; 6 scanf("%d", &a); 7 scanf("%d", &b); 8 if (a > b) printf("YES "); 9 else printf("NO "); 10 11 return 0; 12 }
MIPS代码
.data msg_yes: .asciiz "YES" msg_no: .asciiz "NO" #定义两个字符串 .text li $v0,5 syscall #读入a move $t0,$v0 #syscall读入的a存在$v0,要将它及时的转移到其它寄存器 li $v0,5 syscall move $t1,$v0 #读入b bgt $t0,$t1,L1 la $a0,msg_no #else li $v0,4 syscall j exit #要及时跳转到结束,否则L1中的指令也会执行 L1: #if la $a0,msg_yes li $v0,4 syscall exit: li $v0,10 syscall #$v0 == 10,运行终止
值得一提的是,由于存放两个字符串的地址是连续的,如果字符串结尾没加终止符' '或者使用的是.ascii而不是.asciiz(.asciiz自带终止符,.ascii不带)