Правила другие какие-то. Подскажите, как сделать умножение, а может еще что поменять? Где почитать об этом? Как видно, это MATLAB'овский синтаксис.
2. Как сделать массив таких значений? То есть можно ли скомпилить один раз массив, и больше не генерировать его мк?
_________________ На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Кстати, понял, какие правила, вроде там и нету возведения в степень, хотя если есть - поделитесь секретом. А вот я не понимаю, как создать массив:(
_________________ На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
А мне так и надо. Ну пока начал делать по-другому, и пока понравилось так. Все числа на MATLAB посчитал, ок, в конце программы создал массив. Команда lmp позволяет обратиться к элементам этого массива, теперь следующий вопрос: как вычислить адрес некоторой метки? Мне из массива нужен ненулевой элемент. Моя попытка:
Код:
; выше в Z хранится смещение, но в итоге сейчас я решил сделать для простоты Z = 0000h subi ZH, Low(-(key1<<1)) sbci ZL, High(-(key1<<1))
Не то выдает. key1 - метка начала байтового массива.
_________________ На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
поменял, но 1 в старшем регистре, а не 0, сейчас еще подумаю, почему. А самую простую программу написал! То есть теперь эта проблема. А как можно еще в AVR Studio задавать значения сигналов, идущих на входы PORTB?
_________________ На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
; SUBI ZL, Low(-key1) ; такая конструкция, в принципе, бесполезна, ; SBCI ZH, High(-key1); т.к. эти команды работают с константами ADD ZL,key1_L ADC ZH,key1_H LPM ; в R0 считывается значение массива RJMP RESET
Смысл делать такое выражение, если можно тупо на калькуляторе посчитать? В этом случае все равно придется всю формулу заново лопатить. Вот если пару чисел на Дефайненые константы заменить - то совсем другое дело.Типа этого:
Код:
.equ X = 880 .equ Y = 6 .equ K_div = 10^Y/(X*2^(27/12))
_________________ В поисках истины человек развивается.
Если не ошибаюсь, то 4я студия не понимает дробные степени в режиме ассемблера.
_________________ Когда уже ничего не помогает - прочтите, наконец, инструкцию. Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII) Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
не стоит забывать, что все вычислительные заморочки в исходнике считает компилятор при трансляции а вот чего будет делать устройство при исполнении программы...
Точно точно, нужно результат привести еще к нужному виду, если это целое, то в целое превратить наверное,( правда как это на асме делается не представляю.) А то получится дробь, а вы то не будете в программе своей учитывать и голову будете ломать в чем же дело.
Вообще есть в асме такая фича как 8000UL или тому подобное?
_________________ В поисках истины человек развивается.
Определены следующие функции: LOW(выражение) возвращает младший байт выражения HIGH(выражение) возвращает второй байт выражения BYTE2(выражение) то же что и функция HIGH BYTE3(выражение) возвращает третий байт выражения BYTE4(выражение) возвращает четвёртый байт выражения LWRD(выражение) возвращает биты 0-15 выражения HWRD(выражение) возвращает биты 16-31 выражения PAGE(выражение) возвращает биты 16-21 выражения EXP2(выражение) возвращает 2 в степени (выражение) LOG2(выражение) возвращает целую часть log2(выражение)" или в оригинальном helpе: Functions The following functions are defined: LOW(expression) returns the low byte of an expression HIGH(expression) returns the second byte of an expression BYTE2(expression) is the same function as HIGH BYTE3(expression) returns the third byte of an expression BYTE4(expression) returns the fourth byte of an expression LWRD(expression) returns bits 0-15 of an expression HWRD(expression) returns bits 16-31 of an expression PAGE(expression) returns bits 16-21 of an expression EXP2(expression) returns 2 to the power of expression LOG2(expression) returns the integer part of log2(expression) The following functions are only defined in AVRASM2: INT(expression) Truncates a floating point expression to integer (ie discards fractional part) FRAC(expression) Extracts fractional part of a floating point expression (ie discards integer part). Q7(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign + 7-bit fraction) Q15(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign +15-bit fraction) ABS() Returns the absolute value of a constant expression. DEFINED(symbol) Returns true if symbol is previously defined using .equ/.set/.def directives. Normally used in conjunction with .if directives (.if defined(foo)), but may be used in any context. It differs from other functions in that parentheses around its argument are not required, and that it only makes sense to use a single symbol as argument. STRLEN(string) returns the length of a string c+onstant, in bytes.
А никак. Промежуточные вычсиления асм-компилятор делает в фиксированной разрядности (нужно смотреть документацию, в данном случае, я думаю, 32 бита). И все константы автоматически в этой разрядности без необходимости указывать суффиксом.
_________________ Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
константу создаем мы сами, а остальное лишь для того, чтоб компилятор знал как чего обозвать и куда сунуть... либо так: .equ name = 0x55aa55 .set name2 = 0x70ff либо так: .cseg signedw: .dw 0xf243 longconst: .dw 0x5589, 0x6699 а как воспринимать данные под меткой - выбирай сам - компилятор или выполнит то, что ему укажут или выдаст ошибку переполнения, если превышены возможности его вычислительных способностей по крайней мере, 4-х байтовые слова он понимает
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения