что я делаю неправильно / пытаюсь запустить программу MIPS, чтобы построить / нарисовать коробку - PullRequest
1 голос
/ 02 ноября 2010

Вот программа 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 Ответ

2 голосов
/ 02 ноября 2010

Эта программа полна ошибок - синтаксических ошибок и других..lrc, следующий за bottom:, выглядит так, как будто это имя переменной из следующей строки, которое было случайно перемещено вверх во время редактирования.drawBox(box *a0,...) также недопустим синтаксис сборки MIPS - похоже, он был задуман как комментарий, но вы забыли #.Код установки фрейма стека (addi $sp,$sp,-1) смещает указатель стека и вызывает сбой хранилищ (интересно, что код восстановления фрейма стека после метки 99: выглядит нормально).Также есть и другие ошибки.

Вся программа выглядит так, как будто она была скопирована и вставлена ​​из нескольких разных источников, абсолютно без понимания языка ассемблера MIPS, и проблема звучит как домашнее задание.Сначала попробуйте свои силы в более простой программе (сложите пару целых чисел, затем напишите простой цикл, а затем напишите функцию для вывода строки с нулевым символом в конце, что-то в этом роде) - совершенно очевидно, что вы не в своем умеэта проблема прямо сейчас.

...