【问题标题】:Why do I get a MIPS syntax error for this program?为什么我会收到此程序的 MIPS 语法错误?
【发布时间】:2018-10-23 18:02:49
【问题描述】:

我有一个简单的程序来打印我的名字,但是当我组装它时,它说第一行包含一个语法错误。我很确定我写的开头几行是对的,所以我不知道为什么。当我在在线模拟器上运行它时,它会显示“语法错误”,并且在我计算机上的 QTSPIM 模拟器上显示“指令在 0x00400014 处引用未定义符号 [0x00400014] 0x0c000000 日航 0x00000000 [主] ;第188话

.text 
main:
li $v0, 11 #Load command to print characters in v0 register
la $a0, 64 #Load character '@' into 4 register
syscall
sub $v0, 10 #Subract from v0 to get 1, command to print integers
sub $a0, 64 # sub from to print 0
syscall
addi $a0, 49, $zero #Make 4 register store 1
syscall 
addi $a0, 6, $zero #Make 4th register store 6
syscall
sub $a0, 5 #Make 4th register store 1
syscall
addi $a0, $zero, 6 #Make 4th register store 7
syscall
sub $a0, 3 #Make 4th register store 4
syscall
syscall
addi $a0, $zero, 4 #Make 4th register store 8
syscall
addi $v0, 10 #Print out char again
sub $a0, 46 #Print out new line (ASCII 10)
syscall
addi $a0, $zero, 56 #Store 'B'
syscall
addi $a0, $zero, 42 #Store 'l'
syscall
sub $a0, 11 #Store 'a'
syscall
addi $a0, $zero, 2 #Store 'c'
syscall
addi $a0, $zero, 8 #Store 'k'
syscall
sub $a0, 64 #Store ','
syscall
sub $a0, 12 #Store space ' ' 
syscall
addi $a0, $zero, 52 #Store 'T'
syscall
addi $a0, $zero,27 #Store 'e'
syscall
addi $a0, $zero, 13 #Store 'r'
syscall
sub $a0, 13 #Restore 'e'
syscall
addi $a0, $zero, 7 #Store 'l'
syscall
sub $a0, 98 #Start new line
syscall
sub $v0, 1 #Store exit commmand in v0
syscall

【问题讨论】:

    标签: scripting mips qtspim


    【解决方案1】:

    首先,您需要组织和识别您的代码,这将对您有所帮助。

    二、代码中存在语法错误:

    必须是这样的:(我从火星软件得到这个。)

    sub $t1,$t2,$t3         Subtraction with overflow : set $t1 to ($t2 minus $t3)
    addi $t1,$t2,-100       Addition immediate with overflow : set $t1 to ($t2 plus signed 16-bit immediate)
    

    我真的不明白你想打印什么。为什么你用 v0 做多个操作而不是直接设置它的值?

    我修复了你的打印代码

    @0161748
    Black, Terel
    

    这就是我理解你想要的。如果是其他内容,请更具体地编辑您的评论。

    .text 
    
    main:
        li $v0, 11 #Load command to print characters in v0 register
        la $a0, 64 #Load character '@' into 4 register
        syscall
    
        sub $v0, $v0, 10 #Subract from v0 to get 1, command to print integers
        sub $a0, $a0, 64 # sub from $a0 to print 0
        syscall
    
        addi $a0, $zero, 1 #Make 4 register store 1
        syscall 
    
        addi $a0, $zero, 6 #Make 4th register store 6
        syscall
    
        sub $a0, $a0, 5 #Make 4th register store 1
        syscall
    
        addi $a0, $a0, 6 #Make 4th register store 7
        syscall
    
        sub $a0, $a0, 3 #Make 4th register store 4
        syscall
    
        addi $a0, $a0, 4 #Make 4th register store 8
        syscall
    
        addi $v0, $v0, 10 #Print out char again
        addi $a0, $zero, 10 #Print out new line (ASCII 10)
        syscall
    
        addi $a0, $zero, 66 #Store 'B'
        syscall
    
        addi $a0, $zero, 108 #Store 'l'
        syscall
    
        addi $a0, $zero, 97 #Store 'a'
        syscall
    
        addi $a0, $zero, 99 #Store 'c'
        syscall
    
        addi $a0, $zero, 107 #Store 'k'
        syscall
    
        addi $a0, $zero, 44 #Store ','
        syscall
    
        addi $a0, $zero, 32 #Store space ' ' 
        syscall
    
        addi $a0, $zero, 84 #Store 'T'
        syscall
    
        addi $a0, $zero, 101 #Store 'e'
        syscall
    
        addi $a0, $zero, 114 #Store 'r'
        syscall
    
        addi $a0, $zero, 101 #Restore 'e'
        syscall
    
        addi $a0, $zero, 108 #Store 'l'
        syscall
    
        sub $a0, $a0, 98 #Start new line
        syscall
    
        sub $v0, $v0, 1 #Store exit commmand in v0
        syscall
    

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 2022-01-23
      • 2021-06-20
      • 1970-01-01
      • 2019-11-22
      • 2018-01-22
      • 2018-06-22
      • 2016-01-01
      相关资源
      最近更新 更多