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

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

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


person Mohammad Jafar Mashhadi    schedule 02.01.2014    source источник


Ответы (1)


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

add.b (A4,D2), D7

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

person Mohammad Jafar Mashhadi    schedule 02.01.2014
comment
Почему вы разговариваете с собой во втором лице? :О - person mcleod_ideafix; 03.01.2014
comment
@mcleod_ideafix Как будто кто-то другой отвечает :D - person Mohammad Jafar Mashhadi; 03.01.2014