2016-03-13 3 views
0

Предположим, что мы имеем следующий код:Как назначить указатель другому в MIPS? (От С до MIPS)

int split_str(char ** solution, char * str, const dictionary * dict){ 
    char * ptr = str; 
    (more code here...) 
} 

Как бы я идти о «инициализацией» PTR в MIPS? Использую ли я «move», «lw» или «sw»?

Edit: Это то, что я до сих пор:

sub $sp, $sp, 16 
sw $ra, 0($sp) 
sw $s0, 4($sp) 
sw $s1, 8($sp) 
sw $s2, 12($sp) 

move $s0, $a0 # solution in $s0 
move $s1, $a1 # str in $s1 
move $s2, $a2 # dict in $s2 

(...etc.) 
+0

Зависит от того, где вы выделили его. Если вы назначили регистр, вы используете 'move'. Если вы выделили его в стеке, вы используете 'sw'. – Jester

+0

Невозможно сказать, не зная, какой ABI вы используете (в частности, как передаются аргументы функции). – Michael

+0

'str' находится в' $ a1', то, что вы делаете, копирует его из '$ a1' в' $ s1' (поэтому '$ s1'' 'ptr'), и все в порядке. Или у вас есть проблемы? – Jester

ответ

0

символ * ул ничего, кроме обращения к везде ул находится в памяти. char * ptr поэтому имеет тот же адрес для str после того, как вы назначили указатель на str указателю на ptr. просто переместите значение, сохраненное в регистре, которое содержит указатель на str для нового регистра, который представляет указатель на ptr.

предположит, что вы хотите сохранить указатель на PTR в $ t0 и указатель на ул хранятся в $ a1, этот код будет делать трюк: move $t0, a1

Смежные вопросы