Добрый день!
Задача-имея два аргумента X и Y 8-бит каждое (0-255), найти значение P- произвольная функция этих аргументов, тоже 8 бит (0-255)
Решение поставленной локальной задачи решил организовать на mega128, поскольку объем памяти программ 128 кБ позволяет впихнуть
в нее всю таблицу значений функции (256*256*256 =64кб)
Ниже привожу кусок программы, функция которой в том, чтобы, зная значения X и Y - записать результат P в регистр temp
Проблема в том, что этот кусок программы работает с одним огрехом-он правильно выдает значения из таблицы, НО - только до 251-й строки
Начиная с 252-й строки (значение Х) - выдает на гора какую-то ахинею
В чем проблема-понять не могу-толи симулятор глючит толи еще что-то
В прикрепленном файле кусок проги с таблицей
Буду рад совету
Да. еще:
В программе у меня temp=R17, temp1=R18, temp2=R19 использовал AvrStudio 4 ver. 4.19, симулятор - Simulator (не Simulator2)
ldi temp1, 0xFC;-значение X от 0 до 255 - номер строки таблицы значений
ldi temp2, 0xFD;-значение Y от 0 до 255 - номер строки таблицы значений
mov YL, temp1;
clr YH;-обнуляю на всякий случай
ldi ZL, low(general_table*2) ;
ldi ZH, high(general_table*2);-копирую адрес таблицы имен строк таблицы
;Далее складываю адрес таблицы имен и удвоенное значение Х
addw:
lsl YL;
rol YH;-умножаю на 2 значение регистра Y
add ZL, YL;
adc ZH, YH;-сложение регистровых пар с учетом переноса
; Теперь в Z находится адрес элемента таблицы general_table
lpm XL, Z+;
lpm XH, Z ;- извлекаю в X значение начала строки значений row_n
;
mov ZH, XH;
mov ZL, XL;
;---Теперь прибавляю к этому значению номер столбца - Y
mov YL, temp2;
clr YH ;
add ZL, YL ;
adc ZH, YH ;
;--Копирую значение в регистр temp
lpm temp, Z;
Не могу прикрепить файл - админ плз!
Задача-имея два аргумента X и Y 8-бит каждое (0-255), найти значение P- произвольная функция этих аргументов, тоже 8 бит (0-255)
Решение поставленной локальной задачи решил организовать на mega128, поскольку объем памяти программ 128 кБ позволяет впихнуть
в нее всю таблицу значений функции (256*256*256 =64кб)
Ниже привожу кусок программы, функция которой в том, чтобы, зная значения X и Y - записать результат P в регистр temp
Проблема в том, что этот кусок программы работает с одним огрехом-он правильно выдает значения из таблицы, НО - только до 251-й строки
Начиная с 252-й строки (значение Х) - выдает на гора какую-то ахинею
В чем проблема-понять не могу-толи симулятор глючит толи еще что-то
В прикрепленном файле кусок проги с таблицей
Буду рад совету
Да. еще:
В программе у меня temp=R17, temp1=R18, temp2=R19 использовал AvrStudio 4 ver. 4.19, симулятор - Simulator (не Simulator2)
ldi temp1, 0xFC;-значение X от 0 до 255 - номер строки таблицы значений
ldi temp2, 0xFD;-значение Y от 0 до 255 - номер строки таблицы значений
mov YL, temp1;
clr YH;-обнуляю на всякий случай
ldi ZL, low(general_table*2) ;
ldi ZH, high(general_table*2);-копирую адрес таблицы имен строк таблицы
;Далее складываю адрес таблицы имен и удвоенное значение Х
addw:
lsl YL;
rol YH;-умножаю на 2 значение регистра Y
add ZL, YL;
adc ZH, YH;-сложение регистровых пар с учетом переноса
; Теперь в Z находится адрес элемента таблицы general_table
lpm XL, Z+;
lpm XH, Z ;- извлекаю в X значение начала строки значений row_n
;
mov ZH, XH;
mov ZL, XL;
;---Теперь прибавляю к этому значению номер столбца - Y
mov YL, temp2;
clr YH ;
add ZL, YL ;
adc ZH, YH ;
;--Копирую значение в регистр temp
lpm temp, Z;
Не могу прикрепить файл - админ плз!
