2015-10-08 2 views
0

Вот мой код для strncpy. Теоретически это должно работать, но когда я запускаю тесты на нем, он выдает мусор.У Strncpy в MIPS есть странное поведение

Arguments: 
    $a0 = pointer to destination array 
    $a1 = source string 
    $a2 = number of characters to copy 

Возвращает: массив назначения

strncpy: 
     beqz $a2, out 
     lb $t0, 0($a1)  #load byte 
     beqz $t0 out 
     subiu $a2, $a2, 1 
     sb $t0, 0($a0) 
     addiu $a0, $a0, 1 
     addiu $a1, $a1, 1 
     j strncpy 
out: 
    lb $0 0($a0) 
     move $v0 $a0 
     jr $ra 
+0

последнего 'lb' должен быть' sb', и, конечно, вы теряете исходный адрес, хранящийся в '$ a0' и' $ a1' – gusbro

ответ

0

coppy оригинальный адрес массива назначения ($ a0) и загрузить его в "из:" в $ a0 -> $ v0. (В вашей версии вы всегда получите полукокс за последнюю вставку ... в дополнении к указанным выше проблемам Ушли :)

addi $a3 $a0 0 

strncpy: 
(...) 

out: 
move $a0 $a3 
move $v0 $a0 
Смежные вопросы