Доступ к нечетным индексам байтового массива вызывает ошибку адреса
У меня есть массив байтов в моем коде, и я должен получить доступ к случайным элементам этого массива. Адрес массива загружен в 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
исправит проблему.