Добавление битов сборки x32 mips - PullRequest
0 голосов
/ 15 марта 2011

Я пытаюсь добавить 2 строки битов в функцию, и я не могу заставить ее работать ... какие-либо предложения?вот мой код ниже:

$a0, "11111111111100000001111111111110"    #= -4064

$a1, "00000000001000111000000000000010"   # = 9088

$a2, resultSpace 
$a3, representation                #one's or two's complement

li $t4, 0 #carry flag 

lb $t0, 32($a0)
lb $t1, 32($a1)

move $t5, $a0

loop: 
lb $t0, 32($a0)
lb $t1, 32($a1)


add $t3, $t0, $t1


sb $t3, 32($a2)

sub $a2, $a2, 1 
sub $a0, $a0, 1
sub $a1, $a1, 1 


addi $t4, $t4, 1 # increments 
bne $t4, 32, loop 

1 Ответ

1 голос
/ 15 марта 2011

Вот несколько указателей.

  1. Вы путаете биты с ASCII-символами '0' и '1' .Если вы добавите «0» и «1», вы получите не «1», а «a» (потому что «0» - это символ 48, «1» - это символ 49, а «a» - это символ 97).

  2. Вы начинаете с просмотра смещения 32 в каждой строке.Но строки имеют длину 32 символа, поэтому допустимые смещения в них равны 0..31, поэтому самое первое, что вы делаете, это считываете конец входных данных.

  3. Вы не используете флаг переноса в дополнении.Вы также ничего не делаете для проверки переносов при добавлении битов.

  4. Однако вы используете регистр, который, как вы заявляете, является флагом переноса в качестве счетчика цикла.

Я очень далек от того, чтобы быть экспертом по ассемблеру MIPS, поэтому эти двое могут ошибаться:

  1. Не хватает некоторых инструкций в начале кода?Я имею в виду, вы действительно можете сказать просто $a2, resultSpace или вам нужно la $a2, resultSpace или что-то в этом роде?

  2. Есть ли псевдоинструкция bne-немедленная?Потому что я почти уверен, что нет непосредственной инструкции;команда bne в наборе команд MIPS предполагает получение двух регистров, а не регистра и немедленного значения.

...