2013-10-04 4 views
-6

Я делаю программное обеспечение последние несколько дней с помощью некоторых людей отсюда, и теперь код закончен, но, похоже, он имеет некоторые ошибки, так как он не соответствует тому, что его судили.Код ассемблера не работает

Код выглядит следующим образом:

  add r3,#1 
      b .loop_ini 

     .add_row: 
      add r2,#1 
      mov r3,#0 
      b .loop_ini 



      LDR r2,=0x0019660D 
      umull r4,r5,r1,r2 @;RLo,RHi,N,M; r5 contains 32low bits from 
     .while_end: 
      mov r0,r2   @;Movemos el resultado del modulo a r0 
      pop {r1-r2,pc}   @;restores modified registers and returns 

.end 

Кто-нибудь найти какую-либо ошибку? Я думаю, но не знаю точно, что ошибка может быть при вставке случайных значений в матрицу.

Благодаря

+1

Было бы намного проще, если бы вы могли рассказать нам, что он должен делать и что он делает. –

+0

«Это не то, на что он способен». - Что он должен делать? Что это на самом деле? –

+0

Здравствуйте, Это суждено создать случайное число между 0 и r0-1. Это число сначала создается случайным образом, а затем обрабатывается в mod_random, чтобы стать числом от 0 до r0-1, тогда это число должно быть возвращено в основное место и быть вставлено в первую позицию матрицы 0x0, тогда программа должна работать до тех пор, пока не будет строк или столбцы для заполнения. Основные проблемы, которые у меня были, - найти, как вставить число в матрицу и как изменить значение seed32, которое определено в .data; Спасибо – None

ответ

1

Ну, как вы не предоставляют много информации о предполагаемой функциональности кода я принять некоторые догадки, но первое, что бросается в глаза, это:

str r6, [r0] 

Насколько я могу следовать за кодом, r0 предполагается случайным значением, а r6 должен быть адресом, в котором он должен быть сохранен.

Вы должны поменять местами эти два в str, так как r0 теперь используется как адрес и r6 как значение, которое нужно сохранить.

Вы также должны использовать strb вместо str, по крайней мере вам показалось, что вы хотите работать с байтами, а не с полными 32-битными словами.

Я не рассматривал его дальше, может быть больше проблем. В целом код, похоже, не написан кем-то, кто имеет опыт работы с ARM-сборкой, у него есть много возможностей для оптимизации. TBH, если у вас нет разумной причины использовать сборку, вы должны рассмотреть возможность переключения на C или другой язык высокого уровня. Правильный компилятор будет генерировать лучший код с меньшими головными болями для вас.

+0

Здравствуйте, у меня есть только опыт прошлого года. К сожалению, это домашняя работа, которую я должен сделать, но они не предоставили нам никакой информации, просто сказали нам, что делать, и я стараюсь изо всех сил. Спасибо за помощь прямо сейчас. Я проверю ваш ответ, если пойму: str r6, [r0] должен стать strb r0, [r6] ?? Спасибо за внимание, что я скоро вернусь, если сработает. Кстати, я использую devkitpro и отладчик insight, если не ошибаюсь. – None

+0

Ваш ответ исправил заполнение матрицы, но у меня все еще есть некоторые странные проблемы, так как матрица не заполняет 10x8, а 5x15: - | И он заполняется 1 не случайным типом между 0 и r0-1, который в этом случае я устанавливал его как r0 = 2, поэтому значения должны быть между 0-1. – None

+0

Извините, но ваш код просто ужасно разбит во многих отношениях. Например, в случайном порядке вы не загружаете семя, а указатель на начальное значение, тогда вы никогда не будете сохранять семя. «Str» в случайном порядке также нарушается. mod_random также не делает то, что он должен делать (и он будет ужасно медленным). –

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