我做错了什么/试图运行MIPS程序来构建/绘制一个盒子

时间:2010-11-02 00:29:55

标签: assembly mips

这是我写的MIPS程序。但是我的程序不会构造/绘制一个框。

.data
 button:   .struct
 xleft:    .byte    0
 ytop:     .byte    0
 size:     .byte    0
 state:    .byte    0
 label:    .space   4
 action:   .word

           .data
 box:      .struct
 ulc:      .byte
 top:      .byte
 urc:      .byte
 left:     .byte
 right:    .byte
 llc:      .byte
 bottom:   .lrc

           .data
 pressed:  .byte 201,205,184,186,174,211,196,217 #ASCII codes for program

 drawBox(box *a0,byte left,byte top, size a3);

           .code
 drawBox:  addi  $sp,$sp,-1
           sw    $a0,($sp)
           sw    $a1,4($sp)
           addi  $t0,$a3,0xf
           srl   $t9,$a3,4
           move  $$a0,$a1
           move  $a1,$a2
           syscall $xy
           lw $t7,($sp)
           syscall $print_char
           lbu $a0,box.top($t7)
           move $t1,$t8
           b     2f

 1:        syscall $print_char
           addi $t1,$t1,-1

 2:        bnez $t1,1b
           lbu $a0,box.urc($t7)
           syscall $print_char
           move $t1,$t9
           b     2f
           syscall $print_char
           addi    

 99:       addi $sp,$sp,8
           jr   $ra

1 个答案:

答案 0 :(得分:2)

这个程序充满了错误 - 语法错误等等。 .lrc后面的bottom:看起来像是来自以下行的变量名,在编辑过程中意外移动了该行。 drawBox(box *a0,...)也不是有效的MIPS汇编语法 - 看起来它似乎是一个评论,但你忘记了#。堆栈帧设置代码(addi $sp,$sp,-1)错位堆栈指针并将导致存储失败(有趣的是,标签99:后面的堆栈帧恢复代码看起来没问题)。还有其他错误。

整个程序看起来像是复制&从几个不同的来源粘贴在一起,完全不了解MIPS汇编语言,这个问题听起来就像是家庭作业。首先尝试更简单的程序(将几个整数加在一起,然后编写一个简单的循环,然后编写一个函数来打印一个以零结尾的字符串,类似的东西) - 很明显你已经超出了你的深度这个问题现在。