Доступ к нечетным индексам байтового массива вызывает ошибку адреса

У меня есть массив байтов в моем коде, и я должен получить доступ к случайным элементам этого массива. Адрес массива загружен в A4 и индекс рассчитывается и сохраняется в D2, Мне нужно прочитать один элемент (один байт) из этого массива в индексе D2 и добавить его в D7. Позвольте мне прояснить это, показывая, как это реализовано на языке Си:

char Array[80];
char* A4 = Array; // Equivalent to &Array[0]

short D2, D7 = 0;

for(...) {
   D2 = ...
   D7 += A4[D2];
}

Как я реализовал это в сборке m68k (часть кода):

lea Array, A4
clr.l D7

* for (...) {
* D2 = ...
add.w (A4,D2),D7      ; D7 += A4[D2]; 
* }

ORG $2000
Array ds.b 80

Но иногда D2 странный и A4 + D2 нечетный адрес, так что симулятор выдает ошибку адреса, как правильно это сделать?

1 ответ

Решение

Проблема в том, что вы читаете слово из массива, а не байт, изменяя 6-ю строку кода сборки следующим образом:

add.b (A4,D2), D7

исправит проблему.

Другие вопросы по тегам