Различные способы обхода массивов в RIS C -V - PullRequest
2 голосов
/ 27 февраля 2020

В настоящее время я изучаю базовый c язык ассемблера через RIS C -V, и я немного запутался в правильных способах l oop через массив.

Если нам дать a0 как указатель на целочисленный массив, будет ли этого достаточно для перехода к следующему элементу?

  • lw s0, 0 (a0) # указатель на массив хранится в s0
  • lw s0 4 (s0) # Вызывать это каждый раз, когда вы хотите перейти к следующему элементу?

Если я хочу изменить фактическое значение элемент на месте, могу ли я просто использовать sw?

Я также знаю, что использование slli / srli также позволяет вам сдвигаться, может кто-нибудь объяснить эту концепцию?

Спасибо!

1 Ответ

3 голосов
/ 27 февраля 2020

Базовый c шаблон для обхода массива (с n элементами) таков:

  1. сохранить начальный адрес массива в регистре X
  2. сохранить адрес после последнего элемент в регистре Y (например, Y = X + n * 4) со сдвигом и добавление инструкций
  3. разыменование X (то есть lw, чтобы загрузить слово с адреса, который присутствует в X) и что-то сделать с этим элементом массива
  4. увеличивает X на размер слова (например, 4 байта) с помощью инструкции add
  5. , переходящей к шагу 3. если X все еще меньше, чем Y
  6. Обход выполнен

Относительно модификации: Вы изменяете загруженный элемент массива в регистр, а затем можете сохранить новое значение регистра обратно в свой массив с помощью sw.

...